-55~125℃溫度顯示 精度0.1℃
功能:
(1)使用單片機對DS18B20溫度傳感器進行讀取得到溫度值
(2)使用74hc573鎖存器驅動數碼管的斷碼顯示
(3)使用74hc138譯碼器選擇數碼管
(4)增加了傳感器狀態監測,如果傳感器連接異常則顯示檢測動畫
顯示特點:
(1)數字默認顯示整數兩位和小數一位,也就是溫度可以精確到0.1℃
(2)當前溫度為零下是,溫度前自動添加符號,非零下時則不顯示
(3)默認顯示為兩位整數,當溫度大于100攝氏度時,會增加到三位。
展示圖片如下:
-55.png (48.4 KB, 下載次數: 61)
下載附件
零下55℃顯示
2020-4-28 13:00 上傳
零下55℃顯示
125.png (50.48 KB, 下載次數: 89)
下載附件
125℃顯示
2020-4-28 13:00 上傳
125℃顯示
掉線.png (51.1 KB, 下載次數: 60)
下載附件
檢測器件
2020-4-28 13:00 上傳
檢測DS18B20
仿真圖.png (51.62 KB, 下載次數: 55)
下載附件
精確0.1℃
2020-4-28 13:00 上傳
精確0.1℃顯
單片機源程序如下:
- /*********************************************
- 程序功能:使用74H573鎖存器和138譯碼器共同完成8位數碼管溫度顯示
- 138譯碼器的真值表:
- C B A 數碼管位
- 0 0 0 1
- 0 0 1 2
- 0 1 0 3
- 0 1 1 4
- 1 0 0 5
- 1 0 1 6
- 1 1 0 7
- 1 1 1 8
- 程序公開,共師兄習
- 如有錯誤,敬請糾正
- *********************************************/
- #include "DS18B20.h"
- /*138譯碼器管腳定義*/
- sbit LSA = P2^0; //定義138譯碼器管腳A
- sbit LSB = P2^1; //定義138譯碼器管腳B
- sbit LSC = P2^2; //定義138譯碼器管腳C
- /*數碼管字碼定義*/
- uchar code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x58,0X40}; //共陰極數碼管字段
- /*帶點*/
- uchar code table_bit[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};
- uchar G,S,BAI,Q;
- int num = 0;
- void count(void);
- void display(void);
- void delay(uint z);
- void DS18B20_Chack(void);
- void SMG_Channel(uchar x);
- void main(void)
- {
- uint i;
- while(1)
- {
- i++;
- delay(5);
- if(i%40 == 0)
- {
- num = ReadTemperature(); //讀取一次溫度
- if(num<0) //判斷是否為負數
- num = -num; //轉成整數
- }
- DS18B20_Chack();
- count(); //計算
- display(); //顯示
- }
- }
- void count(void) //把每一位數字都單獨存到一個變量中
- {
- G = num%10;
- S = num/10%10;
- BAI = num/100%10;
- Q = num/1000%10;
- }
- void display(void)
- {
- uchar x = 1;
- /*********正負號*********/
- if(temp_flag) //溫度為正不顯示 1正
- {
- P0 = 0X00;
- SMG_Channel(x);
- P0 = table[11];
- delay(1);
- }
- else x=x-1;
- /********百位**********/
- if(Q)
- {
- x=1;
- P0 = 0X00;
- SMG_Channel(x);
- P0 = table[Q];
- delay(1);
- }
- /*********十位*********/
- P0 = 0X00;
- SMG_Channel(x+1);
- P0 = table[BAI];
- delay(1);
- /*********個位*********/
- P0 = 0X00;
- SMG_Channel(x+2);
- P0 = table_bit[S];
- delay(1);
- /*********小數點后一位*********/
- P0 = 0X00;
- SMG_Channel(x+3);
- P0 = table[G];
- delay(1);
- /*********溫度符號*********/
- P0 = 0X00;
- SMG_Channel(x+4);
- P0 = table[10];
- delay(1);
- }
- /********延時函數*********/
- void delay(uint z)
- {
- uint x,y;
- for(x=0;x<z;x++)
- for(y=0;y<123;y++);
- }
- /********監測DS18B20的在線情況*********/
- void DS18B20_Chack(void)
- {
- while(DS18B20_Init()) //監測DS18B20是否在線
- {
- uchar a;
- for(a = 1;a <= 8;a++)
- {
- P0 = 0X00;
- SMG_Channel(a);
- P0 = table[11];
- delay(100);
- }
- }
- }
- /********數碼管的選擇*********/
- void SMG_Channel(uchar x)
- {
- switch(x)
- {
- case 1: LSA = 0;LSB = 0;LSC = 0; break;
- case 2: LSA = 1;LSB = 0;LSC = 0; break;
- case 3: LSA = 0;LSB = 1;LSC = 0; break;
- case 4: LSA = 1;LSB = 1;LSC = 0; break;
- case 5: LSA = 0;LSB = 0;LSC = 1; break;
- case 6: LSA = 1;LSB = 0;LSC = 1; break;
- case 7: LSA = 0;LSB = 1;LSC = 1; break;
- case 8: LSA = 1;LSB = 1;LSC = 1; break;
- default: break;
- }
- }
復制代碼
所有資料51hei提供下載:
DEMO_8SMG_74H573 74LS138 DS18B20.zip
(2.2 MB, 下載次數: 77)
2020-4-28 13:04 上傳
點擊文件名下載附件
protues+keil 下載積分: 黑幣 -5
|