標(biāo)題:
單片機(jī)數(shù)字溫度計(jì)Proteus仿真程序設(shè)計(jì)
[打印本頁(yè)]
作者:
l730
時(shí)間:
2019-12-8 14:07
標(biāo)題:
單片機(jī)數(shù)字溫度計(jì)Proteus仿真程序設(shè)計(jì)
基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)附件里有仿真電路和程序。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(16.85 KB, 下載次數(shù): 64)
下載附件
2019-12-10 00:45 上傳
單片機(jī)源程序如下:
//數(shù)字溫度計(jì)設(shè)計(jì)
//實(shí)時(shí)讀取并且顯示溫度
#include<reg51.h>
#include<ds18b20.c>
sbit P3_0 = P3^0;
code uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};//共陽(yáng)極數(shù)碼管數(shù)顯編碼
uchar cp1,cp2;
uint aa;
uint temp_num,temp_num1,temp_dot,temp; //temp_num、temp_num1為溫度整數(shù)部分,temp_dot小數(shù)部分,中間變量temp
void timer0_init(void) //中斷服務(wù)函數(shù)
{
TMOD = 0x01;
TH0 = (65536 - 2000) / 256;
TL0 = (65536 - 2000) % 256;
TR0 = 1;
EA = 1;
ET0 = 1;
}
void timer0_isr(void) interrupt 1 //中斷服務(wù)函數(shù)
{
TH0 = (65536 - 2000) / 256;
TL0 = (65536 - 2000) % 256;
cp1++;
if(cp1 >= 250) //1秒
{
cp1 = 0;
temp_num = Read_Temperature(); //得到溫度整數(shù)
temp_dot = c * 0.625; //得到溫度小數(shù)
if((temp_num & 0x80) == 0x80) //如果溫度為負(fù)值
{
temp_dot = (0x0f - c) * 0.625; //補(bǔ)碼轉(zhuǎn)換原碼,小數(shù)處理
temp_num1 = 0xff - temp_num; //補(bǔ)碼轉(zhuǎn)換原碼,整數(shù)處理
}
else temp_num1 = temp_num; //小數(shù)轉(zhuǎn)換為十進(jìn)制
}
P0 = 0xff;
switch(cp2)
{
case 0: P0 = 0xff; //消隱
P3_0 = 0;P0 = 0x01;P3_0 = 1;P3_0 = 0;
P0 = seven_seg[temp_dot]; break; //小數(shù)部分顯示
case 1: P0 = 0xff;
P3_0 = 0;P0 = 0x02;P3_0 = 1;P3_0 = 0;
P0 = 0x7f & seven_seg[temp_num1 % 10%10]; break;//整數(shù)部分各位顯示
case 2:
{
if(temp_num < 10)
{
P0 = 0xff;
P3_0 = 0;P0 = 0x04;P3_0 = 1;P3_0 = 0;
P0 = 0xff; break;
} //如果溫度小于10度,且為正值,十位0不顯示
if((temp_num > 0x80) && ( temp_num1 < 10))
{
P0 = 0xff;
P3_0 = 0;P0 = 0x04;P3_0 = 1;P3_0 = 0;
P0 = 0xbf; break;
} //如果溫度小于10度,且為負(fù)值,十位0不顯示,只顯示"-"
P0 = 0xff;
P3_0 = 0;P0 = 0x04;P3_0 = 1;P3_0 = 0;
P0 = seven_seg[temp_num1 / 10%10]; break;//如果溫度大于10度,10位正常顯示
}
case 3:
{
if((temp_num < 0x80) && (temp_num1 >= 100))
{
P0 = 0xff;
P3_0 = 0;P0 = 0x08;P3_0 = 1;P3_0 = 0;
P0 = seven_seg[temp_num1 / 100]; break; //如果溫度為負(fù)值,且十位不為0,百位顯示"-"
}
}
case 4:
{
if((temp_num > 0x80) && ((temp_num1 / 10) > 0))
{
P0 = 0xff;
P3_0 = 0;P0 = 0x08;P3_0 = 1;P3_0 = 0;
P0 = 0xbf; break; //如果溫度為負(fù)值,且十位不為0,百位顯示"-"
}
}
}
cp2++;
if(cp2 >= 5)
cp2=0;
}
void main(void)
{
timer0_init();
write_temprom(50,40); //向18B20的暫存器存入溫度上下限
Write_OneChar(0x48); //向18B20的EEROM中寫(xiě)數(shù)據(jù)
temp = read_temprom;
while(1);
}
復(fù)制代碼
所有資料51hei提供下載:
數(shù)字溫度計(jì)設(shè)計(jì).rar
(56.05 KB, 下載次數(shù): 60)
2019-12-8 14:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
YZH9527
時(shí)間:
2019-12-18 22:07
樓主,可不可以說(shuō)一下左邊的數(shù)碼管有什么用的
作者:
ddfffasff
時(shí)間:
2020-5-25 10:07
樓主,可不可以說(shuō)一下左邊的數(shù)碼管有什么用的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1