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

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

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)LCD1602顯示DS18B20采集的溫度程序(帶負(fù)溫度顯示)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
LCD1602顯示DS18B20采集的溫度,附件包含完整程序及仿真設(shè)計(jì)


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define ulong unsigned long
  5. #define uchar unsigned char           //宏定義
  6. sbit DQ = P3^7;                             //定義DS18B20總線(xiàn)I/O
  7. #define LCD_DB P1                                //定義LCD數(shù)據(jù)口
  8. sbit LCD_RS=P2^0;
  9. sbit LCD_RW=P2^1;
  10. sbit LCD_E=P2^2;       
  11. void delay_n40us(uint n);          //函數(shù)申明
  12. uint ReadTemperature(void);   //函數(shù)申明
  13. void Delay_DS18B20(int num);   //函數(shù)申明                                  



  14. //**********寫(xiě)入LCD指令**********寫(xiě)入命令****************
  15. void LCD_write_command(uchar dat)
  16. {
  17. LCD_DB=dat;
  18. LCD_RS=0;//指令
  19. LCD_RW=0;//寫(xiě)入
  20. LCD_E=1;//允許
  21. LCD_E=0;//產(chǎn)生下降沿
  22. delay_n40us(1);//實(shí)踐證明,我的LCD1602 上,用for 循環(huán)1 次就能完成普通寫(xiě)指令。
  23. }


  24. //*******************************
  25. //********再寫(xiě)數(shù)據(jù)函數(shù)*****向1602中寫(xiě)入數(shù)據(jù)********
  26. void LCD_write_data(uchar dat)
  27. {
  28. LCD_DB=dat;
  29. LCD_RS=1;//數(shù)據(jù)
  30. LCD_RW=0;//寫(xiě)入
  31. LCD_E=1;//允許
  32. LCD_E=0;//產(chǎn)生下降沿
  33. delay_n40us(1);
  34. }


  35. //************8LCD初始化**************
  36. void LCD_init(void)
  37. {
  38. LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
  39. LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
  40. LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位--------------
  41. LCD_write_command(0x01);//清除屏幕顯示----------------
  42. delay_n40us(100);//實(shí)踐證明,我的LCD1602上,用for 循環(huán)200 次就能可靠完成清屏指令。
  43. }



  44. //********延時(shí)函數(shù)***************
  45. void delay_n40us(uint n)
  46. { uint i;
  47. uchar j;
  48. for(i=n;i>0;i--)
  49. for(j=0;j<2;j++); //在這個(gè)延時(shí)循環(huán)函數(shù)中我只做了2次循環(huán),
  50. } //實(shí)踐證明我的LCD1602 上普
  51. //通的指令只需1次循環(huán)就能可靠完成。

  52. //*************88延時(shí)子程序
  53. void Delay_DS18B20(int num)
  54. {
  55.   while(num--) ;
  56. }
  57. //***********8初始化DS18B20
  58. void Init_DS18B20(void)
  59. {
  60.   bit q;
  61.     //DQ = 1;                                //把總線(xiàn)拿高
  62.         //Delay_DS18B20(1);            //15us
  63.         DQ = 0;                                //給復(fù)位脈沖
  64.         Delay_DS18B20(80);                //750us
  65.         DQ = 1;                                //把總線(xiàn)拿高 等待
  66.         Delay_DS18B20(8);                //120us
  67.         q = DQ;                                //讀取18b20初始化信號(hào)
  68.         Delay_DS18B20(30);                //等待450us確保初始化成功
  69.         DQ = 1;                                //把總線(xiàn)拿高 釋放總線(xiàn)*/

  70. }
  71. //***********從1820讀一個(gè)字節(jié)
  72. uchar ReadOneChar(void)
  73. {
  74.   unsigned char i=0;
  75.   uchar dat=0;
  76.   for (i=8;i>0;i--)
  77.   {
  78.     bit x;
  79.         dat>>=1;         //        右移一位
  80.     DQ = 0;     // 給復(fù)位脈沖信號(hào)
  81.     DQ = 1;     // 拉高電平確實(shí)讀給脈沖信號(hào)
  82.         x=DQ;                //讀總線(xiàn)輸出一位數(shù)據(jù)
  83.     if(x)
  84.     dat|=0x80; //高電平保存數(shù)據(jù)
  85.     Delay_DS18B20(5);//等待75us
  86. }
  87. return (dat); //返回讀出的十進(jìn)制數(shù)據(jù)
  88. }


  89. //*********向1820寫(xiě)一個(gè)字節(jié)
  90. void WriteOneChar(unsigned char dat)
  91. {
  92. unsigned char i=0;
  93.   for (i=8; i>0; i--)
  94.   {
  95.     DQ = 0;                        // 給復(fù)位脈沖信號(hào)
  96.     DQ = dat&0x01;        //寫(xiě)入一位數(shù)據(jù)
  97.     Delay_DS18B20(5); //等待75微妙確保數(shù)據(jù)寫(xiě)入
  98.     DQ = 1;                          //釋放總線(xiàn)為高電平
  99.     dat>>=1;
  100.   }
  101. }
  102. //讀取溫度
  103. uint ReadTemperature(void)
  104. {
  105.   uchar a=0;
  106.   uint t=0;
  107.   Init_DS18B20();
  108.   Delay_DS18B20(50);
  109.   WriteOneChar(0xCC);  //跳過(guò)讀序號(hào)列號(hào)的操作
  110.   WriteOneChar(0x44);  //啟動(dòng)溫度轉(zhuǎn)換
  111.   Init_DS18B20();

  112.   WriteOneChar(0xCC);  //跳過(guò)讀序號(hào)列號(hào)的操作
  113.   WriteOneChar(0xBE);  //讀取溫度寄存器

  114.   a=ReadOneChar();     //讀低8位
  115.   t=ReadOneChar();    //讀高8位
  116. t <<= 8;
  117. t|=a;
  118.   return(t);
  119. }

  120. //延時(shí)子程序
  121. void Delay(int num)
  122. {
  123. while( --num );
  124. }

  125. //顯示溫度子程序
  126. void Disp_Temperature(void)     //顯示溫度
  127. {
  128.    uint h;
  129.         int feng,ge,shi,bai;

  130.           LCD_init();                          //LCD初始化
  131.           LCD_write_command(0x80);//第一行寫(xiě)入數(shù)據(jù)
  132.           LCD_write_data('T');          //寫(xiě)T
  133.           delay_n40us(15000);          //延遲
  134.           LCD_write_data('e');
  135.           delay_n40us(15000);
  136.           LCD_write_data('m');
  137.           delay_n40us(15000);
  138.           LCD_write_data('p');
  139.           delay_n40us(15000);
  140.           LCD_write_data(':');
  141.           delay_n40us(15000);



  142.           h= ReadTemperature();
  143.           if(h<=0x07d0)                  //判斷溫度為正
  144.         {
  145.         h*=0.625;
  146.         bai=h/1000;                     
  147.         feng=h%10;
  148.         ge=h/10%10;
  149.         shi=h/100;
  150.           LCD_write_command(0x80+5);  //從第一行第六個(gè)開(kāi)始顯示
  151.           LCD_write_data(0x30+bai);
  152.           delay_n40us(15000);
  153.   
  154.       LCD_write_command(0x80+6);
  155.           LCD_write_data(0x30+shi);
  156.           delay_n40us(15000);
  157.           LCD_write_data(0x30+ge);
  158.           delay_n40us(15000);
  159.           LCD_write_data('.');
  160.           delay_n40us(15000);
  161.           LCD_write_data(0x30+feng);
  162.           delay_n40us(15000);
  163.           }
  164.           else                                          //溫度為負(fù)時(shí)
  165.           {
  166.           h=h-1;                                  //減1取反
  167.           h=(~h);
  168.           h*=0.625;
  169.                                
  170.         feng=h%10;
  171.         ge=h/10%10;
  172.         shi=h/100;
  173.           LCD_write_command(0x80+5);  
  174.           LCD_write_data('-');               
  175.           delay_n40us(15000);
  176.   
  177.           LCD_write_data(0x30+shi);
  178.           delay_n40us(15000);
  179.           LCD_write_data(0x30+ge);
  180.           delay_n40us(150000);
  181.           LCD_write_data('.');
  182.           delay_n40us(1500);
  183.           LCD_write_data(0x30+feng);
  184.           delay_n40us(15000);
  185.           }

  186.           //*************顯示C*************
  187.           LCD_write_command(0x80+10);
  188.           LCD_write_data('C');
  189.           delay_n40us(15000);
  190.           

  191. }

  192. //主函數(shù)
  193. void main(void)
  194. {
  195.    Init_DS18B20();
  196.    while(1)
  197.    {
  198.    Disp_Temperature();
  199.         }
  200.   
  201. }
