春夏之交,氣溫多變,值此季節,制作了一個數字溫度計,感知冷暖,尊重自然。
制作出來的實物圖如下:
IMG_20200326_221327.jpg (3.48 MB, 下載次數: 83)
下載附件
南方的氣溫有25度,夏天即將來臨。
2020-3-26 22:57 上傳
一、設計思路:
1. 采用AT89S52+DS18B20+三位共陽數碼管構架。本案例最終生成的HEX文件只有3.2K,單片機用AT89S52有些浪費了,但芯片是以前學習時留下來的,而且P0口有斷腳,發揮余熱吧。有強迫癥的朋友可以選用STC15W204S+74HC595。
2. 數碼管上下倒置,目的是為了能顯示溫度單位,數碼管代碼需另外取碼(推薦),或是在焊接時重新分布腳位也可。
二、電路構成:
1. 單片機最小系統:AT89S52、40P雙列插座、晶振(12MHz)、30pF貼片電容(2個)、10K電阻、10uF電解電容。
2. 溫度采集電路:DS18B20(數字溫度傳感器)、4.7K貼片電阻。
3. 數碼管顯示電路:F4301BH(三位共陽)、100歐電阻8個(段限流電阻,實際焊接為91歐)、SS8550三極管3個+10K電阻3個(位驅動)。
4. 供電電路:DC5V電源座、100uF濾波電容。
三、編程與仿真:
此過程略……
四、電路焊接:
電路較簡單,萬能板就可以。一些小元件焊接在40P座里面或是在底層。底層的導線有些雜亂,最后用上了硅膠槍,感覺還行。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
6213320.jpg (386.47 KB, 下載次數: 74)
下載附件
仿真成功
2020-3-26 23:34 上傳
附程序(不全):
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit w1=P2^5;
sbit w2=P2^6;
sbit w3=P2^7;
sbit DQ=P3^4;
bit TempFlag;
uint Temp;
uchar code tab[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82}; //代碼表,已重新取碼
void Delayms(uint xms);
void Delayus(uint xus);
void GetTemp(void);
void InitT0(void);
void Init_DS18B20(void);
uchar Read_DS18B20(void);
void Write_DS18B20(uchar Dat);
void display()
{
P1=0x33;
w3=0;
Delayms(2);
w3=1;
P1=tab[Temp%10];
w2=0;
Delayms(2);
w2=1;
P1=tab[Temp/10];
w1=0;
Delayms(2);
w1=1;
}
void main() //主函數
{
InitT0();
while(1)
{
GetTemp(); //讀取溫度
display();
}
}
void Init_DS18B20(void) //初始化DS18B20函數
{
DQ=1;
Delayus(4);
DQ=0;
Delayus(100);
DQ=1;
Delayus(40);
}
uchar Read_DS18B20(void) //讀DS18B20函數
{
uchar i=0,Dat=0;
for(i=0;i<8;i++)
{
DQ=1;
DQ=0;
Dat>>=1;
DQ=1;
if(DQ)
Dat|=0x80;
DQ=1;
Delayus(25);
}
return(Dat);
}
void Write_DS18B20(uchar Dat) //寫DS18B20函數
{
uchar i=0;
for(i=0;i<8;i++)
{
DQ=1;
Dat>>=1;
DQ=0;
DQ=CY;
Delayus(25);
DQ=1;
}
}
void GetTemp(void) //取溫度函數
{
uchar a=0,b=0;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
a=Read_DS18B20();
b=Read_DS18B20();
Temp=b;
Temp<<=8;
Temp=Temp|a;
if(b>=8)
{
Temp=~Temp+1;
TempFlag=1;
}
else
TempFlag=0;
Temp=Temp*0.0625;
}
全部程序51hei下載地址:
18B20.rar
(868 Bytes, 下載次數: 138)
2020-3-26 23:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|