|
如果改成這樣,應(yīng)該怎么改?:初始時(shí)間及定時(shí)時(shí)間可調(diào),且動(dòng)態(tài)顯示剩余時(shí)間,并在最后一分鐘發(fā)出警告聲,時(shí)間到提醒。
轉(zhuǎn):倒計(jì)時(shí)器帶鬧c程序,最長(zhǎng)定時(shí)99:59,時(shí)間到,鬧鈴10秒,已在學(xué)習(xí)板上通過(guò),稍改后可用于控制其他負(fù)載。剛學(xué)請(qǐng)各位老師指導(dǎo)!用數(shù)碼管顯示的吧,電路下載:http://www.torrancerestoration.com/f/ks51.pdf
#include <reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uint8 a[6];
uint16 counter = 0;
uint8 sec,min=0,hour=0,t_min=0,t_hour=0,ky=0; //操作:a:1、開(kāi)機(jī)顯示6個(gè)0,可進(jìn)行鬧時(shí)設(shè)置。-> 2、功能按鍵K3按1下走時(shí)。-> // 3 、功能鍵再按1下關(guān)鬧鈴。->再按1下回到鬧時(shí)設(shè)置。循環(huán)。
uint16 counter1=0;
//b: K1、K2可設(shè)置時(shí)、分,最長(zhǎng)定時(shí)99:59。
sbit BUZZ = P1^6;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit KeyOut1=P2^3;
sbit K1 = P2^4;
sbit K2 = P2^5;
sbit K3 = P2^6;
void timer1_init() //定時(shí)器1初使化
{
TMOD |= 0x10;
TMOD &= 0xdf;
TH1 = 0xFC;
TL1 = 0x67;
ET1 = 1;
EA = 1;
TR1 = 1;
}
void interrupt_timer1()interrupt 3 //中斷函數(shù)
{ TH1 = 0xFC;
TL1 = 0x67;
counter1++;
if(counter1 == 1000)
{ counter1 =0;
TR1 = 0;}
BUZZ = ~BUZZ;
}
void timer2_init() // 定時(shí)器T2運(yùn)行函數(shù)
{
T2MOD=0X00;
TH2=(65536-110592/60)/256;
TL2=(65536-110592/60)%256;
RCAP2H=TH2;
RCAP2L=TL2;
EA=1;
ET2=1;
TR2=1;
}
void refresh_led() //數(shù)碼管刷新函數(shù)
{
static uint8 j = 0;
switch(j)
{
case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0=0x7f & number[a[0]];break;
case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[1]];break;
case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j++;P0 =0x7f & number[a[2]];break;
case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[3]];break;
case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j++;P0 =0x7f & number[a[4]];break;
case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = number[a[5]];break;
default: break;
}
}
void Hms(void) //秒,分,時(shí)計(jì)算函數(shù)
{
static uint16 ui2msCount=0;
if(ky==1)
ui2msCount++;
if(ui2msCount>499)
{
ui2msCount=0;
if (sec==0)
{
sec=60;
if (min==0)
{
min=60;
if (hour==0)
hour=99;
hour--;
}
min--;
}
sec--;
}
a[5]=hour/10;
a[4]=hour%10;
a[3]=min/10;
a[2]=min%10;
a[1]=sec/10;
a[0]=sec%10;
if((ky==1)&&(sec==0)&&(min==0)&&(hour==0))
(timer1_init(),ky=0);
}
void Key3(void) //K3按鍵處理函數(shù)
{
while(!K3);
ky++;
if(ky > 1)
ky=0;
}
void Key2(void) //K2按鍵處理函數(shù)
{
while(!K2);
if(ky==0)
min++;
if(min>59)
min=0;
}
void Key1(void) //K1按鍵處理函數(shù)
{
while(!K1);
if(ky==0)
hour++;
if(hour>99)
hour=0;
}
void Delay(uint8 ms) //毫秒延時(shí)函數(shù)
{
uint8 i;
while(ms--)
{
for( i=0;i<125;i++)
;
}
}
main() //主函數(shù)
{
ENLED = 0; ADDR3 = 1;
timer2_init();
KeyOut1=0;
while(1) //主循環(huán)
{
if(!K1)
Delay(5);
if(!K1)
Key1();
if(!K2)
Delay(5);
if(!K2)
Key2();
if(!K3)
Delay(5);
if(!K3)
Key3();
}
}
void interrupt_timer2() interrupt 5 //定時(shí)器T2中斷函數(shù)
{
TF2=0;
Hms();
refresh_led();
} |
|