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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC12c5A60s2單片機DHT11+LCD12864+JQ8400語音播報環境檢測程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:919912 發表于 2021-10-26 12:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5.    
  6. sbit sda = P2^1; /*一線串口發送引腳  */
  7. sbit RS = P1^1;
  8. sbit RW = P1^2;
  9. sbit  E = P1^3;
  10. sbit RST = P1^4;
  11. sbit PSB = P1^5;
  12. sbit GZJC = P1^6;  
  13. sbit LED1 = P1^7;
  14. sbit TRH = P2^0;   //THD11接口


  15. char str1[]={"   "};
  16. char str2[]={"   "};
  17. int TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,respond,com_data,temp;
  18. uchar i,j;
  19. unsigned char num1 = 1;
  20. unsigned char num2 = 1;


  21. void Car_toon();   //開機動畫
  22. void LCD_BusyCheck();//檢忙
  23. void LCD_WCMD(unsigned char cmd);//寫屏幕指令
  24. void LCD_WDAT(unsigned char dat);//字庫--字符
  25. void LCD_SetPos(unsigned char x,unsigned char y);  //屏幕定位
  26. void LCD_HZ(unsigned char *s);//漢字
  27. void DHT11_receive();
  28. char DHT11_rec_byte();
  29. void delay(int ms);
  30. void Delay1us(int T);

  31. void SendData ( unsigned addr )
  32. {
  33.     unsigned i;

  34.     EA = 0;/*發送時關掉中斷,防止中斷影響時序  */

  35.     sda = 1;/*開始拉搞  */
  36.     Delay1us ( 1000 );
  37.     sda = 0;/*開始引導碼*/
  38.     Delay1us ( 2200 );/*此處延時最少要大于2ms,此參數延時為310ms  */

  39.     for ( i = 0; i < 8; i++ ) /*總共8位數據  */
  40.     {
  41.         sda = 1;
  42.         if ( addr & 0x01 ) /*3:1表示數據位1,每個位用兩個脈沖表示  */
  43.         {
  44.             Delay1us ( 500 );
  45.             sda = 0;
  46.             Delay1us ( 210 );
  47.         }
  48.         else              /*1:3表示數據位0 ,每個位用兩個脈沖表示  */
  49.         {
  50.             Delay1us ( 210 );
  51.             sda = 0;
  52.             Delay1us ( 500 );
  53.         }
  54.         addr >>= 1;
  55.     }
  56.     sda = 1;
  57.     EA = 1;
  58. }

  59. void Delay1us(int T)
  60. {
  61.     while(T--);
  62. }

  63. void main()
  64. {
  65.     RST = 1;
  66.     PSB = 1;
  67.     GZJC = 1;
  68.     LED1 = 0;
  69.     Car_toon();
  70.    
  71.    
  72.     LCD_WCMD(0X30);  //基本指令
  73.     LCD_WCMD(0X0c);  //打開顯示
  74.     LCD_WCMD(0X01);  //清屏
  75.    
  76.     LCD_SetPos(0,0);
  77.     LCD_HZ("光照:");
  78.    
  79.     LCD_SetPos(1,0);
  80.     LCD_HZ("溫濕度:");
  81.    
  82.     LCD_SetPos(2,0);
  83.     LCD_HZ("照明系統:");
  84.    
  85.     LCD_SetPos(3,0);
  86.     LCD_HZ("通風系統:");
  87.    
  88.     DHT11_receive();
  89.       
  90.     while(1)
  91.     {
  92.         DHT11_receive();
  93.         LCD_SetPos(1,4);
  94.         LCD_WDAT(str2[0]);
  95.         LCD_WDAT(str2[1]);
  96.         
  97.         LCD_SetPos(1,6);
  98.         LCD_WDAT(str1[0]);
  99.         LCD_WDAT(str1[1]);


  100.         if( ((TH_temp/10)*10+(TH_temp%10)) > 27)
  101.         {
  102.             SendData(0x0a);
  103.             SendData(0x03);
  104.             SendData(0x0b);
  105.             delay(15000);
  106.         }
  107.         
  108.         if(GZJC == 1)
  109.         {
  110.           num1 = 1;
  111.           LCD_SetPos(2,5);
  112.           LCD_HZ("開");
  113.             
  114.             
  115.           LCD_SetPos(0,3);
  116.           LCD_HZ("弱");
  117.             LED1 = 1;
  118.             if(num2==1)    //一線串口語音
  119.             {
  120.             SendData(0x0a);
  121.             SendData(0x01);
  122.             SendData(0x0b);
  123.             delay(12000);
  124.                 num1=1;
  125.                 num2=0;
  126.             }

  127.         }
  128.         else
  129.          {
  130.          
  131.           LCD_SetPos(2,5);
  132.           LCD_HZ("關");
  133.          
  134.           LCD_SetPos(0,3);
  135.           LCD_HZ("強");
  136.             LED1 = 0;
  137.             if(num1==1)   //一線串口語音
  138.             {
  139.             SendData(0x0a);
  140.             SendData(0x02);
  141.             SendData(0x0b);
  142.             delay(12000);
  143.                 num2=1;
  144.                 num1=0;
  145.             }
  146.   
  147.    
  148.             
  149.         
  150.         }
  151.         
  152.     }
  153. }

  154. void Car_toon()     //開機動畫
  155. {
  156.     LCD_SetPos(0,1);
  157.     LCD_HZ("學院技能大賽");
  158.    
  159.     LCD_SetPos(1,1);
  160.     LCD_HZ("智能控制系統");
  161.    
  162.     LCD_WCMD(0x34); //切換到擴展指令
  163.     LCD_WCMD(0x03); //允許輸入滾動地址
  164.    
  165.     delay(5000); //1秒
  166.    
  167.     for(i=0x40;i<0x60;i++)
  168.    {
  169.     LCD_WCMD(i); //滾動內容
  170.     delay(1000); //1秒
  171.    }
  172. }


  173. void LCD_BusyCheck()  //檢測是否繁忙
  174. {
  175.     unsigned char temp;
  176.     P0 = 0xFF;
  177.     RS = 0;
  178.     RW = 1;
  179.     while(1)
  180.     {
  181.         E = 1;
  182.         temp = P0;
  183.         E = 0;
  184.         if((temp & 0x80) == 0)
  185.             break;
  186.     }
  187. }

  188. void LCD_WCMD(unsigned char cmd)
  189. {
  190.     LCD_BusyCheck();
  191.     RS = 0;
  192.     RW = 0;
  193.     P0 = cmd;
  194.     E = 1;
  195.     E = 0;
  196. }


  197. void LCD_WDAT(unsigned char dat)//寫數據
  198. {
  199.     LCD_BusyCheck();
  200.     RS = 1;
  201.     RW = 0;
  202.     P0 = dat;
  203.     E = 1;
  204.     E = 0;
  205. }

  206. void LCD_SetPos(unsigned char x,unsigned char y)  //定位
  207. {
  208.     unsigned char pos;
  209.     switch(x)
  210.     {
  211.         case 0 : x = 0x80;break;
  212.         case 1 : x = 0x90;break;
  213.         case 2 : x = 0x88;break;
  214.         case 3 : x = 0x98;break;
  215.         default:break;
  216.     }
  217.     pos = x+y;    //x范圍:0~3,y范圍:0~7
  218.     LCD_WCMD(pos);
  219. }

  220. void LCD_HZ(unsigned char *s)
  221. {
  222.     while(*s)
  223.         LCD_WDAT(*s++);
  224. }

  225. /*---------DHT11所用延時----------*/
  226. void Delay10u()
  227. {
  228.     unsigned char i;
  229.     _nop_();
  230.     _nop_();
  231.     _nop_();        
  232.     i = 24;
  233.     while (--i);
  234. }

  235. void Delay18ms()        //@11.0592MHz
  236. {
  237.     unsigned char i, j, k;

  238.     _nop_();
  239.     _nop_();
  240.     i = 1;
  241.     j = 194;
  242.     k = 159;
  243.     do
  244.     {
  245.         do
  246.         {
  247.             while (--k);
  248.         } while (--j);
  249.     } while (--i);
  250. }
  251. /*---------開機動畫所用延時----------*/
  252. void delay(int ms)
  253. {
  254.     while(ms--)
  255.    {
  256.      for(j=0;j<120;j++);
  257.    }
  258. }


  259. char DHT11_rec_byte()
  260. {   
  261.           char i;
  262.           com_data=0;
  263.           for(i=0;i<=7;i++)   
  264.          {
  265.                     respond=2;
  266.                     while((!TRH)&&respond++);
  267.             Delay10u();
  268.                                  Delay10u();
  269.                                  Delay10u();
  270.                     if(TRH)
  271.                     {
  272.                               temp=1;
  273.                               respond=2;
  274.                               while((TRH)&&respond++);
  275.                     }
  276.                     else
  277.                               temp=0;
  278.                     com_data<<=1;
  279.                     com_data|=temp;   
  280.           }
  281.           return(com_data);  
  282. }

  283. /****************************************************************************/
  284. //溫濕度讀取子程序
  285. //溫度高8位== TH_data
  286. //溫度低8位== TL_data
  287. //濕度高8位== RH_data
  288. //濕度低8位== RL_data
  289. //校驗 8位 == CK_data
  290. //調用的程序有 delay();, Delay_5us();,RECEIVE();
  291. /***************************************************************************/
  292. void DHT11_receive()
  293. {
  294.           //主機拉低18ms
  295.          TRH=0;
  296.          Delay18ms();
  297.          TRH=1;
  298.           //DATA總線由上拉電阻拉高 主機延時50us
  299.          Delay10u();
  300.          Delay10u();
  301.           //delay_us();delay_us();delay_us();delay_us();
  302.           //主機設為輸入 判斷從機響應信號
  303.             TRH=1;
  304.           //判斷DHT11是否有低電平響應信號 如不響應則跳出,響應則向下運行   
  305.          if(!TRH)   
  306.          {
  307.                   respond=2;
  308.                   //判斷DHT11發出 80us 的低電平響應信號是否結束
  309.                while((!TRH)&& respond++);
  310.                  respond=2;
  311.                  //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  312.                 while(TRH && respond++);
  313.                  //數據接收狀態   
  314.                 RH_temp = DHT11_rec_byte();
  315.                 RL_temp = DHT11_rec_byte();
  316.                 TH_temp = DHT11_rec_byte();
  317.                 TL_temp = DHT11_rec_byte();
  318.                 CK_temp = DHT11_rec_byte();
  319.                 TRH=1; //數據校驗
  320.         }
  321.         //濕度整數部分      
  322.          str1[0] = (char)(0X30+RH_temp/10);
  323.          str1[1] = (char)(0X30+RH_temp%10);
  324.          //溫度整數部分
  325.          str2[0] = (char)(0X30+TH_temp/10);
  326.          str2[1] = (char)(0X30+TH_temp%10);                                       
  327. }
