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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機使用DHT11傳感器在12864顯示溫度代碼

[復制鏈接]
跳轉到指定樓層
樓主

  1. #include "reg52.h"

  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;
  4. typedef unsigned long ulong;
  5. //顯示
  6. uchar code wen[];
  7. uchar code du[];
  8. uchar code mao_hao[];
  9. uchar code num0[];
  10. uchar code num1[];
  11. uchar code num2[];
  12. uchar code num3[];
  13. uchar code num4[];
  14. uchar code num5[];
  15. uchar code num6[];
  16. uchar code num7[];
  17. uchar code num8[];
  18. uchar code num9[];
  19. /*uchar code numA[];
  20. uchar code numB[];
  21. uchar code numC[];
  22. uchar code numD[];
  23. uchar code numE[];
  24. uchar code numF[];*/

  25. uchar code shi[];
  26. uchar code du[];

  27. sbit cs=P1^1;
  28. sbit reset=P1^0;
  29. sbit rs=P3^0;
  30. sbit sclk=P3^1;
  31. sbit sid=P3^2;

  32. //         延時
  33. void delay(ulong i)
  34. {
  35.         ulong j;
  36.         uint k;
  37.         for(j=0;j<i;j++)
  38.                 for(k=0;k<110;k++);
  39. }

  40. //數據命令
  41. void pen(uchar data1)
  42. {
  43.         uint i;
  44.         cs=0;
  45.         rs=1;
  46.         for(i=0;i<8;i++)
  47.         {
  48.                 sclk=0;
  49.                 if(data1&0x80) sid=1;
  50.                 else sid=0;
  51.                 sclk=1;
  52.                 data1<<=1;
  53.         }
  54.         cs=1;
  55. }

  56. //指令命令
  57. void tan(uchar data1)
  58. {
  59.         uint i;
  60.         cs=0;
  61.         rs=0;
  62.         for(i=0;i<8;i++)
  63.         {
  64.                 sclk=0;
  65.                 if(data1&0x80) sid=1;
  66.                 else sid=0;
  67.                 sclk=1;
  68.                 data1<<=1;
  69.         }
  70.         cs=1;
  71. }

  72. //調用漢字
  73. void dis_1616(uchar page,uchar lie,uchar *dp)
  74. {
  75.         uchar i;
  76.         uint j;
  77.         for(j=0;j<2;j++)
  78.                 {
  79.                         tan(0xb0+page+j);//設計頁地址
  80.                         tan(0x10+((lie>>4)&0x0f));        //設計列高四位
  81.                         tan(0x00+(lie&0x0f));        //設計列低四位
  82.                         for(i=0;i<16;i++)
  83.                         {
  84.                                 pen(*dp);
  85.                                 dp++;
  86.                         }
  87.                 }
  88. }

  89. //調用數字
  90. void dis_816(uchar page,uchar lie,uchar *dp)
  91. {
  92.         uchar i;
  93.         uint j;
  94.         for(j=0;j<2;j++)
  95.                 {
  96.                         tan(0xb0+page+j);//設計頁地址
  97.                         tan(0x10+((lie>>4)&0x0f));        //設計列高四位
  98.                         tan(0x00+(lie&0x0f));        //設計列低四位
  99.                         for(i=0;i<8;i++)
  100.                         {
  101.                                 pen(*dp);
  102.                                 dp++;
  103.                         }
  104.                 }
  105. }
  106. //顯示初始化
  107. void cshua()
  108. {
  109.         reset=0;
  110.                 delay(100);
  111.                 reset=1;
  112.                 delay(100);  
  113.                 tan(0xe2);         //軟復位
  114.                 delay(10);
  115.                 tan(0x2f);         //打開升壓VC,VS,VR
  116.                 delay(10);
  117.                 tan(0x23);         //粗調對比度,0x20~0x27
  118.                 tan(0x81);         //與下一條指令配套
  119.                 tan(0x20);         //細調對比度,
  120.                 tan(0xa2);         //偏壓設計,1/9
  121.                 tan(0xaf);         //打開顯示
  122. }

  123. //顯示清屏
  124. void clear()
  125. {
  126.         uchar i;
  127.         uint j;
  128.         for(j=0;j<8;j++)
  129.                 {
  130.                         tan(0xb0+j);//設計頁地址
  131.                         tan(0x10);        //設計列高四位
  132.                         tan(0x00);        //設計列低四位
  133.                         for(i=0;i<128;i++)
  134.                         {
  135.                                 pen(0x00);
  136.                         }
  137.                 }
  138. }

  139. //調用圖像
  140. void clear1(uchar *dp)
  141. {
  142.         uchar i;
  143.         uint j;
  144.         for(j=0;j<8;j++)
  145.                 {
  146.                         tan(0xb0+j);//設計頁地址
  147.                         tan(0x10);        //設計列高四位
  148.                         tan(0x00);        //設計列低四位
  149.                         for(i=0;i<128;i++)
  150.                         {
  151.                                 pen(*dp);
  152.                                 dp++;
  153.                         }
  154.                 }
  155. }


  156. sbit P2_0=P2^0;

  157. uchar  U8FLAG;        //判斷是否發送對應時間的輔助變量
  158. uchar  U8count,U8temp;
  159. uchar  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  160. uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  161. uchar  U8comdata;
  162. uchar  count, count_r=0;
  163. uchar  str[5]={"RS232"};
  164. uchar  outdata[5];  //定義發送的字節數           
  165. uchar  indata[5];         //定義接收的字節數

  166. //發送到串口
  167. SendData(uchar *dp)
  168. {
  169.         uchar i;
  170.         for(i=0;i<5;i++)
  171.         {
  172.                 outdata[i]=dp[i];
  173.         }
  174.         count = 1;
  175.         SBUF=outdata[0];        //為了進入發送程序
  176. }

  177. /*SendData(uchar *a)
  178. {
  179.         outdata[0] = a[0];
  180.         outdata[1] = a[1];
  181.         outdata[2] = a[2];
  182.         outdata[3] = a[3];
  183.         outdata[4] = a[4];
  184.         count = 1;
  185.         SBUF=outdata[0];
  186. } */

  187. //延時
  188.        void Delay1(uint j)
  189.     {      
  190.                 uchar i;
  191.                 uchar x;
  192.             for(x=j;j>0;j--)
  193.           {         
  194.                 for(i=0;i<27;i++);
  195.           }
  196.     }

  197. //延時10us
  198. void  Delay_10us(void)
  199. {
  200.      uchar i;
  201.      i--;
  202.      i--;
  203.      i--;
  204.      i--;
  205.      i--;
  206.      i--;
  207. }

  208. //解碼數據
  209. void COM()
  210. {
  211.         uchar i;
  212.         for(i=0;i<8;i++)
  213.         {
  214.                 U8FLAG=2;
  215.                 while((!P2_0)&&(U8FLAG++));                //判斷是否發送完50us的低電平
  216.                 Delay_10us();
  217.                 Delay_10us();
  218.                 Delay_10us();               
  219.                 U8temp=0;
  220.                 if(P2_0) U8temp=1;                //判斷數據是0還是1
  221.                 U8FLAG=2;
  222.                 while((P2_0)&&(U8FLAG++));
  223.                 if(U8FLAG==1) break;        //超時跳出for循環

  224.                 U8comdata<<=1;
  225.                 U8comdata|=U8temp;
  226.         }               
  227. }

  228. //濕溫度讀取程序
  229. void RH()
  230. {
  231.         //主機拉低18us
  232.         P2_0=0;
  233.         Delay1(180);
  234.         //主機拉高20~40us
  235.         P2_0=1;
  236.         Delay_10us();
  237.         Delay_10us();
  238.         Delay_10us();
  239.         Delay_10us();
  240.         //主機設為輸入 電平拉高
  241.         P2_0=1;
  242.         //判斷是否為低電平,如果不為低電平則跳出
  243.         if(!P2_0)
  244.         {
  245.                 U8FLAG=2;
  246.                 while((!P2_0)&&(U8FLAG++));                //判斷是否發送完80us低電平
  247.                 U8FLAG=2;
  248.                 while((P2_0)&&(U8FLAG++));                //判斷是否發送完80us高電平
  249.                 //數據接收狀態                 
  250.             COM();
  251.             U8RH_data_H_temp=U8comdata;           //----溫度高8位
  252.             COM();
  253.             U8RH_data_L_temp=U8comdata;           //----溫度低8位
  254.             COM();
  255.             U8T_data_H_temp=U8comdata;           //----濕度高8位
  256.             COM();
  257.             U8T_data_L_temp=U8comdata;           //----濕度低8位
  258.             COM();
  259.             U8checkdata_temp=U8comdata;           //----校驗 8位
  260.             P2_0=1;                //數據校驗

  261.                 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  262.            if(U8temp==U8checkdata_temp)
  263.            {
  264.                      U8RH_data_H=U8RH_data_H_temp;                //----溫度高8位== U8T_data_H------
  265.                      U8RH_data_L=U8RH_data_L_temp;                //----溫度低8位== U8T_data_L------
  266.                   U8T_data_H=U8T_data_H_temp;                //----濕度高8位== U8RH_data_H-----
  267.                      U8T_data_L=U8T_data_L_temp;                //----濕度低8位== U8RH_data_L-----
  268.                      U8checkdata=U8checkdata_temp;                //----校驗 8位 == U8checkdata-----
  269.            }
  270.         }
  271. }

  272. void init1()
  273. {
  274.         TMOD=0X20;
  275.         TH1=253;
  276.         TL1=253;        //波特率9600
  277.         TR1=1;
  278.         
  279.         TI=0;
  280.         RI=0;

  281.         SM0=0;
  282.         SM1=1;        //選擇串口工作方式
  283.         EA=1;
  284.         ES=1;        //串口中斷允許位,用于串口收發中斷
  285.         REN=1;        //允許串口接收
  286. }


  287. void main()
  288. {
  289.         uchar i,j;
  290.         init1();

  291.         SendData(str);   //發送到串口
  292.         Delay1(1);       //延時100US(12M晶振)
  293.         while(1)
  294.         {
  295.            //調用溫濕度讀取子程序
  296.            RH();

  297.            str[0]=U8RH_data_H;
  298.            str[1]=U8RH_data_L;
  299.            str[2]=U8T_data_H;
  300.            str[3]=U8T_data_L;
  301.            str[4]=U8checkdata;
  302.            SendData(str);  //發送到串口              
  303.            Delay1(20000);        //讀取模塊數據周期不易小于 2S
  304.            ES=0;
  305.            cshua();
  306.            clear();
  307.            tan(0xc8);
  308.            tan(0xa0);
  309.            i=U8RH_data_H;
  310.            j=i*0.5;
  311.            
  312.            dis_1616(0,0,wen);
  313.            delay(10);
  314.            dis_1616(0,16,du);
  315.            delay(10);
  316.            dis_1616(0,32,mao_hao);
  317.            delay(10);
  318.            switch(j/10)
  319.            {
  320.                            case(0) :dis_816(0,40,num0);break;
  321.                         case(1) :dis_816(0,40,num1);break;
  322.                         case(2) :dis_816(0,40,num2);break;
  323.                         case(3) :dis_816(0,40,num3);break;
  324.                         case(4) :dis_816(0,40,num4);break;
  325.                         case(5) :dis_816(0,40,num5);break;
  326.                         case(6) :dis_816(0,40,num6);break;
  327.                         case(7) :dis_816(0,40,num7);break;
  328.                         case(8) :dis_816(0,40,num8);break;
  329.                         case(9) :dis_816(0,40,num9);break;
  330.            }

  331.            delay(10);

  332.            switch(j%10)
  333.            {
  334.                            case(0) :dis_816(0,48,num0);break;
  335.                         case(1) :dis_816(0,48,num1);break;
  336.                         case(2) :dis_816(0,48,num2);break;
  337.                         case(3) :dis_816(0,48,num3);break;
  338.                         case(4) :dis_816(0,48,num4);break;
  339.                         case(5) :dis_816(0,48,num5);break;
  340.                         case(6) :dis_816(0,48,num6);break;
  341.                         case(7) :dis_816(0,48,num7);break;
  342.                         case(8) :dis_816(0,48,num8);break;
  343.                         case(9) :dis_816(0,48,num9);break;
  344.            }
  345.                 delay(10);

  346.         }
  347. }

  348. void RSINTR() interrupt 4 using 2
  349. {
  350. /*        uchar InPut3;
  351.         if(TI==1) //發送中斷         
  352.         {
  353.                 TI=0;
  354.                 if(count!=5) //發送完5位數據         
  355.                 {
  356.                         SBUF= outdata[count];
  357.                         count++;
  358.                 }
  359.         }

  360.         if(RI==1)         //接收中斷                  
  361.         {        
  362.                 InPut3=SBUF;
  363.                 indata[count_r]=InPut3;
  364.                 count_r++;
  365.                 RI=0;                                                                 
  366.                 if (count_r==5)//接收完4位數據
  367.                 {
  368.                 //數據接收完畢處理。
  369.                         count_r=0;
  370.                 str[0]=indata[0];
  371.                  str[1]=indata[1];
  372.                    str[2]=indata[2];
  373.                          str[3]=indata[3];
  374.                                  str[4]=indata[4];
  375.                                  P0=0;                            //
  376.                 }
  377.         } */
  378.         uchar input;  //暫時存放接收數據
  379.         uchar i;
  380.         if(TI==1)          //發送中斷
  381.         {
  382.                 TI=0;
  383.                 if(count!=5)
  384.                 {
  385.                         SBUF=outdata[count];
  386.                         count++;
  387.                 }                          
  388.         }

  389.         if(RI==1)        //接收中斷        
  390.         {
  391.                 input=SBUF;
  392.                 indata[count_r]=input;
  393.                 count_r++;
  394.                 if(count_r==5)
  395.                 {
  396.                         count=0;
  397.                         for(i=0;i<5;i++)
  398.                         {
  399.                                 str[i]=indata[i];
  400.                         }                        
  401.                 }               
  402.         }
  403. }

  404. uchar code wen[]={/*--  文字:  溫  --*/
  405. /*--  Arial Rounded MT Bold12;  此字體下對應的點陣為:寬x高=16x16   --*/
  406. 0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
  407. 0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
  408. };
  409. uchar code du[]={
  410. /*--  文字:  度  --*/
  411. /*--  Arial Rounded MT Bold12;  此字體下對應的點陣為:寬x高=16x16   --*/
  412. 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
  413. 0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
  414. };

  415. uchar code mao_hao[]={ /*--  文字:  :  --*/
  416. /*--  Arial Rounded MT Bold12;  此字體下對應的點陣為:寬x高=16x16   --*/
  417. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  418. 0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  419. };
  420. uchar code num0[]={ /*--  文字:  0  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00 };
  421. uchar code num1[]={ /*--  文字:  1  --*//*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00 };
  422. uchar code num2[]={ /*--  文字:  2  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00 };
  423. uchar code num3[]={ /*--  文字:  3  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00 };
  424. uchar code num4[]={ /*--  文字:  4  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00 };  
  425. uchar code num5[]={ /*--  文字:  5  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00 };
  426. uchar code num6[]={ /*--  文字:  6  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00 };
  427. uchar code num7[]={ /*--  文字:  7  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00 };
  428. uchar code num8[]={ /*--  文字:  8  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00 };
  429. uchar code num9[]={ /*--  文字:  9  --*/ /*--  宋體 12;  此字體下對應的點陣為:寬 x 高=8x16   --*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00 };
  430. uchar code shi[]={
  431. /*--  文字:  濕  --*/
  432. /*--  Arial Rounded MT Bold12;  此字體下對應的點陣為:寬x高=16x16   --*/
  433. 0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
  434. 0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00,
  435. };

  436. /*uchar code numA[]={0xE0,0xF0,0x98,0x8C, 0x98,0xF0,0xE0,0x00, 0x0F,0x0F,0x00,0x00, 0x00,0x0F,0x0F,0x00,  //-A-
  437. };

  438. uchar code numB[]={0x04,0xFC,0xFC,0x44, 0x44,0xFC,0xB8,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0F,0x07,0x00,  //-B-
  439. };
  440. uchar code numC[]={0xF0,0xF8,0x0C,0x04, 0x04,0x0C,0x18,0x00, 0x03,0x07,0x0C,0x08, 0x08,0x0C,0x06,0x00,  //-C-
  441. };
  442. uchar code numD[]={0x04,0xFC,0xFC,0x04, 0x0C,0xF8,0xF0,0x00, 0x08,0x0F,0x0F,0x08, 0x0C,0x07,0x03,0x00,  //-D-
  443. };
  444. uchar code numE[]={0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0C,0x0E,0x00,  //-E-
  445. };
  446. uchar code numF[]={0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x00,0x00,0x00,0x00,  //-F-
  447. };         */

