记录一下,最近在代做的课程设计。
1、设计一个基于单片机的电子时钟,具体功能如下
有计时功能,有按键启动系统,能实现12小时制和24小时制的转换,可以设置时间。
有闹钟功能,可设置三个闹钟,能够随意设置闹钟时间。
闹钟时间达到时,led可闪烁。
部分源代码如下:
1,定时器部分:
void Timer0Init()
{
TMOD=0x01; //用定时
TH0=0xD8; //装定时器初值
TL0=0xF0;
ET0=1; //启用定时器中断
EA=1; //开总中断
TR0=0;
}
void Timer0() interrupt 1
{
TH0=0xD8;
TL0=0xF0;
i++;
if(i==100) //定时3秒
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if((hour==12)&&(zhi==0))
{
if(z==0x08 && hour==12)
week++;
if(z==0x08)
z=0x01;
else
z=0x08;
if(week==8)
week=1;
hour=0;
}
if((hour==24)&&(zhi==1))
{
hour=0;
week++;
if(week==8)
week=1;
}
}
}
}
}
2、格式的转换
if(k6==0) //计时模式的切换
{
delayms(5);
if(k6==0)
{
zhi=~zhi;
if((hour>=12)&&(zhi==0))
hour-=12;
if((zhi==0xffff)&&(z==0x08))
hour+=12;
}while(!k6)display();
}
3、主函数
void main()
{
P0=0x00; //清楚数码管的段选
Int0Init();
Timer0Init();
while(1)
{
keyScanf(); //按键扫描
if((alarm==0xffff)&&((hour==ahour)&&(min==amin)||
(hour==bhour)&&(min==bmin)||
(hour==chour)&&(min==cmin))) //任何一个闹钟响起,都会闪烁
{
if(sec<=30)
{
for(d=0;d<20;d++)
{
led=~led; //led闪烁
delayms(80);
}
}
if(sec>30)
led=1; //闹钟30s后自动关闭
}
while(flag)
{
if(mode==1)
{
display1(); //闹钟1
keyScanf1(); //扫描按键,返回
}
if(mode==2)
{
display2(); //闹钟2
keyScanf2(); //扫描按键,返回
}
if(mode==3)
{
display3(); //闹钟3
keyScanf3(); //扫描按键,返回
}
}
led=1;
display();//start
}
}