国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊(cè)
搜索

stc89c5251單片機(jī)基于DHT11的溫濕計(jì)程序設(shè)計(jì),0.96寸OLED顯示

[復(fù)制鏈接]
樓主
coolice 發(fā)表于 2021-7-11 23:55:53 | 只看該作者 |只看大圖 |倒序?yàn)g覽 |閱讀模式
本作品采用STC89C52RC單片機(jī)最小系統(tǒng)和0.96寸OLED顯示屏(IIC)設(shè)計(jì),基于DHT11的溫濕計(jì)(單總線)。實(shí)測(cè)通過(guò),完美運(yùn)行。
stc89c5251單片機(jī)基于DHT11的溫濕計(jì)程序設(shè)計(jì),0.96寸OLED顯示 1.jpg

部分源碼:完整源碼見文尾附件
  1. void main()
  2. {        
  3.     DHT11_delay_ms(4500);
  4.         OLED_init();//初始化OLED(內(nèi)存地址模式默認(rèn)使用水平地址模式,可在初始化程序中更改)
  5.         
  6.         while(1)
  7.         {
  8.                 //打印BMP圖片(圖片數(shù)組,選擇圖片的取模方式(水平取模:0x00或垂直取模:0x01),是否反色(填0或1))
  9.                 OLED_print_BMP(BMP0,0x00,0);
  10.                 Delay1000ms();
  11.                 OLED_clear();//清屏
  12.                 DHT11_receive();
  13.                 OLED_print_text(0,0,"濕",0);
  14.                 OLED_print_text(0,2,"度",0);
  15.                 OLED_print_text(0,6,"溫",0);
  16.                 OLED_print_text(0,8,"度",0);
  17.                 //OLED_print_text(1,0,rec_dat,0);
  18.                   OLED_print_char(1,0,rec_dat[0],0);
  19.                   OLED_print_char(1,1,rec_dat[1],0);
  20.                   OLED_print_char(1,2,rec_dat[2],0);
  21.                   OLED_print_char(1,3,rec_dat[3],0);
  22.                   OLED_print_char(1,4,rec_dat[4],0);
  23.                   OLED_print_char(1,5,rec_dat[5],0);
  24.                   OLED_print_char(1,6,rec_dat[6],0);
  25.                   OLED_print_char(1,7,rec_dat[7],0);
  26.                   OLED_print_char(1,8,rec_dat[8],0);
  27.                  
  28.                 Delay1000ms();
  29.                 OLED_clear();//清屏
  30.                
  31.         }
  32. }

  33. OLED.C

  34. #include <intrins.h>
  35. #include "public.h"
  36. #include "OLED.h"
  37. #include "ASCII.h"
  38. #include "text.h"
  39. #include "port.h"

  40. //使用位操作加快IIC讀寫速度
  41. u8 bdata Byte_data;
  42. sbit Byte_data7=Byte_data^7;
  43. sbit Byte_data6=Byte_data^6;
  44. sbit Byte_data5=Byte_data^5;
  45. sbit Byte_data4=Byte_data^4;
  46. sbit Byte_data3=Byte_data^3;
  47. sbit Byte_data2=Byte_data^2;
  48. sbit Byte_data1=Byte_data^1;
  49. sbit Byte_data0=Byte_data^0;


  50. void OLED_delay500ms()//12.000MHz
  51. {
  52.         u8 i,j,k;

  53.         i=23;
  54.         j=205;
  55.         k=120;
  56.         do
  57.         {
  58.                 do
  59.                 {
  60.                         while (--k);
  61.                 }while (--j);
  62.         }while (--i);
  63. }


  64. //IIC通信開始
  65. void IIC_start()
  66. {
  67.         OLED_CLK=1;
  68.         OLED_SDA=1;
  69.         OLED_SDA=0;
  70.         OLED_CLK=0;
  71. }

  72. //IIC通信停止
  73. void IIC_stop()
  74. {
  75.         OLED_CLK=1;
  76.         OLED_SDA=0;
  77.         OLED_SDA=1;
  78. }

  79. //IIC寫入一個(gè)字節(jié)(字節(jié))
  80. void IIC_write_Byte(u8 Byte)
  81. {
  82.         OLED_CLK=0;
  83.         Byte_data=Byte;
  84.         
  85.         OLED_SDA=Byte_data7;OLED_CLK=1;OLED_CLK=0;
  86.         OLED_SDA=Byte_data6;OLED_CLK=1;OLED_CLK=0;
  87.         OLED_SDA=Byte_data5;OLED_CLK=1;OLED_CLK=0;
  88.         OLED_SDA=Byte_data4;OLED_CLK=1;OLED_CLK=0;
  89.         OLED_SDA=Byte_data3;OLED_CLK=1;OLED_CLK=0;
  90.         OLED_SDA=Byte_data2;OLED_CLK=1;OLED_CLK=0;
  91.         OLED_SDA=Byte_data1;OLED_CLK=1;OLED_CLK=0;
  92.         OLED_SDA=Byte_data0;OLED_CLK=1;OLED_CLK=0;

  93.         OLED_CLK=1;//IIC應(yīng)答
  94.         OLED_CLK=0;
  95. }

  96. //MCU向OLED寫入一個(gè)字節(jié)(字節(jié)數(shù)據(jù),選擇字節(jié)為命令還是數(shù)據(jù))
  97. void MCU_write_OLED_Byte(u8 Byte,u8 command_or_data)
  98. {
  99.         IIC_start();//IIC通信開始
  100.         IIC_write_Byte(0x78);//從機(jī)地址
  101.         IIC_write_Byte(command_or_data);
  102.         IIC_write_Byte(Byte);
  103.         IIC_stop();//IIC通信停止
  104. }

  105. //光標(biāo)的位置,0到7行,0到127列(行,列)
  106. void OLED_cursor_location(u8 row,u8 column)
  107. {
  108.         MCU_write_OLED_Byte(0xB0+row,OLED_COMMAND);//設(shè)置行(0~7)
  109.         MCU_write_OLED_Byte(0x10|(column&0xF0)>>4,OLED_COMMAND);//設(shè)置顯示位置大列(0~7)
  110.         MCU_write_OLED_Byte(0x00|(column&0x0F),OLED_COMMAND);//設(shè)置顯示位置小列(0~7)
  111. }

  112. //設(shè)置內(nèi)存地址模式(使用水平地址模式:0x00或垂直地址模式:0x01)
  113. void OLED_set_memory_address_mode(u8 mode)
  114. {
  115.         MCU_write_OLED_Byte(0x20,OLED_COMMAND);//設(shè)置內(nèi)存地址模式(使用水平地址模式或垂直地址模式)
  116.         MCU_write_OLED_Byte(mode,OLED_COMMAND);//水平地址模式:0x00,垂直地址模式:0x01,頁(yè)地址模式:0x02
  117.         MCU_write_OLED_Byte(0x21,OLED_COMMAND);//設(shè)置顯示位置列初始地址和終止地址
  118.         MCU_write_OLED_Byte(0x00,OLED_COMMAND);//列初始地址
  119.         MCU_write_OLED_Byte(0x7F,OLED_COMMAND);//列終止地址
  120.         MCU_write_OLED_Byte(0x22,OLED_COMMAND);//設(shè)置顯示位置頁(yè)初始地址和終止地址
  121.         MCU_write_OLED_Byte(0x00,OLED_COMMAND);//頁(yè)初始地址
  122.         MCU_write_OLED_Byte(0x07,OLED_COMMAND);//頁(yè)終止地址
  123. }
復(fù)制代碼
完整源碼: OHT11 OLED(iic).zip (74.83 KB, 售價(jià): 2 E幣)
沙發(fā)
小垃圾 發(fā)表于 2021-9-1 09:14:45 | 只看該作者
電腦顯示 cant open file OLED.h 那些怎么辦
板凳
 樓主| coolice 發(fā)表于 2021-9-1 13:57:19 | 只看該作者
小垃圾 發(fā)表于 2021-9-1 09:14
電腦顯示 cant open file OLED.h 那些怎么辦

能打開的,文件都有,如果提示打不開,可以用add existing files to ****添加進(jìn)項(xiàng)目里,有時(shí)候不同電腦的存儲(chǔ)位置不一樣項(xiàng)目找不到文件了可能會(huì)提示這個(gè)問(wèn)題,打不開啥文件就重新添加到項(xiàng)目里就可以了

 3.jpg  2.jpg  1.jpg

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

手機(jī)版|小黑屋|ELEOK |網(wǎng)站地圖

GMT+8, 2026-5-26 03:07

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復(fù) 返回頂部 返回列表