復(fù)制代碼

所有資料51hei提供下載:
LCD1602顯示DS18B20采集的溫度.zip (357.22 KB, 下載次數(shù): 91)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:520434 發(fā)表于 2021-6-4 14:42 | 只看該作者
Proteus8.8可以 但是protues8.9版本lcd無(wú)法顯示,DS180也是沒(méi)辦法運(yùn)行的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲va欧美va天堂v国产综合 | 婷婷色国产偷v国产偷v小说 | 色婷婷久久久久swag精品 | 久久久久久精 | 欧美日韩国产在线观看 | 东京av男人的天堂 | 久久精品国产一区二区三区不卡 | 国产一区二区三区四区五区加勒比 | 日本精品视频在线 | 成人欧美一区二区三区在线播放 | 欧美精品久久 | www.成人.com| 精品国产精品三级精品av网址 | 91视频中文 | chengrenzaixian | 亚洲一区二区三区免费在线观看 | 999久久久| 99亚洲国产精品 | 欧美色视频免费 | 久久久123 | 成人午夜毛片 | 少妇一级淫片免费播放 | 嫩草国产 | 久久综合av | 亚洲欧美综合精品久久成人 | 欧美精品久久久久久久久老牛影院 | 最新国产精品 | 久久婷婷av | 亚洲va在线va天堂va狼色在线 | 欧美成人猛片aaaaaaa | 中文字幕高清 | 日本免费在线 | jav成人av免费播放 | 国内精品久久久久久 | 国产91av视频| 久久久久久国产精品 | 在线视频 中文字幕 | 日本成人片在线观看 | 欧美成人一区二区 | 亚洲国产欧美日韩 | 国产激情一区二区三区 |