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

標(biāo)題: 求大神教教怎么接線 [打印本頁(yè)]

作者: 1438147623    時(shí)間: 2018-6-23 21:23
標(biāo)題: 求大神教教怎么接線
  1. #include<reg51.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int  uint;
  4. uchar i;
  5. sbit RS=P2^7;
  6. sbit RW=P2^6;
  7. sbit E=P2^5;
  8. sbit D1=P1^0;
  9. sbit D2=P1^1;
  10. sbit k1=P2^1;//加按鍵
  11. sbit k2=P2^2;//減按鍵
  12. sbit k3=P2^0;//設(shè)置按鍵
  13. uint th=360;//設(shè)定 高溫
  14. uint tl=350;//設(shè)定 低溫
  15. uint ta;//實(shí)際溫度
  16. uchar code t0[]="WD=  .          ";
  17. uchar code t1[]="TH=  .  TL=  .  ";
  18. uchar code wendu[]="0123456789";        //利用一個(gè)溫度表解決溫度顯示亂碼
  19. sbit DQ=P2^3;//定義DS18B20總線IO
  20. uchar position;//設(shè)置的位置
  21. //延時(shí)子函數(shù)
  22. void delay(uint z)
  23. {
  24.         uint x,y;
  25.         for(x=100;x>1;x--)
  26.                 for(y=z;y>1;y--);
  27. }
  28. //LCD1602液晶寫命令子函數(shù)
  29. void write_com(uchar com)
  30. {
  31.         RS=0;
  32.         P0=com;                                       
  33.         delay(5);
  34.         E=1;
  35.         delay(5);
  36.         E=0;
  37. }
  38. //LCD1602液晶寫數(shù)據(jù)子函數(shù)
  39. void write_date(uchar date)
  40. {
  41.         RS=1;
  42.         P0=date;
  43.         delay(5);
  44.         E=1;
  45.         delay(5);
  46.         E=0;
  47. }
  48. //LCD1602液晶初始化子函數(shù)
  49. void LCD1602_init()
  50. {
  51.         E=0;
  52.         RW=0;
  53.         write_com(0x38);
  54.         write_com(0x01);
  55.         write_com(0x0c);
  56.         write_com(0x06);
  57.         write_com(0x80);        
  58.         for(i=0;i<16;i++)
  59.         {
  60.                 write_date(t0[i]);
  61.                 delay(0);
  62.         }
  63.         write_com(0x80+0x40);
  64.         for(i=0;i<16;i++)
  65.         {
  66.                 write_date(t1[i]);
  67.                 delay(0);
  68.         }
  69. }
  70. //延時(shí)子函數(shù)
  71. void tmpDelay(int num)
  72. {
  73.         while(num--);
  74. }        
  75. //DS18B20溫度傳感器初始化子函數(shù)
  76. void DS18B20_init()
  77. {
  78.         uchar x=0;
  79.         DQ=1;    //DQ復(fù)位
  80.         tmpDelay(8);  //稍做延時(shí)
  81.         DQ=0;    //單片機(jī)將DQ拉低
  82.         tmpDelay(80); //精確延時(shí) 大于 480us
  83.         DQ=1;    //拉高總線
  84.         tmpDelay(14);
  85.         x=DQ;      //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
  86.         tmpDelay(20);
  87. }
  88. //DS18B20溫度傳感器讀一個(gè)字節(jié)子函數(shù)
  89. uchar ReadOneChar()
  90. {
  91.         uchar i=0;
  92.         uchar dat=0;
  93.         for(i=8;i>0;i--)
  94.         {
  95.                 DQ=0; // 給脈沖信號(hào)
  96.                 dat>>=1;
  97.                 DQ=1; // 給脈沖信號(hào)
  98.                 if(DQ)
  99.                         dat|=0x80;
  100.                 tmpDelay(4);
  101.         }
  102.         return(dat);
  103. }
  104. //DS18B20溫度傳感器寫一個(gè)字節(jié)子函數(shù)
  105. void WriteOneChar(uchar dat)
  106. {
  107.         uchar i=0;
  108.         for(i=8;i>0;i--)
  109.         {
  110.                 DQ=0;
  111.                 DQ=dat&0x01;
  112.                 tmpDelay(5);
  113.                 DQ=1;
  114.                 dat>>=1;
  115.         }
  116. }
  117. //讀取溫度子函數(shù)
  118. uint Readtemp()
  119. {
  120.         uchar a=0;
  121.         uchar b=0;
  122.         uint t=0;
  123.         float tt=0;        
  124.         DS18B20_init();
  125.         WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
  126.         WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
  127.         DS18B20_init();
  128.         WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
  129.         WriteOneChar(0xBE); //讀取溫度寄存器
  130.         a=ReadOneChar();   //連續(xù)讀兩個(gè)字節(jié)數(shù)據(jù)   //讀低8位
  131.         b=ReadOneChar();                          //讀高8位
  132.         t=b;
  133.         t<<=8;
  134.         t=t|a; //兩字節(jié)合成一個(gè)整型變量。
  135.         tt=t*0.0625;  //得到真實(shí)十進(jìn)制溫度值,因?yàn)镈S18B20可以精確到0.0625度,所以讀回?cái)?shù)據(jù)的最低位代表的是0.0625度
  136.         t=tt*10+0.5; //放大十倍,這樣做的目的將小數(shù)點(diǎn)后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時(shí)進(jìn)行一個(gè)四舍五入操作。
  137.         return(t);
  138. }
  139. //LCD1602液晶顯示子函數(shù)
  140. void display()
  141. {
  142.            uint shi,ge,xiaoshu;            //這里的num,shi,ge,xiaoshu 必須用unsigned int無(wú)符號(hào)整數(shù)來(lái)表示,用unshigned char  字符型則顯示錯(cuò)誤
  143.         shi=th/100;                  //顯示 最高溫度 Th
  144.         ge=th/10%10;
  145.         xiaoshu=th%10;
  146.         write_com(0x80+0x40+3);
  147.         write_date(wendu[shi]);
  148.         write_com(0x80+0x40+4);
  149.         write_date(wendu[ge]);                                       
  150.         write_com(0x80+0x40+6);
  151.         write_date(wendu[xiaoshu]);
  152.         shi=tl/100;          //顯示 最低文帝 Tl  
  153.         ge=tl/10%10;
  154.         xiaoshu=tl%10;
  155.         write_com(0x80+0x40+11);
  156.         write_date(wendu[shi]);
  157.         write_com(0x80+0x40+12);
  158.         write_date(wendu[ge]);                                                
  159.         write_com(0x80+0x40+14);
  160.         write_date(wendu[xiaoshu]);
  161. }
  162. //報(bào)警子函數(shù)
  163. void temp_check()
  164. {
  165.         uint shi,ge,xiaoshu;            //這里的num,shi,ge,xiaoshu 必須用unsigned int無(wú)符號(hào)整數(shù)來(lái)表示,用unshigned char  字符型則顯示錯(cuò)誤
  166.         ta=Readtemp();
  167.         if(ta>th)
  168.         {
  169.                 D1=0;
  170.                 D2=1;
  171.         }
  172.         else if(ta<tl)
  173.         {
  174.                 D1=1;
  175.                 D2=0;
  176.         }
  177.         else
  178.         {
  179.                 D1=1;
  180.                 D2=1;
  181.         }
  182.         shi=ta/100;         //顯示 實(shí)際溫度  
  183.         ge=ta/10%10;
  184.         xiaoshu=ta%10;
  185.         write_com(0x80+3);
  186.         write_date(wendu[shi]);
  187.         write_com(0x80+4);
  188.         write_date(wendu[ge]);                                                
  189.         write_com(0x80+6);
  190.         write_date(wendu[xiaoshu]);
  191. }
  192. //按鍵掃描子函數(shù)
  193. void key()
  194. {        
  195.         if(k3==0)                 //set 按鍵 按下
  196.         {
  197.                 delay(1);
  198.                 if(k3==0)
  199.                 {                                                        //設(shè)置位置設(shè)定
  200.                         position++;
  201.                         if(position>2)
  202.                                 position=0;
  203.                         if(position==0)                  // 無(wú)設(shè)置位置
  204.                         {
  205.                                 write_com(0x80+0x40+7);
  206.                                 write_date(' ');
  207.                                 write_com(0x80+0x40+15);
  208.                                 write_date(' ');
  209.                         }
  210.                         if(position==1)                //設(shè)置TH 在th后顯示< 標(biāo)識(shí)當(dāng)前位置
  211.                         {
  212.                                 write_com(0x80+0x40+7);
  213.                                 write_date('<');
  214.                                 write_com(0x80+0x40+15);
  215.                                 write_date(' ');                  
  216.                         }
  217.                         if(position==2)          //設(shè)置Tl   在tl后顯示< 標(biāo)識(shí)當(dāng)前位置
  218.                         {
  219.                                 write_com(0x80+0x40+7);
  220.                                 write_date(' ');
  221.                                 write_com(0x80+0x40+15);
  222.                                 write_date('<');                  
  223.                         }
  224.                         while(k3==0);        
  225.                 }        
  226.         }        
  227.         if(k1==0)
  228.         {
  229.                 delay(1);
  230.                 if(k1==0)
  231.                 {
  232.                         if(position==1)
  233.                         {
  234.                                 th+=5;
  235.                                 if(th>1000)
  236.                                         th=990;
  237.                         }
  238.                         if(position==2)
  239.                         {
  240.                                 tl+=5;                          //tl>th時(shí)  是個(gè)錯(cuò)誤,這里避免此情況發(fā)生
  241.                                 if(tl>=th)
  242.                                         tl=th-5;
  243.                         }        
  244.                         display();
  245.                 }        
  246.                 while(k1==0);
  247.         }
  248.         if(k2==0)
  249.         {
  250.                 delay(1);
  251.                 if(k2==0)
  252.                 {
  253.                         if(position==1)
  254.                         {
  255.                                 th-=5;                         //th<tl時(shí)  是個(gè)錯(cuò)誤,這里避免此情況發(fā)生
  256.                                 if(th<=tl)
  257.                                         th=tl+5;
  258.                         }
  259.                         if(position==2)
  260.                         {        
  261.                                 if(tl<10)
  262.                                         tl=10;
  263.                                 else
  264.                                         tl-=5;
  265.                         }        
  266.                         display();
  267.                 }        
  268.                 while(k2==0);
  269.         }
  270. }
  271. //主函數(shù)
  272. void main()
  273. {         
  274.         uint i;
  275.         LCD1602_init();
  276.         display();
  277.         while(1)
  278.         {        
  279.                 delay(1);
  280.                 if((++i)>500) //500ms 檢測(cè)一次溫度
  281.                 {
  282.                          temp_check();
  283.                          i=0;
  284.                 }               
  285.                 key();               
  286.         }
  287. }