復制代碼

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美久久久电影 | 激情在线视频 | 色视频在线播放 | 午夜影院在线观看免费 | 欧美日韩精品影院 | 精品久久九九 | 亚洲第一在线视频 | 在线国产一区二区三区 | 欧美日一区 | 91av视频在线观看 | 亚洲日韩欧美一区二区在线 | 激情在线视频网站 | www.久久| www.一区二区三区 | 国产丝袜一区二区三区免费视频 | 国产一级在线 | 麻豆亚洲 | 久久久久久成人 | 欧美日韩久久精品 | 日韩av在线一区 | 黄色毛片黄色毛片 | 国产亚洲精品精品国产亚洲综合 | 午夜精品一区 | 成人一区二区三区在线观看 | 成人欧美一区二区三区黑人孕妇 | 一级a性色生活片久久毛片 午夜精品在线观看 | www亚洲成人 | 亚洲天堂一区二区 | 欧美精品一区二区三区在线播放 | 欧美中文一区 | 黑人巨大精品欧美黑白配亚洲 | 97超碰在线免费 | 中文字幕成人在线 | 午夜影视在线观看 | 欧美激情第一区 | 91久久国产综合久久 | 色婷婷av99xx | 欧美午夜精品理论片a级按摩 | av先锋资源| 亚洲成人久久久 | 九色国产 |