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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個讀溫度不閃的18B20數(shù)碼管溫度計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 cyy998 于 2016-7-24 14:25 編輯

初學(xué)單片機(jī),學(xué)著做一個18B20溫度計(jì),開始在網(wǎng)上找了很多這方面的程序來學(xué)習(xí),但是發(fā)現(xiàn)一個共同的問題,就是在18B20讀取溫度的時候數(shù)碼管都會閃一下,經(jīng)過研究發(fā)現(xiàn)原來是18B20讀取溫度需要的時間是毫秒級的,而數(shù)碼管顯示是實(shí)時掃描的,所以會造成顯示中斷。經(jīng)過幾天的折騰后,把顯示程序改進(jìn)了一下,達(dá)到了預(yù)期效果,現(xiàn)在已經(jīng)看不到一點(diǎn)閃了,現(xiàn)把程序分享出來,跟同學(xué)們交流交流。
先上幾張實(shí)物:









貼上程序(顯示程序是自己寫的,18B20程序是網(wǎng)上找的現(xiàn)成的)
main.c
  1. /*
  2. 程序:18B20數(shù)碼管顯示
  3. MCU:STC89C52RC
  4. 晶振:11.0592MHz
  5. */
  6. #include<reg52.h>
  7. #include "delay.h"
  8. #include "ds18b20.h"
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. #define duan P2
  12. #define wei P3
  13. sbit dp=P2^7;                                                        //小數(shù)點(diǎn)
  14. int temp;                                                                        //溫度緩存
  15. //*******************************顯示函數(shù)*****************************
  16. void Display()
  17. {
  18.         uchar code table[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//共陽碼表0~9、負(fù)號、不顯,共12位
  19.         uchar code wf[5]={0xff,0xfe,0xfd,0xfb,0xf7};//位選表(只用到后4位)
  20.         uchar data df[5];                                //用來存取溫度各位數(shù)的值(只用到1-4)
  21.         uchar i;
  22.         uint j;
  23.         j=temp;
  24.   if(temp<0)j=-temp;                        //如果是負(fù)數(shù)轉(zhuǎn)換成正數(shù)
  25.         for(i=4;i>0;i--)                                //循環(huán)次數(shù)等于溫度值的位數(shù)
  26.                 {
  27.                         df[i]=j%10;                                        //取出各位數(shù)的值
  28.                         j/=10;
  29.                 }
  30.         if(temp<0)df[1]=10;                        //如果溫度是負(fù)數(shù),千位顯示負(fù)號
  31.         if(df[1]==0)df[1]=11;                //如果千位是0不顯示空
  32.         for(i=4;i>0;i--)                                //循環(huán)次數(shù)等于數(shù)碼管的位數(shù)
  33.                 {
  34.                         delaynms(15);                                //先延時,跳出循環(huán)后馬上讀取溫度,避免讀溫度時數(shù)碼管閃
  35.                         duan=0xff;                                        //先關(guān)段顯
  36.                         duan=table[df[i]];        //送出段碼
  37.                         if(i==3)dp=0;                                //顯示小數(shù)點(diǎn)
  38.                         wei=wf[i];                                        //送出位碼                        
  39.                 }
  40. }
  41. //*********************************主函數(shù)*********************************
  42. void main()
  43. {
  44.         reset();                                                                //18b20初始化
  45.         while(1)
  46.         {
  47.                 Display();                                                //顯示溫度
  48.     temp=get_temp();                        //讀取溫度
  49.         }        
  50. }
復(fù)制代碼
18b20.c
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "ds18b20.h"
  4. #include "delay.h"
  5. //**************************初始化函數(shù)************************
  6. void reset()
  7. {
  8.         uchar x=0;
  9.         DQ = 1;
  10.         delayus(1);
  11.         DQ = 0;
  12.         delayus(50);        //延時600us
  13.         DQ = 1;
  14.         delayus(6);                //延時80us
  15.         x=DQ;        
  16.         delayus(45);        //延時420us        
  17. }
  18. //**************************寫字節(jié)函數(shù)************************
  19. void write_byte(uchar wByte)
  20. {
  21.         uchar i;
  22.         for(i=8; i>0; i--)
  23.         {
  24.                 DQ = 0;
  25.                 _nop_();
  26.                 _nop_();
  27.                 _nop_();
  28.                 _nop_();
  29.                 DQ = wByte & 0x01;
  30.                 delayus(6);        
  31.                 DQ = 1;               
  32.                 wByte >>= 1;
  33.         }        
  34.         delayus(1);
  35. }
  36. //***********************讀字節(jié)函數(shù)************************
  37. uchar read_byte(void)
  38. {
  39.         uchar i,rByte;
  40.         for(i=8; i>0; i--)
  41.         {
  42.                 DQ = 0;
  43.                 _nop_();
  44.                 rByte >>= 1;
  45.                 DQ = 1;
  46.                 _nop_();
  47.                 _nop_();
  48.                 _nop_();
  49.                 _nop_();        
  50.                 if(DQ)
  51.                 rByte |= 0x80;
  52.                 delayus(6);
  53.         }
  54.         return rByte;
  55. }
  56. //************************讀取溫度函數(shù)************************
  57. uint get_temp(void)
  58. {
  59.         uchar a=0;
  60.         uchar b=0;
  61.         int t=0;                                                        //溫度
  62.         uint tt=0;
  63.         reset();                                                        //復(fù)位
  64.         write_byte(0xcc);                        //忽略ROM
  65.         write_byte(0x44);                        //發(fā)送溫度轉(zhuǎn)化命令
  66.         reset();                                                         //再次復(fù)位
  67.         write_byte(0xcc);                        //忽略ROM
  68.         write_byte(0xbe);
  69.         a= read_byte();                                //讀溫度低字節(jié)
  70.         b= read_byte();                                //讀溫度高字節(jié)
  71.   tt=(b<<8)|a;                                        //合并
  72.   if(b>200)tt=~tt+1;                //如果是負(fù)溫度取反,加一
  73.   t=tt*0.625;                                                //轉(zhuǎn)換成十進(jìn)制
  74.   if(b>200)t=~t;                                //如果是負(fù)溫度轉(zhuǎn)換成負(fù)數(shù)
  75.         return(t);                                                //返回溫度值
  76. }
復(fù)制代碼
18b20.h
  1. #ifndef _DS18B20_H_
  2. #define _DS18B20_H_

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit DQ        =        P0^7;

  6. void reset(void);//復(fù)位
  7. void write_byte(uchar wByte);//寫字節(jié)
  8. uchar read_byte(void);//讀字節(jié)
  9. uint get_temp(void);//讀溫度

  10. #endif
復(fù)制代碼
delay.c
  1. #include "delay.h"
  2. //**************************10us延時函數(shù)************************
  3. void delayus(uint us)   
  4. {
  5.    while(us--);
  6. }
  7. //**************************nms延時函數(shù)************************
  8. void delaynms(uint n)
  9. {
  10.   uint a;
  11.         uchar b;
  12.         for(a=n;a>0;a--)
  13.                 for(b=110;b>0;b--);
  14. }
復(fù)制代碼
delay.h
  1. #ifndef _DELAY_H_
  2. #define _DELAY_H_
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void delayus(uint us);//延時10微秒
  6. void delaynms(uint n);//延時若干毫秒

  7. #endif
復(fù)制代碼
最后附上源文件(有仿真)
18B20.rar (64.82 KB, 下載次數(shù): 85)




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

使用道具 舉報

沙發(fā)
ID:79544 發(fā)表于 2016-7-25 08:32 | 只看該作者
謝謝樓主分享,值得學(xué)習(xí)!!!!!
回復(fù)

使用道具 舉報

板凳
ID:92231 發(fā)表于 2016-8-12 07:39 來自手機(jī) | 只看該作者
菜鳥需要補(bǔ)充知識,所以下載,學(xué)習(xí)中
回復(fù)

使用道具 舉報

地板
ID:108622 發(fā)表于 2016-10-12 19:29 來自手機(jī) | 只看該作者
總能找到好東西
回復(fù)

使用道具 舉報

5#
ID:141595 發(fā)表于 2016-10-18 12:29 | 只看該作者
好東西。。。。。。。。。
回復(fù)

使用道具 舉報

6#
ID:147631 發(fā)表于 2016-11-21 12:28 | 只看該作者
您好,請問您寫過間隔一定時間測量溫度的嗎
回復(fù)

使用道具 舉報

7#
ID:61002 發(fā)表于 2016-11-21 13:09 | 只看該作者
數(shù)碼管顯示還可以繼續(xù)優(yōu)化,現(xiàn)在看著有余暉
回復(fù)

使用道具 舉報

8#
ID:99130 發(fā)表于 2016-11-25 16:48 | 只看該作者
騰飛的龍 發(fā)表于 2016-7-25 08:32
謝謝樓主分享,值得學(xué)習(xí)!!!!!

這幾段程序怎么組合
回復(fù)

使用道具 舉報

9#
ID:150416 發(fā)表于 2016-11-26 22:13 | 只看該作者
這個DS18B20測的是管子的溫度,跟實(shí)際溫度差距很大的
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 二区视频 | 天堂在线中文字幕 | 欧美xxxx网站 | 国产精品99久久久久久人 | 这里只有精品99re | 在线激情视频 | 精品国产乱码久久久久久闺蜜 | 欧美一区二区另类 | 亚洲一区免费视频 | 欧美aⅴ| 久久综合久久久 | 91视视频在线观看入口直接观看 | chinese中国真实乱对白 | 久久视频精品 | 久草资源 | 国产我和子的乱视频网站 | 中文字幕第一页在线 | 欧美专区日韩专区 | 国产高潮好爽受不了了夜色 | 国产一区二区三区在线免费 | 亚洲精品视频在线看 | 高清一区二区 | 亚洲午夜精品久久久久久app | 欧美日韩最新 | 精品亚洲一区二区三区 | 国产精品久久久久久久久久久免费看 | 麻豆久久久9性大片 | 日韩中文视频 | 国产乱码精品一区二区三区中文 | 日韩中文字幕免费在线观看 | 蜜桃毛片 | 欧美成人一区二免费视频软件 | 在线午夜 | 一级特黄在线 | 亚洲男女视频在线观看 | 国产精品亚洲综合 | 国产精品永久久久久 | 特黄小视频 | 91xxx在线观看 | 一级aaaa毛片 | 激情久久网 |