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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2680|回復(fù): 1
收起左側(cè)

單片機(jī)溫濕度及co檢測(cè)源碼

[復(fù)制鏈接]
ID:237859 發(fā)表于 2018-4-26 17:47 | 顯示全部樓層 |閱讀模式
這是我們課程設(shè)計(jì)做的,溫濕度檢測(cè)應(yīng)該沒問題,co的話可以點(diǎn)煙試一下,也應(yīng)該好使

單片機(jī)源碼:
  1. #include <reg52.h>
  2. #include <wenshidu.h>
  3. #define LCD_DB P2
  4. unsigned char s1[5];
  5. unsigned char s2[5];
  6. typedef unsigned char  U8;   
  7. typedef unsigned int   U16;

  8. U16 temp;

  9. //uchar count1=70,count2=35;
  10. //uchar moshicount=0;
  11. uchar TD=0;//定時(shí)次數(shù)
  12. U8  FLAG;
  13. U8  count,U8temp;
  14. U8  T_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;
  15. U8  T_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp;
  16. U8  comdata;
  17. void LCD_init(void);//初始化函數(shù)
  18. void LCD_write_command(uchar command); //寫指令函數(shù)
  19. void LCD_write_data(uchar dat);//寫數(shù)據(jù)函數(shù)
  20. void LCD_disp_char(uchar x,uchar y,uchar dat);//在某個(gè)屏幕位置上顯示一個(gè)字符,X(0-16),y(1-2)
  21. void delay_n40us(uint n);//延時(shí)函數(shù)
  22. void sendit();
  23.         void salve_init();
  24. void LCD_init(void)//液晶初始化函數(shù)
  25. {
  26. LCD_write_command(0x38);//設(shè)置 8 位格式,2 行,5x7
  27. LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
  28. LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
  29. LCD_write_command(0x03);//清除屏幕顯示
  30. delay_n40us(100);
  31. }
  32. void timerinit()//定時(shí)器初始化函數(shù)
  33. {
  34. TMOD=0x01;
  35. TH0=-50000/256;
  36. TL0=-50000%6;
  37. EA=1;
  38. ET0=1;
  39. }



  40. void LCD_write_command(uchar dat)//寫指令函數(shù)
  41. {
  42.   LCD_DB=dat;
  43.   LCD_RS=0;//指令
  44.   LCD_RW=0;//寫入
  45.   LCD_E=1;//允許
  46.   delay_n40us(1);
  47.   LCD_E=0;
  48.   delay_n40us(1);
  49. }
  50. void LCD_write_data(uchar dat)//寫數(shù)據(jù)函數(shù)
  51. {
  52.   LCD_DB=dat;
  53.   LCD_RS=1;//數(shù)據(jù)
  54.   LCD_RW=0;//寫入
  55.   LCD_E=1;//允許
  56.   delay_n40us(1);
  57.   LCD_E=0;
  58.   delay_n40us(1);
  59. }
  60. void LCD_disp_char(uchar x,uchar y,uchar dat)//顯示一個(gè)字符函數(shù)
  61. {
  62.   uchar address;
  63.   if(y==1)
  64.     address=0x80+x;
  65.   else
  66.     address=0xc0+x;
  67.   LCD_write_command(address);
  68.   LCD_write_data(dat);
  69. }
  70. void delay_n40us(uint n)
  71. {  
  72.    uint i;
  73.    uchar j;            
  74.    for(i=n;i>0;i--)
  75.      for(j=0;j<2;j++);
  76. }
  77. void  Delay_10us(void)
  78. {
  79.     U8 i;
  80.     i--;
  81.     i--;
  82.     i--;
  83.     i--;
  84.     i--;
  85.     i--;
  86. }


  87. void Delay(U16 j)
  88. {     
  89.   U8 i;
  90.    for(;j>0;j--)
  91.      for(i=0;i<27;i++);
  92. }


  93. //*******一字節(jié)數(shù)據(jù)傳送函數(shù)*********
  94. void  COM(void)
  95. {
  96.      U8 i;
  97.      for(i=0;i<8;i++)   
  98.     {
  99.        FLAG=2;
  100.         while((!io)&&FLAG++);
  101.       Delay_10us();
  102.        Delay_10us();
  103.       Delay_10us();
  104.       temp=0;
  105.         if(io)temp=1;
  106.         FLAG=2;
  107.         while((io)&&FLAG++);
  108.          //超時(shí)則跳出for循環(huán)   
  109.          if(FLAG==1)break;
  110.          //判斷數(shù)據(jù)位是0還是1
  111. // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1
  112.         comdata<<=1;
  113.          comdata|=temp;      
  114.      }
  115. }

  116. void RH(void)
  117. {
  118.     //主機(jī)拉低18ms
  119.      io=0;
  120.     Delay(180);
  121.     io=1;
  122. //總線由上拉電阻拉高 主機(jī)延時(shí)20us
  123.     Delay_10us();
  124.     Delay_10us();
  125.     Delay_10us();
  126.     Delay_10us();
  127.    //主機(jī)設(shè)為輸入判斷從機(jī)響應(yīng)信號(hào)      
  128.     io=1;
  129.   //判斷從機(jī)是否有低電平響應(yīng)信號(hào)如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行  
  130.     if(!io)   //T !  
  131.     {
  132.         FLAG=2;
  133.   //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束      
  134.         while((!io)&&FLAG++);
  135.         FLAG=2;
  136. //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)              
  137.         while((io)&&FLAG++);
  138.         //數(shù)據(jù)接收狀態(tài)  
  139.         COM();
  140.         RH_data_H_temp=comdata;
  141.         COM();
  142.         RH_data_L_temp=comdata;
  143.         COM();
  144.         T_data_H_temp=comdata;
  145.         COM();
  146.         T_data_L_temp=comdata;
  147.         COM();
  148.         checkdata_temp=comdata;
  149.         io=1;
  150. //數(shù)據(jù)校驗(yàn)   
  151. temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);
  152.     if(temp==checkdata_temp)
  153.     {        
  154.       RH_data_H=RH_data_H_temp;      
  155.                         RH_data_L=RH_data_L_temp;
  156.       T_data_H=T_data_H_temp;
  157.       T_data_L=T_data_L_temp;
  158.       checkdata=checkdata_temp;
  159.     }
  160.      //濕度整數(shù)部分   
  161.    s1[0] = (char)(0X30+RH_data_H/10);
  162.    s1[1] = (char)(0X30+RH_data_H%10);   
  163.     //濕度小數(shù)部分
  164.    s1[2] = (char)(0X30+RH_data_L/10);
  165.     //溫度整數(shù)部分        
  166.    s2[0] = (char)(0X30+T_data_H/10);
  167.    s2[1] = (char)(0X30+T_data_H%10);      
  168.     //溫度小數(shù)部分            
  169.    s2[2] = (char)(0X30+T_data_L/10);
  170. }
  171. }
  172. void disp()//液晶顯示函數(shù)
  173. {
  174. /*  LCD_disp_char(0,1,'s');
  175.    LCD_disp_char(1,1,'h');
  176.    LCD_disp_char(2,1,'i');
  177.    LCD_disp_char(3,1,'d');
  178.    LCD_disp_char(4,1,'u');
  179.    LCD_disp_char(5,1,':');
  180.    LCD_disp_char(6,1,s1[0]);
  181.    LCD_disp_char(7,1,s1[1]);
  182.    LCD_disp_char(8,1,'.');
  183.    LCD_disp_char(9,1,s1[2]);
  184.    LCD_disp_char(10,1,'%');
  185.    LCD_disp_char(11,1,'R');
  186.    LCD_disp_char(12,1,'H');
  187.    LCD_disp_char(0,2,'w');
  188.    LCD_disp_char(1,2,'e');
  189.    LCD_disp_char(2,2,'n');
  190.    LCD_disp_char(3,2,'d');
  191.    LCD_disp_char(4,2,'u');
  192.    LCD_disp_char(5,2,':');
  193.    LCD_disp_char(6,2,s2[0]);
  194.    LCD_disp_char(7,2,s2[1]);
  195.    LCD_disp_char(8,2,'.');
  196.    LCD_disp_char(9,2,s2[2]);
  197.    LCD_disp_char(10,2,0xDF);
  198.     LCD_disp_char(11,2,'C');
  199.                 */
  200.          LCD_disp_char(0,1,'s');
  201.    LCD_disp_char(1,1,'d');
  202.    LCD_disp_char(2,1,':');
  203.    LCD_disp_char(3,1,s1[0]);
  204.    LCD_disp_char(4,1,s1[1]);
  205.    LCD_disp_char(5,1,'%');
  206.    LCD_disp_char(0,2,'w');
  207.    LCD_disp_char(1,2,'d');
  208.    LCD_disp_char(2,2,':');
  209.    LCD_disp_char(3,2,s2[0]);
  210.    LCD_disp_char(4,2,s2[1]);
  211.    LCD_disp_char(5,2,0xDF);
  212.    LCD_disp_char(6,2,'C');
  213. }
  214. //閾值設(shè)置函數(shù)
  215. /*void shezhi()
  216. {
  217.    //初值
  218.    s1[3] = (char)(0X30+count1/10);
  219.    s1[4] = (char)(0X30+count1%10);
  220.    //初值
  221.    s2[3] = (char)(0X30+count2/10);
  222.    s2[4] = (char)(0X30+count2%10);
  223.    moshi=1;
  224.    if(moshi==0)
  225.    {
  226.      Delay_10us();
  227.      while(moshi==0);
  228.      moshicount++;
  229.     }
  230.     switch(moshicount)
  231.     {
  232.      case 1:
  233.      {
  234.        INC=1;DEC=1;
  235.        if(INC==0)
  236.        {
  237.          Delay_10us();
  238.          while(INC==0);
  239.          count1++;
  240.         }
  241.         else if(DEC==0)
  242.         {
  243.           Delay_10us();
  244.           while(DEC==0);
  245.           count1--;
  246.          }
  247.         LCD_disp_char(14,1,s1[3]);
  248.         LCD_disp_char(15,1,s1[4]);
  249.         LCD_disp_char(14,2,s2[3]);
  250.         LCD_disp_char(15,2,s2[4]);
  251.       }break;
  252.       case 2:
  253.       {
  254.          //moshicount=0;
  255.          INC=1;DEC=1;
  256.          if(INC==0)
  257.          {
  258.            Delay_10us();
  259.            while(INC==0);
  260.            count2++;
  261.            }
  262.            else if(DEC==0)
  263.            {
  264.               Delay_10us();
  265.               while(DEC==0);
  266.               count2--;
  267.             }
  268.          LCD_disp_char(14,1,s1[3]);
  269.          LCD_disp_char(15,1,s1[4]);
  270.          LCD_disp_char(14,2,s2[3]);
  271.          LCD_disp_char(15,2,s2[4]);
  272.       }break;
  273.       case 3:
  274.       {
  275.         moshicount=0;
  276.         LCD_disp_char(14,1,' ');
  277.         LCD_disp_char(15,1,' ');
  278.         LCD_disp_char(14,2,' ');
  279.         LCD_disp_char(15,2,' ');
  280.        }break;
  281.   default :break;
  282.   }
  283. }

  284. */


  285. //定時(shí)器0中斷程序,每次定時(shí)50ms
  286. timer0() interrupt 1
  287. {
  288. TD++;
  289. if(TD>=100)
  290. {
  291.    TH0=-50000/256;
  292.    TL0=-50000%6;
  293.    TR0=0;
  294.    TD=0;
  295. }
  296. TH0=-50000/256;
  297. TL0=-50000%6;
  298. }


  299. //主函數(shù)
  300. void main(void)
  301. {
  302.   LCD_init();
  303.   timerinit();
  304.   Delay(4);
  305.   while(1)
  306.   {
  307.                 salve_init();
  308.                 sendit();
  309.     RH();
  310.     disp();
  311.     TR0=1;
  312.   /*  while((TD>=1)&&(TD<=100))
  313.    {
  314.        shezhi();
  315.    }*/
  316.   }
  317. }
  318. void salve_init()
  319. {
  320.         TMOD=0x20;
  321.         TH1=0xfd;
  322.         TL1=0xfd;
  323.         PCON=0x00;
  324.         TR1=1;
  325.         SCON=0x50;
  326. }
  327. void sendit()
  328. {
  329.         SBUF=s1[0];
  330.         while(!TI);
  331.         TI=0;
  332.         SBUF=s1[1];
  333.         while(!TI);
  334.         TI=0;
  335.         SBUF=s2[0];
  336.         while(!TI);
  337.         TI=0;
  338.         SBUF=s2[1];
  339.         while(!TI);
  340.         TI=0;
  341. }
  342.        
