?? main.c
字號:
/*********************************************************************/
//讀取DS18B20溫度,通過數碼管顯示,在溫度超過35度時繼電器吸合
/*********************************************************************/
#include<reg51.h>
#include"18B20.c"
#define uchar unsigned char
#define uint unsigned int
code uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code uchar seven_bit[] = {0xfe,0xfd,0xfb,0xf7};
uchar cp;
uint temp1,temp2;
sbit jdq = P2^6;
void timer0_init(void) //初始化
{
TMOD = 0x01;
TH0 = 0xec;
TL0 = 0x78;
TR0 = 1;
EA = 1;
ET0 = 1;
}
/*****************************************************************************/
void timer0_isr(void) interrupt 1 //中斷
{
uchar j;
TR0 = 0;
EA = 0;
TH0 = 0xec;
TL0 = 0x78;
TR0 = 1;
EA = 1;
cp++;
if(cp >= 200) //剛好1秒
{
cp = 0;
temp1 = Read_Temperature();//得到溫度
if((temp1 & 0x80) == 0x80) //如果溫度為負值
{
temp2 =0x7f & ~temp1 + (0x0f & ~c) /15; //整數處理,需要加上小數來的借位
c = 0x0f & ~c + 0x01; //小數處理
}
else temp2 = temp1;//如果溫度為正值,不用處理
}
P0 = 0xff;
switch(j)
{
case 0:P0 = seven_seg[c * 10/16];break;//顯示小數
case 1:P0 = 0x7f & seven_seg[temp2 % 10];break;//顯示個位并加上小數點
case 2:{
if((temp2 < 10) && (temp1 < 0x80)){P0 = 0xff;break;}//如果溫度小于10度,且為正值,十位0不顯示
if((temp1 > 0x80) && (temp2 < 10)){P0 = 0xbf;break;}//如果溫度小于10度,且為負值,十位0不顯示,只顯示“-”
P0 = seven_seg[temp2 / 10]; break;//如果溫度大于10度,10位正常顯示
}
case 3:{
if((temp1 > 0x80) && ((temp2 / 10) > 0))//如果溫度為負值,且十位不為0,百位顯示“-”
P0 = 0xbf;
break;
}
}
P2 = seven_bit[j];
j++;
if(j >= 4)
j=0;
}
void main(void)
{
timer0_init();
while(1)
{
if(temp2 >= 35)
jdq = 0;
else
jdq = 1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -