標(biāo)題:
實(shí)時(shí)間鐘帶一路報(bào)警輸出
[打印本頁(yè)]
作者:
newchp
時(shí)間:
2009-12-13 22:47
標(biāo)題:
實(shí)時(shí)間鐘帶一路報(bào)警輸出
//有一路報(bào)警輸出,可設(shè)置報(bào)警時(shí)間
//實(shí)間時(shí)間請(qǐng)調(diào)整TH1,TL1值使更準(zhǔn)確
//designed by ljc,gdwm ceramic com,.ltd
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
#define segment P0 //數(shù)碼管顯示
#define wei P2 //數(shù)碼管位控制
uchar hour,min,sec; //定義小時(shí),分
uchar ms; //當(dāng)前毫秒
uchar alarm_h1,alarm_m1;//報(bào)警設(shè)置,hour,minute;
uchar alarm_h2,alarm_m2;
sbit flash=P1^0; //秒閃爍標(biāo)志
sbit seth=P3^0; //小時(shí)設(shè)置
sbit setm=P3^1; //分設(shè)置
sbit seta1h=P3^2; //alarm1 set
sbit seta1m=P3^3; //alarm1 set
sbit alarm_out=P1^7; //設(shè)定時(shí)間到,報(bào)警輸出
bit hour_min_sign; //時(shí),分設(shè)置標(biāo)志
bit pop_key; //鍵彈起標(biāo)志
uchar code design[10]={0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60};//0,1,2,3,4,5,6,7,8,9
//*************************************************
//**********
void delay(uint i)
{ uint j;
for(;i>0;i--)
for(j=0;j<120;j++)
{;}
}
//*************************************************
//**********
void initial()
{ TMOD=0x01;
TH0=0X3C; //50ms定時(shí)
TL0=0xc0;
EA=1;
ET0=1;
TR0=1;
//報(bào)警時(shí)間初使化
alarm_h1=7;
alarm_m1=0;
alarm_h2=14;
alarm_m2=0;
}
//*************************************************
//**********
void time0_int() interrupt 1
{ TH0=0x3c;
TL0=0xc0;
if(ms<20)
{ ms++;}
else
{ ms=0;
sec++;
if(sec>59)
{ sec=0;
min++;
if(min>59)
{ min=0;
hour++;
if(hour>=24)
{ hour=0;}
}
}
}
if(ms>10){flash=1;}
else{flash=0;}
}
//************************************************
//*********
void display(uchar h,m,ah1,am1)
{ uchar hh,hl,mh,ml,hh1,hh2,mm1,mm2;
hh=h/10;
hl=h%10;
mh=m/10;
ml=m%10;
hh1=ah1/10;hh2=ah1%10;mm1=am1/10;mm2=am1%10; //報(bào)警時(shí)間顯示
//
segment=design[hh];
wei=0xef;
delay(2);
//
segment=design[hl];
wei=0xdf;
delay(2);
//
segment=design[mh];
wei=0xbf;
delay(2);
//
segment=design[ml];
wei=0x7f;
delay(2);
//報(bào)警顯示
segment=design[hh1];
wei=0xfe;
delay(5);
segment=design[hh2];
wei=0xfd;
delay(2);
segment=design[mm1];
wei=0xfb;
delay(2);
segment=design[mm2];
wei=0xf7;
delay(2);
}
//************************************************
//鍵防拌處理**********
void scan_key(bit set_h_m)
{ if(!set_h_m)
{ delay(30);
if(!set_h_m)
{ delay(10);
hour_min_sign=1;
}
else{hour_min_sign=0;}
}
while(set_h_m&hour_min_sign)//等街鍵彈起
{ delay(30);
if(set_h_m&hour_min_sign)
{ delay(10);
pop_key=1;
} //鍵彈起標(biāo)志
hour_min_sign=0;
}
}
//時(shí)間設(shè)置****************************************
//**********
void time_set()
{ pop_key=0;
scan_key(seth);
if(pop_key) //小時(shí)鍵按下,小時(shí)加1
{
if(hour>23)
{ hour=0;}
else{hour++;}
display(hour,min,alarm_h1,alarm_m1);
}
pop_key=0;
//
scan_key(setm); //分鍵按下,分加1
if(pop_key)
{
if(min>59)
{ min=0;}
else{min++;}
display(hour,min,alarm_h1,alarm_m1);
}
pop_key=0;
}
//***********************************************
//報(bào)警時(shí)間設(shè)置:小時(shí),分鐘*
//有報(bào)警時(shí)間設(shè)置功能,延時(shí)關(guān)閉功能
void alarm()
{
//報(bào)警1
pop_key=0;
scan_key(seta1h); //報(bào)警1設(shè)置
if(pop_key)
{ alarm_h1++;
if(alarm_h1>23)
{ alarm_h1=0;}
}
pop_key=0;
display(hour,min,alarm_h1,alarm_m1);
scan_key(seta1m);
if(pop_key)
{ alarm_m1++;
if(alarm_m1>59)
{ alarm_m1=0;}
}
display(hour,min,alarm_h1,alarm_m1);
if((hour==alarm_h1)&(min==alarm_m1))//相等
{ alarm_out=0;} //報(bào)警輸出
}
//***********************************************
//*************************
void main()
{ initial();
for(;;)
{ time_set(); //時(shí)間設(shè)置
display(hour,min,alarm_h1,alarm_m1);
alarm();
}
}
作者:
jackhwang
時(shí)間:
2009-12-21 14:43
大哥是不是在主函數(shù)里面少了個(gè)while(1)語(yǔ)句!
作者:
jackhwang
時(shí)間:
2009-12-21 14:51
對(duì)不起,是我搞錯(cuò)了。哈哈!
作者:
xi_chang
時(shí)間:
2014-5-4 11:02
謝謝分享
作者:
yangbiliang
時(shí)間:
2014-5-25 19:29
怎么就一函數(shù)。。。。。實(shí)物圖呢?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1