復(fù)制代碼

所有資料51hei提供下載:
溫濕度檢測(cè).rar (12.86 KB, 下載次數(shù): 22)


回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2018-4-26 18:36 | 顯示全部樓層
用的傳感器類型 及接口 介紹一下 行嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区免费视频 | 不卡视频一区二区三区 | 成年人黄色小视频 | 日本天堂一区二区 | 男插女下体视频 | 天堂久久av| 亚洲一区二区三区在线免费观看 | 色吊丝在线 | 黄色毛片视频 | 五月婷婷激情 | 久久久精品高清 | 久久久久久久国产精品 | 成人免费观看男女羞羞视频 | 日韩在线视频一区 | 国产欧美在线视频 | 7777精品伊人久久精品影视 | 一区二区精品 | 91天堂网 | 波多野结衣一区二区三区 | 中文字幕视频在线观看 | 在线免费毛片 | 国户精品久久久久久久久久久不卡 | 欧美成人一级视频 | 亚洲一区二区电影在线观看 | 一区二区三区四区在线免费观看 | 男人天堂视频在线观看 | 久久九| 日韩在线看片 | 久久一区二区三区四区 | 免费色网址 | 免费精品视频在线观看 | 国产免费拔擦拔擦8x高清 | 成人免费视频观看视频 | 四虎在线播放 | 中文字幕综合在线 | a视频在线播放 | 国产一二三区精品视频 | 欧美二区在线 | 日韩一区二区黄色片 | 欧美不卡一区 | 亚洲国产精品人人爽夜夜爽 |