復(fù)制代碼



                    有線  但是不懂怎么接 求大神指點(diǎn)指點(diǎn)



作者: zhb2004xp    時(shí)間: 2018-6-23 23:26
這個(gè)好像普中科技的學(xué)習(xí)板,程序的上面改一下
sbit RS=P2^6;            
sbit RW=P2^5;               
sbit E=P2^7;   
USB右邊好像只插了紅外接收管,上面溫度那里要插DS18B20,不知道你有沒有?再右邊靠近兩排黑色按鍵的排針接P2口,左上led矩陣右邊的排針接P1。
給你個(gè)原理圖你自己再看看吧


作者: led種子    時(shí)間: 2018-6-27 22:50
P2^1用杜邦線加按鍵
P2^2用杜邦線減按鍵
P2^0用杜邦線設(shè)置按鍵
注意接獨(dú)立按鍵
ds18b20插上
看一下整板關(guān)于2^5,6,7的跳帽,按說(shuō)明走。

作者: 水墨無(wú)塵    時(shí)間: 2018-6-27 23:58
P2^1用杜邦線加按鍵 P2^2用杜邦線減按鍵 P2^0用杜邦線設(shè)置按鍵 注意接獨(dú)立按鍵 ds18b20插上 看一下整板關(guān)于2^5,6,7的跳帽,一步一步試試看




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 性网站免费 | 欧美精品综合 | 亚洲欧美一区在线 | 中文字幕一区二区三区在线观看 | 一区二区视频免费观看 | 久久国产婷婷国产香蕉 | 久久99深爱久久99精品 | 久久久久国产一区二区三区 | 欧美精品一区在线 | 亚州av | 国产精品3区| 亚洲精品视频免费看 | 亚洲精品免费视频 | 亚洲成人av在线播放 | 看羞羞视频免费 | 久久com| av天天操 | 亚洲一区二区在线视频 | 成人在线视频免费看 | 久久一区二区三区四区五区 | 国产高清一区二区三区 | 欧美国产精品一区二区 | 久久网国产| 祝你幸福电影在线观看 | 天天澡天天狠天天天做 | 99久久婷婷国产综合精品首页 | 国产91精品久久久久久久网曝门 | 亚洲国产精品一区二区久久 | 久久福利| 日韩精品一区二区三区视频播放 | 精品一区国产 | 一区二区三区日本 | 午夜激情一区 | 国产精品1区2区3区 国产在线观看一区 | 欧洲妇女成人淫片aaa视频 | 精品国产乱码一区二区三区 | 精品国产乱码久久久久久88av | 欧美激情免费在线 | 亚洲成人免费视频在线观看 | 久久久久国产成人精品亚洲午夜 | 久久久精选 |