?? temperature.c
字號:
#include<AT892051.H>
extern void _nop_ (void);
extern unsigned char Buf0[]={0x88,0x88,0x88,0x88};
sbit Bell=P3^7;
sbit no1=P3^5;
sbit no2=P3^4;
sbit no3=P3^3;
sbit no4=P3^2;
unsigned char DELAY = 250;
unsigned char Buf[20][2]={
{0x00,0x03,},
{0x01,0x9f,},
{0x02,0x25,},
{0x03,0x0d,},
{0x04,0x99,},
{0x05,0x49,},
{0x06,0x41,},
{0x07,0x1f,},
{0x08,0x01,},
{0x09,0x09,},
{0x80,0x02,},
{0x81,0x9e,},
{0x82,0x24,},
{0x83,0x0c,},
{0x84,0x98,},
{0x85,0x48,},
{0x86,0x40,},
{0x87,0x1e,},
{0x88,0x00,},
{0x89,0x08 },
};
void Dsplay(void)
{
unsigned char i;
for(i=0;i<20;i++)
{
if(Buf0[0] == Buf[i][0])
{
P1=Buf[i][1];
}
}
no1=1;no2=0;no3=0;no4=0;
while(DELAY--);while(DELAY--);
while(DELAY--);while(DELAY--);
for(i=0;i<20;i++)
{
if(Buf0[1] == Buf[i][0])
{
P1=Buf[i][1];
}
}
no1=0;no2=1;no3=0;no4=0;
while(DELAY--);while(DELAY--);
while(DELAY--);while(DELAY--);
for(i=0;i<20;i++)
{
if(Buf0[2] == Buf[i][0])
{
P1=Buf[i][1];
}
}
no1=0;no2=0;no3=1;no4=0;
while(DELAY--);while(DELAY--);
while(DELAY--);while(DELAY--);
for(i=0;i<20;i++)
{
if(Buf0[3] == Buf[i][0])
{
P1=Buf[i][1];
}
}
no1=0;no2=0;no3=0;no4=1;
while(DELAY--);while(DELAY--);
while(DELAY--);while(DELAY--);
}
void UART(void)
{
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
SCON=0xd8;
PCON=0x00;
TR1=1;
ES=1;
EA=1;
}
void Receive(void) interrupt 4
{
Buf0[0]=SBUF;
RI = 0;
while(RI==0);
Buf0[1]=SBUF;
RI = 0;
while(RI==0);
Buf0[2]=SBUF;
RI = 0;
while(RI==0);
Buf0[3]=SBUF;
RI = 0;
}
main()
{
UART();
while(1)
{
Dsplay();
}
}
1:2051-2
/**************************Minsys.c************************/
#include<AT892051.H>
#include<ds18b20_2.h>
extern unsigned char DELAY=100,HOUR=0,MIN=0,SEC=0,ENABLE=0xff,DELETE=0;
unsigned char ADDR_1,ADDR_2,ADDR_3,ADDR_4,nun1=0,nun2=0,nun3=0,nun4=0;
sbit Bell=P1^7;
sbit KEY1=P3^5;
sbit KEY2=P3^4;
sbit KEY3=P3^3;
sbit KEY4=P3^2;
bit OK=0;
unsigned char jishi(void);
void disp_H_M(void);
void disp_M_S(void);
void putchar(unsigned char a);
void UART(void)
{
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
SCON=0xd8;
PCON=0x00;
TR1=1;
}
void Init(void)
{
IE|=0x81;
IT0=1;
}
void KEY_4(void) interrupt 0
{
unsigned char i;
EA = 0;
while(DELAY--);
ADDR_1=0;ADDR_2=0;ADDR_3=0;ADDR_4=1;
nun1=0,nun2=0,nun3=0,nun4=0;
putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80);
while(KEY4 == 0)
{
if(KEY1 == 0)
{
for(i=0;i<200;i++)
{
while(DELAY--);while(DELAY--);
}
if(ADDR_1==1)
{
ADDR_1 = 0;
ADDR_4 = 1;
putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80);
}
if(ADDR_2==1)
{
ADDR_2 = 0;
ADDR_1 = 1;
putchar(nun1|0x80);putchar(nun2);putchar(nun3);putchar(nun4);
}
if(ADDR_3==1)
{
ADDR_3 = 0;
ADDR_2 = 1;
putchar(nun1);putchar(nun2|0x80);putchar(nun3);putchar(nun4);
}
if(ADDR_4==1)
{
ADDR_4 = 0;
ADDR_3 = 1;
putchar(nun1);putchar(nun2);putchar(nun3|0x80);putchar(nun4);
}
}
if(KEY2 == 0)
{
for(i=0;i<200;i++)
{
while(DELAY--);while(DELAY--);
}
if(ADDR_1==1)
{
nun1++;
if(nun1<10)
{
putchar(nun1|0x80);putchar(nun2);putchar(nun3);putchar(nun4);
}
else
{
nun1 = 0;
putchar(nun1|0x80);putchar(nun2);putchar(nun3);putchar(nun4);
}
}
if(ADDR_2==1)
{
nun2++;
if(nun2<10)
{
putchar(nun1);putchar(nun2|0x80);putchar(nun3);putchar(nun4);
}
else
{
nun2 = 0;
putchar(nun1);putchar(nun2|0x80);putchar(nun3);putchar(nun4);
}
}
if(ADDR_3==1)
{
nun3++;
if(nun3<6)
{
putchar(nun1);putchar(nun2);putchar(nun3|0x80);putchar(nun4);
}
else
{
nun3 = 0;
putchar(nun1);putchar(nun2);putchar(nun3|0x80);putchar(nun4);
}
}
if(ADDR_4==1)
{
nun4++;
if(nun4<10)
{
putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80);
}
else
{
nun4 = 0;
putchar(nun1);putchar(nun2);putchar(nun3);putchar(nun4|0x80);
}
}
}
if(KEY3 == 0)
{
while(DELAY--);
HOUR = nun1*10+nun2;
MIN = nun3*10+nun4;
SEC = 0;
OK = 1;
DELETE=1;
for(i=0;i<200;i++)
{
while(DELAY--);while(DELAY--);
}
}
}
EA = 1;
}
unsigned char jishi(void)
{
if(SEC !=0x00)
{
SEC --;
DELETE = 0x00;
return 0xff;
}
else
{
if(MIN !=0)
{
MIN --;
}
else
{
if(HOUR !=0)
{
HOUR --;
}
else
{
return 0x00;
}
MIN =59;
}
SEC = 59;
}
}
void disp_H_M(void)
{
unsigned char tempHH,tempHL,tempMH,tempML;
tempHH = HOUR/10;
tempHL = HOUR%10;
tempMH = MIN/10;
tempML = MIN%10;
putchar(tempHH);
putchar(tempHL);
putchar(tempMH);
putchar(tempML);
}
void disp_M_S(void)
{
unsigned char tempMH,tempML,tempSH,tempSL;
tempMH = MIN/10;
tempML = MIN%10;
tempSH = SEC/10;
tempSL = SEC%10;
putchar(tempMH);
putchar(tempML);
putchar(tempSH);
putchar(tempSL);
}
void putchar(unsigned char a)
{
TI=0;
SBUF=a;
while(!TI);
TI=0;
}
main()
{
unsigned char i,temper;
UART();
Init();
Bell = 0;
DELETE = 1;
while(1)
{
for(i=0;i<241;i++)
{
while(DELAY--);while(DELAY--);while(DELAY--);while(DELAY--);while(DELAY--);
}
ENABLE = jishi();
if(HOUR != 0)
{
disp_H_M();
}
else
{
disp_M_S();
}
temper = ReadTemperature();
if(((ENABLE == 0x00)&&(DELETE == 0x00))||((temper>50)||(temper<5)))
{
Bell = 1;
}
else
{
Bell = 0;
}
}
}
/**************************Ds18b20_2.h*********************/
sbit DQ =P3^7; //定義通信端口
//延時函數
void delay(unsigned int i)
{
while(i--);
}
//初始化函數
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復位
delay(8); //稍做延時
DQ = 0; //單片機將DQ拉低
delay(80); //精確延時 大于 480us
DQ = 1; //拉高總線
delay(14);
x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
delay(20);
}
//讀一個字節
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--) //讀八位,一個字節的數據
{
DQ = 0; // 給脈沖信號 ,通信端口,上升沿有效
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
//寫一個字節
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(4);
}
//讀取溫度
unsigned char ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned char t=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
a=ReadOneChar();
b=ReadOneChar();
a=a>>4;
t=b<<4;
t=t|a;
return(t);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -