C51系列单片机时(闹)钟课程设计_c51定时闹钟课程设计
C51系列单片机时(闹)钟课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c51定时闹钟课程设计”。
C51系列单片机时(闹)钟课程设计
程序如下:
#include #define uchar unsigned char #define uint unsigned int uchar HH,MM,SS,x,ValueCode,WZ,KeyScanA,KeyScanB,TimeCount=0,AdjFlag=0,AlarmFlag=0;uchar LedCode[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x77,0x7a,0x39,0x5e,0x79,0x71};uchar WZCode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar TimeHH,TimeMM,TimeSS,AlarmHH,AlarmMM,AlarmSS;
void DisplayLED(){ int i,j;P2=0xff;P0=0xff;P0=LedCode[ValueCode%16];//数码管段显
P2=WZCode[WZ];//数码管位显
for(i=0;i
init();x=0xff;while(1){
P3=0xff;
if((x&0x04)==0x00)//调节时间
{
TimeHH=HH;TimeMM=MM;TimeSS=SS;
TR0=0;P1=0xfe;
AdjFlag++;
if(3==(AdjFlag%4))
{
TR0=1;P1=0xff;
}
}
else if((x&0x08)==0x00)//加
{
switch(AdjFlag%4)
{
case 0:SS++;if(SS>59)SS=0;break;
case 1:MM++;if(MM>59)MM=0;break;
case 2:HH++;if(HH>23)HH=0;break;
default:break;
}
}
else if((x&0x10)==0x00)//减
{
switch(AdjFlag%4)
{
case 0:SS--;if(SS==255)SS=59;break;
case 1:MM--;if(MM==255)MM=59;break;
case 2:HH--;if(HH==255)HH=23;break;
default:break;
}
}
else if((x&0x20)==0x00)//闹钟
{
if(0==(AdjFlag%4))
{
//TimeHH=HH;TimeMM=MM;TimeSS=SS;
}
}
void timer1()interrupt 3 //数码管按顺序显示 { x=P3;ValueCode=SS%10;WZ=2;DisplayLED();ValueCode=SS/10;WZ=3;DisplayLED();ValueCode=MM%10;WZ=4;DisplayLED();ValueCode=MM/10;WZ=5;DisplayLED();ValueCode=HH%10;WZ=6;DisplayLED();ValueCode=HH/10;
TR0=0;P1=0xfd;
AdjFlag++;
if(3==(AdjFlag%4)){
AlarmFlag=1;
AlarmHH=HH;AlarmMM=MM;AlarmSS=SS;
HH=TimeHH;MM=TimeMM;SS=TimeSS;
TR0=1;P1=0xff;
}
} if(AlarmFlag==1)//判断闹钟
{ if((AlarmHH==HH)&&(AlarmMM==MM))
{
P1=0x7f;//
}
else
{
AlarmFlag=0;P1=0xff;
} } } return;WZ=7;DisplayLED();//P1=x;
P3=0xff;return;} void timer0()interrupt 1 //时分秒改变的时间间隔 { TimeCount++;if(TimeCount>2){
TimeCount=0;
SS=SS+1;} TH0=(65536-5000)/256;TL0=(65536-5000)%256;//TH0=(65536-50000)/256;//TL0=(65536-50000)%256;//SS++;if(SS>59){
SS=0;
MM++;} if(MM>59){
MM=0;
HH++;} if(HH>23)
HH=0;return;}