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

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

QQ登錄

只需一步,快速開始

搜索
查看: 4833|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)兩路測(cè)溫 Keil4工程+Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
單片機(jī)兩路測(cè)溫 Keil4工程+Proteus仿真,有需要的自行下載

Proteus仿真圖:


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char                        
  3. #define uint unsigned int
  4. uchar i;
  5. char csh=0;
  6. sbit lcdrs=P2^0;
  7. sbit lcdrw=P2^1;
  8. sbit lcden=P2^2;
  9. uchar code t0[]="the temperature ";
  10. uchar code t1[]=" is             ";
  11. uchar code wendu[]="0123456789";        //利用一個(gè)溫度表解決溫度顯示亂碼
  12. sbit DQ_1= P3^0;//定義ds18B20總線IO
  13. sbit DQ_2= P3^1;//定義ds18B20總線IO
  14. void delay(uint z);
  15. void write_com(uchar com);
  16. void write_date(unsigned char date);
  17. void init_lcd();
  18. void tmpDelay(int num);//延時(shí)函數(shù)
  19. void Init_DS18B20();//初始化ds1820
  20. unsigned char ReadOneChar_1();//讀一個(gè)字節(jié)
  21. void WriteOneChar_1(unsigned char dat);//寫一個(gè)字節(jié)
  22. unsigned int Readtemp_1();//讀取溫度
  23. unsigned char ReadOneChar_2();//讀一個(gè)字節(jié)
  24. void WriteOneChar_2(unsigned char dat);//寫一個(gè)字節(jié)
  25. unsigned int Readtemp_2();//讀取溫度
  26. void display();
  27. void delay(uint z)
  28. {
  29.         uint x,y;
  30.         for(x=100;x>1;x--)
  31.                 for(y=z;y>1;y--);
  32. }

  33. void write_com(uchar com)
  34. {
  35.         lcdrs=0;
  36.         P0=com;       
  37.         delay(5);
  38.         lcden=1;
  39.         delay(5);
  40.         lcden=0;
  41. }
  42. void write_date(unsigned char date)
  43. {
  44.         lcdrs=1;
  45.         P0=date;
  46.         delay(5);
  47.         lcden=1;
  48.         delay(5);
  49.         lcden=0;
  50. }
  51. void init_lcd()
  52. {
  53.         lcden=0;
  54.         lcdrw=0;
  55.         write_com(0x38);
  56.         write_com(0x01);
  57.         write_com(0x0c);
  58.         write_com(0x06);
  59.         write_com(0x80);       
  60.         for(i=0;i<16;i++)
  61.                 {
  62.                         write_date(t0[i]);
  63.                         delay(0);
  64.                 }
  65.         write_com(0x80+0x40);
  66.         for(i=0;i<16;i++)
  67.                 {
  68.                         write_date(t1[i]);
  69.                         delay(0);
  70.                 }
  71. }

  72. //溫度采集模塊
  73. void tmpDelay(int num)//延時(shí)函數(shù)
  74. {
  75.         while(num--) ;
  76. }       
  77. /******************************************************************************/
  78. void Init_DS18B20()//初始化ds1820
  79. {
  80.         unsigned char x1=0;
  81.         unsigned char x2=0;
  82.         DQ_1 = 1;    //DQ復(fù)位
  83.         tmpDelay(8);  //稍做延時(shí)
  84.         DQ_1 = 0;    //單片機(jī)將DQ拉低
  85.         tmpDelay(80); //精確延時(shí) 大于 480us
  86.         DQ_1 = 1;    //拉高總線
  87.         tmpDelay(14);
  88.         x1=DQ_1;      //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
  89.         tmpDelay(20);

  90.         ///////////////////////////////////////////
  91.        
  92.         DQ_2 = 1;    //DQ復(fù)位
  93.         tmpDelay(8);  //稍做延時(shí)
  94.         DQ_2 = 0;    //單片機(jī)將DQ拉低
  95.         tmpDelay(80); //精確延時(shí) 大于 480us
  96.         DQ_2 = 1;    //拉高總線
  97.         tmpDelay(14);
  98.         x2=DQ_2;      //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
  99.         tmpDelay(20);
  100. }
  101. unsigned char ReadOneChar_1()//讀一個(gè)字節(jié)
  102. {
  103.         unsigned char i=0;
  104.         unsigned char dat_1 = 0;
  105.         for (i=8;i>0;i--)
  106.         {
  107.                 DQ_1 = 0; // 給脈沖信號(hào)
  108.                 dat_1>>=1;
  109.                 DQ_1 = 1; // 給脈沖信號(hào)
  110.                 if(DQ_1)
  111.                 dat_1|=0x80;
  112.                 tmpDelay(4);
  113.         }
  114.         return(dat_1);
  115. }
  116. unsigned char ReadOneChar_2()//讀一個(gè)字節(jié)
  117. {
  118.         unsigned char i=0;
  119.         unsigned char dat_2 = 0;
  120.         for (i=8;i>0;i--)
  121.         {
  122.                 DQ_2 = 0; // 給脈沖信號(hào)
  123.                 dat_2>>=1;
  124.                 DQ_2 = 1; // 給脈沖信號(hào)
  125.                 if(DQ_2)
  126.                 dat_2|=0x80;
  127.                 tmpDelay(4);
  128.         }
  129.         return(dat_2);
  130. }



  131. void WriteOneChar_1(unsigned char dat_1)//寫一個(gè)字節(jié)
  132. {
  133.         unsigned char i=0;
  134.         for (i=8; i>0; i--)
  135.         {
  136.                 DQ_1= 0;
  137.                 DQ_1= dat_1&0x01;
  138.                 tmpDelay(5);
  139.                 DQ_1= 1;
  140.                 dat_1>>=1;
  141.         }
  142. }

  143. void WriteOneChar_2(unsigned char dat_2)//寫一個(gè)字節(jié)
  144. {
  145.         unsigned char i=0;
  146.         for (i=8; i>0; i--)
  147.         {
  148.                 DQ_2= 0;
  149.                 DQ_2= dat_2&0x01;
  150.                 tmpDelay(5);
  151.                 DQ_2= 1;
  152.                 dat_2>>=1;
  153.         }
  154. }

  155. unsigned int Readtemp_1()//讀取溫度
  156. {
  157.         unsigned char a=0;
  158.         unsigned char b=0;
  159.         unsigned int t=0;
  160.         float tt=0;       
  161.         Init_DS18B20();
  162.         WriteOneChar_1(0xCC); // 跳過讀序號(hào)列號(hào)的操作
  163.         WriteOneChar_1(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
  164.         Init_DS18B20();
  165.         WriteOneChar_1(0xCC); //跳過讀序號(hào)列號(hào)的操作
  166.         WriteOneChar_1(0xBE); //讀取溫度寄存器
  167.         a=ReadOneChar_1();   //連續(xù)讀兩個(gè)字節(jié)數(shù)據(jù)   //讀低8位
  168.         b=ReadOneChar_1();                          //讀高8位
  169.         t=b;
  170.         t<<=8;
  171.         t=t|a; //兩字節(jié)合成一個(gè)整型變量。
  172.         tt=t*0.0625;  //得到真實(shí)十進(jìn)制溫度值,因?yàn)镈S18B20可以精確到0.0625度,所以讀回?cái)?shù)據(jù)的最低位代表的是0.0625度
  173.         t= tt*10+0.5; //放大十倍,這樣做的目的將小數(shù)點(diǎn)后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時(shí)進(jìn)行一個(gè)四舍五入操作。
  174.         return(t);
  175. }

  176. unsigned int Readtemp_2()//讀取溫度
  177. {
  178.         unsigned char a=0;
  179.         unsigned char b=0;
  180.         unsigned int t=0;
  181.         float tt=0;       
  182.         Init_DS18B20();
  183.         WriteOneChar_2(0xCC); // 跳過讀序號(hào)列號(hào)的操作
  184.         WriteOneChar_2(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
  185.         Init_DS18B20();
  186.         WriteOneChar_2(0xCC); //跳過讀序號(hào)列號(hào)的操作
  187.         WriteOneChar_2(0xBE); //讀取溫度寄存器
  188.         a=ReadOneChar_2();   //連續(xù)讀兩個(gè)字節(jié)數(shù)據(jù)   //讀低8位
  189.         b=ReadOneChar_2();                          //讀高8位
  190.         t=b;
  191.         t<<=8;
  192.         t=t|a; //兩字節(jié)合成一個(gè)整型變量。
  193.         tt=t*0.0625;  //得到真實(shí)十進(jìn)制溫度值,因?yàn)镈S18B20可以精確到0.0625度,所以讀回?cái)?shù)據(jù)的最低位代表的是0.0625度
  194.         t= tt*10+0.5; //放大十倍,這樣做的目的將小數(shù)點(diǎn)后第一位也轉(zhuǎn)換為可顯示數(shù)字,同時(shí)進(jìn)行一個(gè)四舍五入操作。
  195.         return(t);
  196. }

  197. void display()
  198. {
  199.         unsigned int num;                   //定義的時(shí)候用uchar宏定義就會(huì)出錯(cuò)
  200.         unsigned int shi,ge,xiaoshu;            //這里的num,shi,ge,xiaoshu 必須用unsigned int無符號(hào)整數(shù)來表示,用unshigned char  字符型則顯示錯(cuò)誤
  201.         num=Readtemp_1();
  202.         if(csh<=8){num=0;csh++;}
  203.         shi=num/100;
  204.         ge=num/10%10;
  205.         xiaoshu=num%10;

  206.     write_com(0x80+0x40+5);
  207.         write_date(wendu[shi]);

  208.         write_com(0x80+0x40+6);
  209.         write_date(wendu[ge]);

  210.         write_com(0x80+0x40+7);
  211.         write_date(0x2e);

  212.         write_com(0x80+0x40+8);
  213.         write_date(wendu[xiaoshu]);

  214. /////////////////////////////////////////////////////

  215.         num=Readtemp_2();
  216.         if(csh<=8){num=0;csh++;}
  217.         shi=num/100;
  218.         ge=num/10%10;
  219.         xiaoshu=num%10;

  220.     write_com(0x80+0x40+11);
  221.         write_date(wendu[shi]);

  222.         write_com(0x80+0x40+12);
  223.         write_date(wendu[ge]);

  224.         write_com(0x80+0x40+13);
  225.         write_date(0x2e);

  226.         write_com(0x80+0x40+14);
  227.         write_date(wendu[xiaoshu]);
  228. }
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī),兩路測(cè)溫.rar (71.52 KB, 下載次數(shù): 32)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:711517 發(fā)表于 2020-3-19 15:48 | 只看該作者
有器件名單嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久资源 | 国产成人精品一区二三区在线观看 | 国产h视频| 热久久999 | 亚洲视频免费一区 | 色综合桃花网 | 亚洲不卡av在线 | 国产中文字幕在线观看 | 久久精品视频在线观看 | 亚洲第一天堂无码专区 | 日韩一区在线播放 | 97日日碰人人模人人澡分享吧 | 99精品免费视频 | 国产乱码精品一区二区三区忘忧草 | 日一日操一操 | 91一区二区 | 国产欧美一区二区精品久导航 | 欧美一级淫片免费视频黄 | 毛片视频免费观看 | 午夜国产 | 一区二区三区四区免费视频 | 欧洲一区二区在线 | 国产精品视频免费观看 | 亚洲 欧美 日韩在线 | 国产成人久久av免费高清密臂 | 国产一区二区三区视频免费观看 | 超碰电影 | 欧美精品影院 | 伊人免费在线观看 | 亚洲 欧美 精品 | 亚洲一区国产 | 中国一级毛片免费 | 在线一区二区三区 | 在线免费观看日本 | 51ⅴ精品国产91久久久久久 | av网站观看 | 国产精品视频一区二区三区不卡 | 亚洲一区二区三区福利 | 久久久国产一区二区三区 | 国产在线观看一区二区 | 四季久久免费一区二区三区四区 |