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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11008|回復: 26
收起左側

基于STC12C5A60S2的DS18B20溫度顯示工程(LCD1602顯示)

  [復制鏈接]
ID:224782 發表于 2018-4-22 23:18 | 顯示全部樓層 |閱讀模式
STC12C5A60S2單片機DS18B20溫度顯示工程(LCD1602顯示)的實物圖如下:

實物照片

實物照片

單片機源程序如下:
  1. #include<STC12C5A60S2.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #include<intrins.h>

  3. sbit RS = P1 ^ 0;   //定義端口
  4. sbit RW = P1 ^ 1;
  5. sbit EN = P2 ^ 5;
  6. sbit DS = P2 ^ 2;

  7. unsigned char code Table[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
  8. bit flag;
  9. unsigned char xdata a, b;

  10. #define DataPort P0


  11. /************************LCD1602函數************************/
  12. /******延時函數******/
  13. void DelayUs2x(unsigned char t)
  14. {   
  15.         while(--t);
  16. }
  17. /******延時函數******/
  18. void DelayMs(unsigned char t)
  19. {
  20.         while(t--)
  21.         {
  22.                 //大致延時1mS
  23.                 DelayUs2x(245);
  24.                 DelayUs2x(245);
  25.         }
  26. }
  27. /******判忙函數******/
  28. bit LCD_Check_Busy(void)
  29. {
  30.         DataPort = 0xFF;
  31.         RS = 0;
  32.         RW = 1;
  33.         EN = 0;
  34.         _nop_( );
  35.         EN = 1;
  36.         return (bit)(DataPort & 0x80);
  37. }
  38. /******寫入命令函數******/
  39. void LCD_Write_Com(unsigned char com)
  40. {  
  41.         while(LCD_Check_Busy( )); //忙則等待
  42.         RS = 0;
  43.         RW = 0;
  44.         EN = 1;
  45.         DataPort = com;
  46.         _nop_( );
  47.         EN = 0;
  48. }
  49. /******寫入數據函數******/
  50. void LCD_Write_Data(unsigned char Data)
  51. {
  52.         while(LCD_Check_Busy( )); //忙則等待
  53.         RS = 1;
  54.         RW = 0;
  55.         EN = 1;
  56.         DataPort = Data;
  57.         _nop_( );
  58.         EN = 0;
  59. }
  60. /******清屏函數******/
  61. void LCD_Clear(void)
  62. {
  63.         LCD_Write_Com(0x01);
  64.         DelayMs(5);
  65. }
  66. /******寫入字符串函數******/
  67. void LCD_Write_String(unsigned char x, unsigned char y, unsigned char *s)
  68. {     
  69.         if (y == 0)
  70.         {     
  71.                 LCD_Write_Com(0x80 + x);     //表示第一行
  72.         }
  73.         else
  74.         {      
  75.                 LCD_Write_Com(0xc0 + x);      //表示第二行
  76.         }        
  77.         while (*s)
  78.         {     
  79.                 LCD_Write_Data(*s);     
  80.                 s ++;     
  81.         }
  82. }
  83. /******寫入字符函數******/
  84. void LCD_Write_Char(unsigned char x, unsigned char y, unsigned char Data)
  85. {     
  86.         if (y == 0)
  87.         {     
  88.                 LCD_Write_Com(0x80 + x);     
  89.         }   
  90.         else
  91.         {     
  92.                 LCD_Write_Com(0xc0 + x);     
  93.         }        
  94.         LCD_Write_Data(Data);  
  95. }
  96. /******初始化函數******/
  97. void LCD_Init(void)
  98. {
  99.         LCD_Write_Com(0x38);    /*顯示模式設置*/
  100.         DelayMs(5);
  101.         LCD_Write_Com(0x38);
  102.         DelayMs(5);
  103.         LCD_Write_Com(0x38);
  104.         DelayMs(5);
  105.         LCD_Write_Com(0x38);  
  106.         LCD_Write_Com(0x08);    /*顯示關閉*/
  107.         LCD_Write_Com(0x01);    /*顯示清屏*/
  108.         LCD_Write_Com(0x06);    /*顯示光標移動設置*/
  109.         DelayMs(5);
  110.         LCD_Write_Com(0x0c);    /*顯示開及光標設置*/
  111. }
  112.    

  113. /************************DS18B20函數************************/
  114. /******延時函數******/
  115. void DS18B20_Delay(unsigned int j)//延時j * 1us
  116. {
  117.         unsigned int i;
  118.         for(i = 0; i < j; i ++)
  119.         {
  120.                 _nop_( );//@11.0592M晶振(12M晶振:_nop_( );_nop_( );)
  121.         }
  122.         
  123. }
  124. /******初始化/復位函數******/
  125. void DS_Rest( )
  126. {
  127.         DS = 1;
  128.         DS18B20_Delay(60);
  129.         DS = 0;
  130.         DS18B20_Delay(700);
  131.         DS = 1;
  132.         DS18B20_Delay(150);
  133.         if(DS == 0)
  134.         {
  135.                 flag = 1;
  136.         }
  137.         else
  138.         {
  139.                 flag = 0;
  140.         }
  141.         DS18B20_Delay(200);
  142. }
  143. /******位讀取函數******/
  144. bit DS_Read_Bit( )
  145. {
  146.         bit Dat;
  147.         DS = 0;
  148.         _nop_( );_nop_( );
  149.         DS = 1;
  150.         _nop_( );
  151.         Dat = DS;
  152.         DS18B20_Delay(100);
  153.         return Dat;
  154. }
  155. /******字節讀取函數******/
  156. unsigned char DS_Read_Byte( )
  157. {
  158.         unsigned char idata i, j, k;
  159.         for(i = 0; i < 8; i ++)
  160.         {
  161.                 j = DS_Read_Bit( );
  162.                 k = (j << 7) | (k >> 1);
  163.         }
  164.         return k;
  165. }
  166. /******字節寫函數******/
  167. void DS_Write_Byte(unsigned char Dat)
  168. {
  169.         unsigned char idata i;
  170.         for(i = 0; i < 8; i ++)
  171.         {
  172.                 DS = 0;
  173.                 _nop_( );
  174.                 DS = Dat & 0x01;
  175.                 DS18B20_Delay(70);
  176.                 DS = 1;
  177.                 Dat >>= 1;
  178.         }
  179.         DS18B20_Delay(70);
  180. }
  181. /******讀取溫度數據函數******/
  182. void Read_Temperature( )
  183. {
  184.         unsigned char xdata tvalue_L, tvalue_H;
  185.         float num;
  186.         
  187.         DS_Rest( );
  188.         DS_Write_Byte(0xcc);
  189.         DS_Write_Byte(0xbe);
  190.         tvalue_L = DS_Read_Byte( );
  191.         tvalue_H = DS_Read_Byte( );
  192.         tvalue_H <<= 4;
  193.         tvalue_H += (tvalue_L & 0xf0) >> 4;
  194.         a = tvalue_H;
  195.         num = (tvalue_L & 0x0f) * 0.0625;
  196.         b = (unsigned char)(num * 100);
  197. }
  198. /******溫度顯示函數******/
  199. void DS18B20_Display( )
  200. {
  201.         LCD_Write_String(0, 0, "The Temperature:");
  202.         LCD_Write_Char(0, 1, Table[a / 10]);
  203.         LCD_Write_Char(1, 1, Table[a % 10]);
  204.         LCD_Write_Char(2, 1, '.');
  205. ……………………

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

所有資料51hei提供下載:
基于STC12C5A60S2的DS18B20溫度顯示工程(LCD1602顯示).zip (38.93 KB, 下載次數: 515)


評分

參與人數 2黑幣 +60 收起 理由
兵臨天下 + 10 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:288065 發表于 2018-4-24 08:24 | 顯示全部樓層
挺好的,不錯
回復

使用道具 舉報

ID:315981 發表于 2018-4-25 11:20 | 顯示全部樓層
很棒,可以試試。
回復

使用道具 舉報

ID:324109 發表于 2018-5-16 14:19 | 顯示全部樓層
為什么不能顯示
回復

使用道具 舉報

ID:277616 發表于 2018-5-25 11:57 | 顯示全部樓層
特別好~~我寫的一直都有warning,這個程序什么錯都沒有
回復

使用道具 舉報

ID:332316 發表于 2018-5-28 15:03 | 顯示全部樓層
您好,請問把程序燒到單片機中為什么初始溫度值是85℃呢,如何修改一下直接顯示實時溫度呢,麻煩幫忙解決一下
回復

使用道具 舉報

ID:170141 發表于 2018-8-20 23:28 | 顯示全部樓層
fenfen625 發表于 2018-5-28 15:03
您好,請問把程序燒到單片機中為什么初始溫度值是85℃呢,如何修改一下直接顯示實時溫度呢,麻煩幫忙解決一 ...

你可以把讀取實時溫度的函數寫2次,屏蔽第一次不讓顯示,那樣就不會顯示85度了
回復

使用道具 舉報

ID:391728 發表于 2018-8-30 19:20 | 顯示全部樓層
我的也是不能顯示啊 很難受
回復

使用道具 舉報

ID:303383 發表于 2018-8-30 22:01 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

ID:397622 發表于 2018-12-22 14:49 | 顯示全部樓層
好好好
回復

使用道具 舉報

ID:465014 發表于 2019-1-21 20:25 | 顯示全部樓層
不錯,研究一下
回復

使用道具 舉報

ID:472756 發表于 2019-3-23 23:59 | 顯示全部樓層
參考下
回復

使用道具 舉報

ID:229821 發表于 2019-3-24 09:01 | 顯示全部樓層
我的keil5.25中找不到STC12C5A60S2單片機。用c52代替的話。晶振選12M。嗎?延時1us是一個_nop_嗎?
回復

使用道具 舉報

ID:229821 發表于 2019-3-24 12:32 | 顯示全部樓層
謝謝分享啊。不錯的東西。
回復

使用道具 舉報

ID:229821 發表于 2019-3-26 11:17 | 顯示全部樓層
可能我的ds壞了。無論連接不連接。lcd都顯示5.93c。難受香菇
回復

使用道具 舉報

ID:498577 發表于 2019-3-26 12:00 | 顯示全部樓層
挺好收藏了
回復

使用道具 舉報

ID:498577 發表于 2019-3-26 12:00 | 顯示全部樓層
挺好,收藏了
回復

使用道具 舉報

ID:416287 發表于 2019-3-26 18:39 | 顯示全部樓層
fenfen625 發表于 2018-5-28 15:03
您好,請問把程序燒到單片機中為什么初始溫度值是85℃呢,如何修改一下直接顯示實時溫度呢,麻煩幫忙解決一 ...

在你讀這次的溫度值時 先把上一次的值清除了
回復

使用道具 舉報

ID:224782 發表于 2019-3-29 10:19 | 顯示全部樓層
fenfen625 發表于 2018-5-28 15:03
您好,請問把程序燒到單片機中為什么初始溫度值是85℃呢,如何修改一下直接顯示實時溫度呢,麻煩幫忙解決一 ...

這個程序就是簡單地讀取顯示的程序,顯示值是隨實時溫度變化改變的,如果你一直都顯示85度的話可能是硬件的問題了
回復

使用道具 舉報

ID:224782 發表于 2019-3-29 10:21 | 顯示全部樓層
saya0769 發表于 2019-3-24 09:01
我的keil5.25中找不到STC12C5A60S2單片機。用c52代替的話。晶振選12M。嗎?延時1us是一個_nop_嗎?

用ISP燒錄軟件添加一下STC的型號和頭文件就行了
回復

使用道具 舉報

ID:500775 發表于 2019-4-1 19:25 | 顯示全部樓層
好東西,學習一下
回復

使用道具 舉報

ID:118735 發表于 2019-4-2 22:28 | 顯示全部樓層
挺好的,不錯
回復

使用道具 舉報

ID:115740 發表于 2019-5-22 02:12 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:581127 發表于 2019-7-10 01:48 | 顯示全部樓層
怎么溫度為0??
回復

使用道具 舉報

ID:282095 發表于 2019-7-10 09:17 | 顯示全部樓層
可以同時顯示溫度和濕度嗎
回復

使用道具 舉報

ID:224782 發表于 2019-8-8 11:19 | 顯示全部樓層
鵬博士PBs 發表于 2019-7-10 09:17
可以同時顯示溫度和濕度嗎

這個只是DS18B20的測試程序,它只能測溫度,濕度得別的傳感器
回復

使用道具 舉報

ID:848909 發表于 2020-11-25 12:48 | 顯示全部樓層
以后能用到,mark一下,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩三级 | 国产高清区 | 欧美xxxx色视频在线观看免费 | 另类 综合 日韩 欧美 亚洲 | 天天操,夜夜爽 | 国产一区2区 | 午夜视频一区二区 | 成人性视频免费网站 | 国产电影一区二区 | 狠狠操狠狠干 | 欧美日韩亚洲一区 | 国产伦精品一区二区三区高清 | 狠狠骚 | 伊伊综合网 | 天天插天天射天天干 | 狠狠干美女 | 自拍偷拍中文字幕 | 亚洲成人第一页 | 成年人在线视频 | 夏同学福利网 | 成人免费大片黄在线播放 | 日韩h| 亚洲成人精品在线 | a级大毛片| 妞干网视频 | 久久之精品 | 亚洲国产aⅴ精品一区二区 免费观看av | 五月精品视频 | 国产精品视频久久久久久 | 浮生影院免费观看中文版 | h视频亚洲| 日韩视频一区二区 | 欧美一区精品 | 精品亚洲一区二区三区 | 欧美福利网站 | 免费看片在线播放 | 精品国产一区二区久久 | 中文字幕国产在线 | 欧美日韩在线一区二区 | 久久久久无码国产精品一区 | 欧美黄色绿像 |