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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求大神教教怎么接線

[復制鏈接]
跳轉到指定樓層
樓主
  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;//設置按鍵
  13. uint th=360;//設定 高溫
  14. uint tl=350;//設定 低溫
  15. uint ta;//實際溫度
  16. uchar code t0[]="WD=  .          ";
  17. uchar code t1[]="TH=  .  TL=  .  ";
  18. uchar code wendu[]="0123456789";        //利用一個溫度表解決溫度顯示亂碼
  19. sbit DQ=P2^3;//定義DS18B20總線IO
  20. uchar position;//設置的位置
  21. //延時子函數
  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液晶寫命令子函數
  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液晶寫數據子函數
  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液晶初始化子函數
  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. //延時子函數
  71. void tmpDelay(int num)
  72. {
  73.         while(num--);
  74. }        
  75. //DS18B20溫度傳感器初始化子函數
  76. void DS18B20_init()
  77. {
  78.         uchar x=0;
  79.         DQ=1;    //DQ復位
  80.         tmpDelay(8);  //稍做延時
  81.         DQ=0;    //單片機將DQ拉低
  82.         tmpDelay(80); //精確延時 大于 480us
  83.         DQ=1;    //拉高總線
  84.         tmpDelay(14);
  85.         x=DQ;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  86.         tmpDelay(20);
  87. }
  88. //DS18B20溫度傳感器讀一個字節子函數
  89. uchar ReadOneChar()
  90. {
  91.         uchar i=0;
  92.         uchar dat=0;
  93.         for(i=8;i>0;i--)
  94.         {
  95.                 DQ=0; // 給脈沖信號
  96.                 dat>>=1;
  97.                 DQ=1; // 給脈沖信號
  98.                 if(DQ)
  99.                         dat|=0x80;
  100.                 tmpDelay(4);
  101.         }
  102.         return(dat);
  103. }
  104. //DS18B20溫度傳感器寫一個字節子函數
  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. //讀取溫度子函數
  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); // 跳過讀序號列號的操作
  126.         WriteOneChar(0x44); // 啟動溫度轉換
  127.         DS18B20_init();
  128.         WriteOneChar(0xCC); //跳過讀序號列號的操作
  129.         WriteOneChar(0xBE); //讀取溫度寄存器
  130.         a=ReadOneChar();   //連續讀兩個字節數據   //讀低8位
  131.         b=ReadOneChar();                          //讀高8位
  132.         t=b;
  133.         t<<=8;
  134.         t=t|a; //兩字節合成一個整型變量。
  135.         tt=t*0.0625;  //得到真實十進制溫度值,因為DS18B20可以精確到0.0625度,所以讀回數據的最低位代表的是0.0625度
  136.         t=tt*10+0.5; //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。
  137.         return(t);
  138. }
  139. //LCD1602液晶顯示子函數
  140. void display()
  141. {
  142.            uint shi,ge,xiaoshu;            //這里的num,shi,ge,xiaoshu 必須用unsigned int無符號整數來表示,用unshigned char  字符型則顯示錯誤
  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. //報警子函數
  163. void temp_check()
  164. {
  165.         uint shi,ge,xiaoshu;            //這里的num,shi,ge,xiaoshu 必須用unsigned int無符號整數來表示,用unshigned char  字符型則顯示錯誤
  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;         //顯示 實際溫度  
  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. //按鍵掃描子函數
  193. void key()
  194. {        
  195.         if(k3==0)                 //set 按鍵 按下
  196.         {
  197.                 delay(1);
  198.                 if(k3==0)
  199.                 {                                                        //設置位置設定
  200.                         position++;
  201.                         if(position>2)
  202.                                 position=0;
  203.                         if(position==0)                  // 無設置位置
  204.                         {
  205.                                 write_com(0x80+0x40+7);
  206.                                 write_date(' ');
  207.                                 write_com(0x80+0x40+15);
  208.                                 write_date(' ');
  209.                         }
  210.                         if(position==1)                //設置TH 在th后顯示< 標識當前位置
  211.                         {
  212.                                 write_com(0x80+0x40+7);
  213.                                 write_date('<');
  214.                                 write_com(0x80+0x40+15);
  215.                                 write_date(' ');                  
  216.                         }
  217.                         if(position==2)          //設置Tl   在tl后顯示< 標識當前位置
  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時  是個錯誤,這里避免此情況發生
  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時  是個錯誤,這里避免此情況發生
  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. //主函數
  272. void main()
  273. {         
  274.         uint i;
  275.         LCD1602_init();
  276.         display();
  277.         while(1)
  278.         {        
  279.                 delay(1);
  280.                 if((++i)>500) //500ms 檢測一次溫度
  281.                 {
  282.                          temp_check();
  283.                          i=0;
  284.                 }               
  285.                 key();               
  286.         }
  287. }
復制代碼



                    有線  但是不懂怎么接 求大神指點指點


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

使用道具 舉報

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:359708 發表于 2018-6-27 22:50 | 只看該作者
P2^1用杜邦線加按鍵
P2^2用杜邦線減按鍵
P2^0用杜邦線設置按鍵
注意接獨立按鍵
ds18b20插上
看一下整板關于2^5,6,7的跳帽,按說明走。
回復

使用道具 舉報

地板
ID:360689 發表于 2018-6-27 23:58 | 只看該作者
P2^1用杜邦線加按鍵 P2^2用杜邦線減按鍵 P2^0用杜邦線設置按鍵 注意接獨立按鍵 ds18b20插上 看一下整板關于2^5,6,7的跳帽,一步一步試試看
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色大片免费网站 | 色偷偷噜噜噜亚洲男人 | 97精品国产97久久久久久免费 | 欧美精品福利视频 | 精区3d动漫一品二品精区 | 免费午夜电影 | 成人在线视频一区二区三区 | 91资源在线 | 亚洲网在线 | 久草视频在线播放 | 国产精品一区二区在线 | 日韩a v在线免费观看 | 亚洲永久入口 | 久久久国产精品 | 国产精品一区久久久久 | 国产精品久久国产愉拍 | 欧美久久久久 | 亚洲精品一| 国产小视频在线观看 | 黄色网址在线免费观看 | 影音先锋欧美资源 | 韩三级在线观看 | 久色网 | 亚洲精品一区二区网址 | 久久无毛 | 亚洲综合在线播放 | 精品美女| 精品一级 | 国产一级免费在线观看 | 亚洲精品久久久久久宅男 | 日本粉嫩一区二区三区视频 | 亚洲日本欧美 | 午夜小电影 | 日本免费黄色一级片 | 啪啪综合网 | a在线免费观看 | 一级美国黄色片 | 国产综合久久久 | 国产精品一区在线 | 久久久久久久久久影视 | 日韩一区二区三区在线播放 |