久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1997|回復: 0
打印 上一主題 下一主題
收起左側

單片機溫濕度傳感器程序 LCD12864顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:923904 發表于 2021-5-19 15:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<REG52.h>
  2. #include <intrins.h>  
  3. #define uint unsigned int  
  4. #define uchar unsigned char   
  5. sbit DATA=P1^0;//dht11data端接單片機的P1^0口//  
  6. #define LCD_data  P0             //數據口
  7. sbit LCD_RS  =  P3^5;            //寄存器選擇輸入
  8. sbit LCD_RW  =  P3^6;            //液晶讀/寫控制
  9. sbit LCD_EN  =  P3^4;            //液晶使能控制
  10. sbit LCD_PSB =  P3^7;            //串/并方式控制

  11. /*定義數字ascii編碼*/
  12. unsigned char mun_char_table[]={"0123456789"};
  13. uchar code dis1[] = {"溫度:"};
  14. uchar code dis2[] = {"濕度:"};
  15. uchar RHL,RHH,CL,CH;   
  16. uint m,n;
  17. //很正要的延時
  18. void delayus(uchar  n)
  19. {   
  20.         while(n--);
  21. }
  22. //很正要的延時
  23. void Delay10ms(void)//12M晶振下延時
  24. {   
  25.         uchar a,b;
  26.     for(b=249;b>0;b--)
  27.     for(a=17;a>0;a--);

  28. }
  29. //粗延時
  30. void delay_ms(uint z)
  31. {
  32. uint x,y;
  33. for(x=z;x>0;x--)
  34.   for(y=614;y>0;y--);
  35. }
  36. //起始
  37. void Start(void)
  38. {
  39.     DATA=1;   
  40.     delay_ms(10);   
  41.     DATA=0;            
  42.     Delay10ms(); //主機把總線拉低必須大于
  43.     //18msDHT11能檢測到起始信號   
  44.     Delay10ms();
  45.     Delay10ms();   
  46.     DATA=1;
  47.     delay_ms(1);        
  48. }
  49. uint integer(uchar x)
  50. {  
  51.     uchar h,l;  
  52.     uint n;  
  53.     l=x&0x0f;  
  54.     h=(x&0xf0)>>4;  
  55.     n=h*16+l;  
  56.     return n;   
  57. }


  58. uchar readdht11_byte()
  59. {   
  60.     uchar i,dht;  
  61.     for(i=8;i>0;i--)  
  62.     {   
  63.         dht=dht<<1;   
  64.         while(!DATA); //等待50ms   
  65.         delayus(30); //延時29us   
  66.         if(DATA==1)   
  67.         {
  68.                 dht=dht|0x01;   
  69.                 delayus(60);
  70.         }   
  71.         else     
  72.         delayus(30); //延時29us              
  73.     }
  74.         return(dht);   
  75. }
  76. void read_dht11()
  77. {   
  78.     Start();
  79.     DATA=0;   //數據線拉低>18ms  
  80.     delay_ms(20); //延時>18ms
  81.      DATA=1;   //拉高等待  
  82.     delayus(30);  //延時29us  
  83.     DATA=1;  
  84.     if(!DATA)  
  85.     {   
  86.         while(!DATA);//  
  87.         while(DATA);   
  88.         RHH=readdht11_byte();//濕度整數數據  
  89.         RHL=readdht11_byte();//濕度小數數據  
  90.         CH=readdht11_byte();//溫度整數數據  
  91.         CL=readdht11_byte();//溫度小數數據      
  92.     }  
  93. }
  94. //////////////以下是LCD12864驅動程序////////////////
  95.         
  96. /*******************************************************************/
  97. /*                                                                 */
  98. /*檢查LCD忙狀態                                                    */
  99. /*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數據。      */
  100. /*                                                                 */
  101. /*******************************************************************/
  102. bit lcd_busy()
  103. {

  104.     bit result;
  105.     P0=0X00;              //關掉數碼管的信號。阻止數碼管受到P0口信號的影響
  106.     LCD_RS = 0;
  107.     LCD_RW = 1;
  108.     LCD_EN = 1;
  109.    delay_ms(1);
  110.     result = (bit)(P0&0x80);
  111.     LCD_EN = 0;
  112.     return(result);
  113. }
  114. /*******************************************************************/
  115. /*                                                                 */
  116. /*寫指令數據到LCD                                                  */
  117. /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
  118. /*                                                                 */
  119. /*******************************************************************/
  120. void lcd_wcmd(uchar cmd)
  121. {   

  122.    while(lcd_busy());
  123.     LCD_RS = 0;
  124.     LCD_RW = 0;
  125.     LCD_EN = 0;
  126.     _nop_();
  127.     _nop_();
  128.     P0 = cmd;
  129.          delay_ms(1);
  130.     LCD_EN = 1;
  131.          delay_ms(1);
  132.     LCD_EN = 0;  
  133. }
  134. /*******************************************************************/
  135. /*                                                                 */
  136. /*寫顯示數據到LCD                                                  */
  137. /*RS=H,RW=L,E=高脈沖,D0-D7=數據。                               */
  138. /*                                                                 */
  139. /*******************************************************************/
  140. void lcd_wdat(uchar dat)
  141. {                          
  142.    while(lcd_busy());
  143.     LCD_RS = 1;
  144.     LCD_RW = 0;
  145.     LCD_EN = 0;
  146.     P0 = dat;
  147.      delay_ms(1);
  148.     LCD_EN = 1;
  149.     delay_ms(1);
  150.     LCD_EN = 0;
  151. }
  152. /*******************************************************************/
  153. /*                                                                 */
  154. /*  LCD初始化設定                                                  */
  155. /*                                                                 */
  156. /*******************************************************************/
  157. void lcd_init()
  158. {

  159.     LCD_PSB = 1;         //并口方式

  160.     lcd_wcmd(0x34);      //擴充指令操作
  161.      delay_ms(5);
  162.     lcd_wcmd(0x30);      //基本指令操作
  163.     delay_ms(5);
  164.     lcd_wcmd(0x0C);      //顯示開,關光標
  165.     delay_ms(5);
  166.     lcd_wcmd(0x01);      //清除LCD的顯示內容
  167.     delay_ms(5);
  168. }
  169. /*********************************************************/
  170. /*                                                       */
  171. /* 設定顯示位置                                          */
  172. /*                                                       */
  173. /*********************************************************/
  174. void lcd_pos(uchar X,uchar Y)
  175. {                          
  176.    uchar  pos;
  177.    if (X==0)
  178.      {X=0x80;}
  179.    else if (X==1)
  180.      {X=0x90;}
  181.    else if (X==2)
  182.      {X=0x88;}
  183.    else if (X==3)
  184.      {X=0x98;}
  185.    pos = X+Y ;  
  186.    lcd_wcmd(pos);     //顯示地址
  187. }
  188. //////////////////以上是LCD12864驅動程序////////////////

  189. void main()//主函數模塊//   
  190. {      
  191.     uchar i=0;
  192.         lcd_init();
  193.     delay_ms(1500);
  194.         lcd_pos(0,0);             //設置顯示位置為第一行的第1個字符
  195.     i = 0;
  196.     while(dis1[i] != '\0')
  197.     {                         //顯示字符
  198.             lcd_wdat(dis1[i]);
  199.         i++;
  200.     }
  201.         lcd_pos(1,0);             //設置顯示位置為第一行的第1個字符
  202.     i = 0;
  203.     while(dis2[i] != '\0')
  204.     {                         //顯示字符
  205.             lcd_wdat(dis2[i]);
  206.         i++;
  207.     }

  208.     while(1)     
  209.     {     
  210.                 delay_ms(1500);  
  211.         read_dht11();
  212.         m=integer(RHH);
  213.                 delay_ms(1);   
  214.         n=integer(CH);
  215.                 lcd_pos(0,3);   
  216.                 lcd_wdat(mun_char_table[n/10]);
  217.                 lcd_wdat(mun_char_table[n%10]);
  218.                 lcd_pos(1,3);
  219.                 lcd_wdat(mun_char_table[m/10]);
  220.                 lcd_wdat(mun_char_table[m%10]);

  221.     }  
  222. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美三级视频在线观看 | 亚洲视频免费在线观看 | 羞羞色网站 | 精品久久一区 | 亚洲 91| 欧美二区在线 | 久久久久久女 | 日韩精品在线一区 | 可以在线看的黄色网址 | 国产成人精品综合 | 欧美日韩1区2区 | 久久久久久电影 | 黄色av免费| 中文字幕在线视频一区二区三区 | 风间由美一区二区三区在线观看 | 不卡在线视频 | 欧美成人免费在线 | 日韩欧美在线视频 | 中文在线播放 | 黄色一级大片在线观看 | 一区二区三区四区免费视频 | 国产精品1区2区 | 九九免费视频 | 一区二区三区国产视频 | 成人在线视频观看 | 中文字幕日韩一区二区 | 国产在线视频在线观看 | 国产91av视频在线观看 | 欧美激情久久久 | 中文字幕乱码亚洲精品一区 | 欧美精品一区二区在线观看 | 亚洲一区视频在线播放 | 日韩毛片| 久久久久国产一区二区 | 99精品视频在线观看 | 久久精彩 | 国产精品久久久久久久久久免费看 | 91精品国产一区二区三区 | 国产日韩欧美在线观看 | 日本一区二区高清不卡 | 亚洲第一av |