復制代碼

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99亚洲精品视频 | 久久精品亚洲一区二区三区浴池 | 中文字幕在线欧美 | 日韩精品免费播放 | 天天射天天干 | 亚洲国产成人精品女人久久久 | 日韩成人av在线 | 亚洲欧美日韩一区二区 | 91精品国产综合久久婷婷香蕉 | 久久久久久久久久久久久91 | 成年人网站在线观看视频 | 国产在线精品一区二区 | 婷婷久久网 | 国产美女在线精品免费 | 97精品超碰一区二区三区 | 欧美在线小视频 | 亚洲精品中文在线 | 视频精品一区二区三区 | 91社区在线观看播放 | 成人超碰在线 | 日韩不卡一区二区 | 日日夜夜av| 黄色一级大片在线免费看产 | 精品一区av | av激情影院 | 免费国产一区 | 亚洲男人天堂 | 国产成人高清视频 | 免费国产一区二区 | 国产欧美日韩一区二区三区在线观看 | 日韩免费 | 亚洲 欧美 日韩在线 | 精品久久久久一区二区国产 | 国产精品久久久久久久久久免费看 | 欧美激情视频一区二区三区免费 | 91精品国产91久久综合桃花 | 久久新视频 | 亚洲国产精品人人爽夜夜爽 | av中文网 | 久久精品成人 | 成人妇女免费播放久久久 |