?? system_alarm.c
字號(hào):
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
delay_18B20(100);
a=ReadOneChar(); //讀取溫度值低位
b=ReadOneChar(); //讀取溫度值高位
temp1=b<<4;
temp1+=(a&0xf0)>>4;
temp2=a&0x0f;
temp=((b*256+a)>>4); //當(dāng)前采集溫度值除16得實(shí)際溫度值
}
/***************液晶顯示子函數(shù)1正常顯示*****************/
void displayfun1(void)
{
WriteCommandLCM(0x0c,1); //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
DisplayOneChar(3,0,hour/10+0x30); //液晶上顯示小時(shí)
DisplayOneChar(4,0,hour%10+0x30);
DisplayOneChar(6,0,minite/10+0x30); //液晶上顯示分
DisplayOneChar(7,0,minite%10+0x30);
DisplayOneChar(9,0,seconde/10+0x30); //液晶上顯示秒
DisplayOneChar(10,0,seconde%10+0x30);
DisplayOneChar(4,1,K/10+0x30); //液晶上顯示設(shè)定的溫度
DisplayOneChar(5,1,K%10+0x30);
DisplayOneChar(11,1,temp1/10+0x30); //液晶上顯示測(cè)得的溫度
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2/10+0x30);
if(ON_OFF==0) //若溫控標(biāo)志為0
{
DisplayOneChar(14,0,0x4f); // 液晶上顯示不控溫的標(biāo)志
DisplayOneChar(15,0,0x46);
}
else
{
DisplayOneChar(14,0,0x4f); // 液晶上顯示控溫的標(biāo)志
DisplayOneChar(15,0,0x4e);
if(outflag==1)
DisplayOneChar(0,0,0x7c);
else
DisplayOneChar(0,0,0xef);
}
}
/************液晶顯示子函數(shù)2***************/
void displayfun2(void)
{
WriteCommandLCM(0x0c,1); //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
DisplayOneChar(6,0,minite/10+0x30);
DisplayOneChar(7,0,minite%10+0x30);
DisplayOneChar(9,0,seconde/10+0x30);
DisplayOneChar(10,0,seconde%10+0x30);
DisplayOneChar(4,1,K/10+0x30);
DisplayOneChar(5,1,K%10+0x30);
DisplayOneChar(11,1,temp1/10+0x30);
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2/10+0x30);
WriteCommandLCM(0x0f,1); //顯示屏打開(kāi),光標(biāo)顯示,閃爍,檢測(cè)忙信號(hào)
DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);
}
/**************液晶顯示子函數(shù)3*****************/
void displayfun3(void)
{
WriteCommandLCM(0x0c,1); //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);
DisplayOneChar(9,0,seconde/10+0x30);
DisplayOneChar(10,0,seconde%10+0x30);
DisplayOneChar(4,1,K/10+0x30);
DisplayOneChar(5,1,K%10+0x30);
DisplayOneChar(11,1,temp1/10+0x30);
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2/10+0x30);
WriteCommandLCM(0x0f,1); //顯示屏打開(kāi),光標(biāo)顯示,閃爍,檢測(cè)忙信號(hào)
DisplayOneChar(6,0,minite/10+0x30);
DisplayOneChar(7,0,minite%10+0x30);
}
/**************液晶顯示子函數(shù)4 *****************/
void displayfun4(void)
{
WriteCommandLCM(0x0c,1); //顯示屏打開(kāi),光標(biāo)不顯示,不閃爍,檢測(cè)忙信號(hào)
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);
DisplayOneChar(6,0,minite/10+0x30);
DisplayOneChar(7,0,minite%10+0x30);
DisplayOneChar(9,0,seconde/10+0x30);
DisplayOneChar(10,0,seconde%10+0x30);
DisplayOneChar(11,1,temp1/10+0x30);
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2/10+0x30);
WriteCommandLCM(0x0f,1); //顯示屏打開(kāi),光標(biāo)顯示,閃爍,檢測(cè)忙信號(hào)
DisplayOneChar(4,1,K/10+0x30);
DisplayOneChar(5,1,K%10+0x30);
}
/**************鍵盤(pán)掃描子函數(shù)******************/
void keyscan(void)
{
uchar xx; //局部變量
P1=0xff;
if(P1!=0xff)
{
delay_LCM(50);
if(P1!=0xff)
{
xx=P1;
switch(xx) // 根據(jù)按鍵狀態(tài),調(diào)用不同的子函數(shù)
{
case 0xfe:set_adj(); break;
case 0xfd:inc_key(); break;
case 0xfb:dec_key(); break;
case 0xf7:ON_OFF=!ON_OFF; break;
default:break;
}
}
}
}
/**************設(shè)定工作模式子函數(shù)****************/
void set_adj(void)
{
delay_LCM(100);
set++;
if(set>=4)set=0;
}
/****************按鍵加法子函數(shù)******************/
void inc_key(void)
{
delay_LCM(100);
switch(set)
{
case 0:if(P1==0xf7)ON_OFF=!ON_OFF; break;
case 1:hour++; if(hour>=23)hour=23; break;
case 2:minite++; if(minite>=59)minite=59;break;
case 3:K++;if(K>=99)K=99; break;
default:break;
}
}
/****************按鍵減法子函數(shù)*****************/
void dec_key(void)
{
delay_LCM(100);
switch(set)
{
case 0:if(P1==0xf7)ON_OFF=!ON_OFF; break;
case 1:hour--; if(hour<=0)hour=0; break;
case 2:minite--;if(minite<=0)minite=0;break;
case 3:K--;if(K<=1)K=1; break;
default:break;
}
}
/***************定時(shí)器t0初始化*******************/
void init_timer0(void)
{
TMOD=0x01; //time0為定時(shí)器,方式1
TH0=0x3c; //預(yù)置計(jì)數(shù)初值
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
}
/***********定時(shí)器t0中斷子函數(shù)**************/
void timer0(void) interrupt 1 using 0 //定時(shí)器0方式1,50ms中斷一次
{
TH0=0x3c;
TL0=0xb0;
mstcnt++;
if(mstcnt>=20 ) {seconde++; mstcnt=0; }
if(seconde>=60) {minite++; seconde=0;}
if(minite>=60 ) {hour++; minite=0; }
if(hour>=24 ) {hour=0;}
keyscan( ); //按鍵掃描
}
/***********the main funtion*************/
void main(void)
{
P1=0xff; //初始化p1口,全設(shè)為1
delay_LCM(500); //延時(shí)500ms啟動(dòng)
initLCM( ); //LCD初始化
init_timer0( ); //時(shí)鐘定時(shí)器0初始化
Init_DS18B20( ) ; //DS18B20初始化
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
while (1)
{
keyscan(); //按鍵掃描
ReadTemperature(); //溫度采集
switch(set) //LCD根據(jù)工作模式顯示
{
case 0:displayfun1();delay_LCM(1000);break; //正常工作顯示
case 1:displayfun2();delay_LCM(1000);break; //調(diào)整時(shí)顯示
case 2:displayfun3();delay_LCM(1000);break; //調(diào)整分顯示
case 3:displayfun4();delay_LCM(1000);break; //溫度設(shè)定
default:break;
}
keyscan( ); //相當(dāng)于延時(shí)
if(ON_OFF==1) //若溫控標(biāo)志位1, 控制LAMP動(dòng)作
{
if(temp1>=K+1){outflag=1;OUT=0;}
if(temp1<K)
{
delay_LCM(1000);
if(temp1<K){outflag=0;OUT=1;} //
}
}
else{outflag=0;OUT=1;}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -