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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機DS18B20溫度檢測LCD1602顯示程序+電路PCB設計

  [復制鏈接]
跳轉到指定樓層
樓主
內容請自己看
制作出來的實物圖如下:


Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. /***********************************************
  2.                                                                 該程序為溫度測量  
  3.                                                                 用到DS18B20、LCD1602
  4.                                                                                
  5. 備注:程序的許多地方也是理解了他人的程序才寫出來的如果有理解錯誤、書寫錯誤的地方望大家留言指導
  6. ***********************************************/

  7. #include <reg52.h>

  8. bit flag = 0;
  9. unsigned int Temp = 0;                                                       
  10. unsigned char str[6];                                                                                                                //用來存字符串
  11. unsigned char high;                                                                                                                        //定時器的高低8位
  12. unsigned char low;
  13. unsigned char L;                                                                                                                                //溫度的小數部分
  14. unsigned char H;                                                                                                                                //整數部分

  15. extern bit Get_temperature(unsigned int *temp);
  16. extern void TemptoNum();       
  17. extern void LCD_Start();
  18. extern void LCD_Sta(unsigned char x, unsigned char y, unsigned char *p);

  19. unsigned char NumberToString(unsigned char *str, unsigned int dat);
  20. void configtime0(unsigned char ms);
  21. /****************************************
  22.                                                                 主函數
  23. ****************************************/
  24. void main()
  25. {
  26.         unsigned char len;
  27.         bit flag_ack = 0;
  28.        
  29.         EA = 1;                                                                                                                                        //開啟總中斷
  30.         LCD_Start();                                                                                                                //LCD初始化
  31.         configtime0(1);                                                                                                        //配置定時器
  32.         LCD_Sta(0,0,"Temp:");                                                                                //顯示"Temp:"字符
  33.         TemptoNum();                                                                                                                //溫度轉換
  34.        
  35.         while(1)                                                                                                       
  36.         {
  37.                 if(flag)                                                                                                                                //1秒到了  標識位為1
  38.                 {
  39.                         flag = 0;                                                                                                                        //標識位置0
  40.                         flag_ack = Get_temperature(&Temp);                //獲取溫度值
  41.                         if(flag_ack)
  42.                         {
  43.                                 flag_ack = 0;
  44.                                 H = Temp >> 4;                                                                                        //分離出整數部分
  45.                                 L = Temp & 0x0F;                                                                                //分離出小數部分
  46.                                 L = L * 10 / 16;                                                                                //將小數部分轉換成10進制數取出(這個地方我也想了好久才想明白,一開始自己寫是寫了%10,但是這樣就存在不準確的問題,這么寫我也是書上看來,先放大10倍,然后最大就是150,/16剛好為9,140/16為8,以此類推)
  47.                                 len = NumberToString(str, L);                                //將小數部分轉換成字符
  48.                                 LCD_Sta(16-len,0,str);                                                        //顯示在LCD的第一行的最后一位
  49.                                 LCD_Sta(14,0,".");                                                                        //倒數第二位是小數點
  50.                                 len +=1;                                                                                                                //長度加1,方便取整數的位置
  51.                                 len += NumberToString(str, H);                        //將整數部分轉換成字符  返回的長度加上小數點和小數的長度
  52.                                 LCD_Sta(16-len,0,str);                                                        //顯示在LCD上
  53.                         }
  54.                         TemptoNum();                                                                                                        //再一次溫度轉換
  55.                 }
  56.         }
  57. }
  58. /*******************************************
  59.                                                         數字轉字符串
  60. *******************************************/
  61. unsigned char NumberToString(unsigned char *str, unsigned int dat)
  62. {
  63.         unsigned char buf[5];
  64.         unsigned char i = 0;
  65.         unsigned char len;
  66.        
  67.         do{                                                                                                                                                //將數字的每一位都取出來放入buf[]中
  68.                 buf[i++] = dat%10;
  69.                 dat = dat / 10;
  70.         }while(dat>0);                                                                                               
  71.         len = i;                                                                                                                        //算出長度
  72.         while(i-->0)                                                                                                        //將每一位都轉換成字符
  73.         {
  74.                 *str++ = buf[i] + '0';       
  75.         }
  76.        
  77.         return len;
  78. }
  79. /***************************************
  80.                                                         定時器配置
  81. ***************************************/
  82. void configtime0(unsigned char ms)                                                                                               
  83. {
  84.         unsigned long tmp;
  85.        
  86.         tmp = 12000000/12;
  87.         tmp = tmp*ms/1000;
  88.         tmp = 65536 - tmp;
  89.         high = (unsigned char)(tmp>>8);
  90.         low  = (unsigned char)tmp;
  91.         TMOD = 0x01;
  92.         TH0 = high;
  93.         TL0 = low;
  94.         TR0 = 1;
  95.         ET0 = 1;
  96. }
  97. /*************************************
  98.                                                         中斷函數
  99. ……………………

  100. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
溫度_LCD顯示.7z (623 KB, 下載次數: 359)



評分

參與人數 4黑幣 +67 收起 理由
joeliang + 12
關外秀才 + 3 贊一個!
魔法少女 + 2 有用,感謝
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:532392 發表于 2019-5-10 12:40 | 只看該作者
非常棒
回復

使用道具 舉報

板凳
ID:535492 發表于 2019-5-11 15:24 | 只看該作者
贊一個 優秀
回復

使用道具 舉報

地板
ID:503018 發表于 2019-6-22 22:59 | 只看該作者
感謝啊,,非常有用啊
回復

使用道具 舉報

5#
ID:555539 發表于 2019-10-27 20:42 | 只看該作者
贊一個!
回復

使用道具 舉報

6#
ID:330370 發表于 2019-10-28 08:55 | 只看該作者
good!thank you
回復

使用道具 舉報

7#
ID:473694 發表于 2020-1-8 13:44 | 只看該作者
厲害了,非常感謝
回復

使用道具 舉報

8#
ID:745043 發表于 2020-5-6 10:15 | 只看該作者
贊一個
回復

使用道具 舉報

9#
ID:861694 發表于 2020-12-16 20:27 | 只看該作者
有仿真截圖就好了,但還是感謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产自产精品男人的天堂 | 国产精品久久av | 午夜视频在线免费观看 | 亚洲欧美一区二区三区在线 | 成年视频在线观看福利资源 | 一区二区在线 | 国产成人99久久亚洲综合精品 | 成人在线中文字幕 | 亚洲国产精品久久久久婷婷老年 | 在线播放中文字幕 | 亚洲精品国产成人 | 成人在线观看免费 | 久久av网站 | 亚洲国产精品日本 | 久久久久久免费毛片精品 | 国产精品久久久久久久久大全 | 一区不卡在线观看 | 亚洲色欲色欲www | 国产成人精品亚洲日本在线观看 | 一呦二呦三呦国产精品 | 久久国产精品免费一区二区三区 | 国产精品免费av | 成人av在线播放 | 色啪网 | 日韩一区二区三区视频 | 欧美精品综合 | 午夜丁香视频在线观看 | 日韩av第一页 | 麻豆久久久久 | 国产区一区二区三区 | 在线日韩| 一级aaaa毛片 | 成年人视频在线免费观看 | 天天夜碰日日摸日日澡 | 91精品一区二区三区久久久久久 | 国产乱码精品一区二区三区五月婷 | 伦理二区 | 91久久国产| 全免一级毛片 | 久久99精品久久久久久 | 国产农村妇女精品一二区 |