51 单片机 c 语言电子钟(已加入调时、闹铃、
整点报时功能)
效果图:
程序如下:
//51 单片机 c 语言电子钟(已加入调时、闹铃、整点报时功
能)
//WHJWNAVY 2011/10/14
#include
#include
#define uchar unsigned char
#define uint unsigned int
/*七段共阴管显示定义*/
//此表为 LED 的字模, 共阴数码管 0-9
-
uchar code dispcode[] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x40};
//段码控制
/*定义并初始化变量*/
uchar seconde=0;//秒
uchar minite=0;//分
uchar hour=12; //时
uchar mstcnt=0;//定时器计数,定时 50ms,mstcnt 满 20,
秒加 1
uchar shi=0;//闹铃功能
uchar fen=0;
uchar bjcs;//报警次数
sbit
P1_0=P1^0;
调整定义
sbit
P1_1=P1^1;
调整定义
sbit
P1_2=P1^2;
整定义
//second
//minite
//hour 调
sbit P1_5=P1^5;
//整点报时
sbit P1_3=P1^3;
//闹铃功能,调整时间
sbit P1_6=P1^6;
sbit P1_7=P1^7;
//调整时
//调整分
sbit P1_4=P1^4;
//关闭闹铃
/*函数声明*/
void delay(uint k );
//延时子程序
void time_pro( );
//时间处理子程序
void display( );
//显示子程序
void keyscan( );
//键盘扫描子程序
/*延时子程序*/
void delay (uint k)
{
uchar j;
while((k--)!=0)
for(j=0;j<125;j++)
{;}
{
}
}
/*时间处理子程序*/
void time_pro(void)
{
if(seconde==60)
{
seconde=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
/*显示子程序*/
void display(void)
{
if(P1_3==1)
{
P2=0XFE;
P0=dispcode[seconde%10];//秒个位
delay(1);
P2=0XFD;
P0=dispcode[seconde/10];//秒十位
delay(1);
P2=0XFB;
P0=dispcode[10];//间隔符 -
delay(1);
P2=0XF7;
P0=dispcode[minite%10];//分个位
delay(1);
P2=0XEF;
P0=dispcode[minite/10];//分十位
delay(1);
P2=0XDF;
P0=dispcode[10];//间隔符 -
delay(1);
P2=0XBF;
P0=dispcode[hour%10];//时个位
delay(1);
P2=0X7F;
P0=dispcode[hour/10];//时十位
delay(1);
}
}
/*键盘扫描子程序*/
void keyscan(void)
{
if(P1_0==0)//秒位的调整
{
delay(30);
if(P1_0==0)
{
seconde++;
if(seconde==60)
seconde=0;
{
}
}
delay(250);
}
if(P1_1==0)//分位的调整
{
}
delay(30);
if(P1_1==0)
{
}
minite++;
if(minite==60)
{
}
minite=0;
delay(250);
if(P1_2==0)//时位的调整
{
delay(30);
if(P1_2==0)
{
}
hour++;
if(hour==24)
{
}
hour=0;
delay(250);
}
}
/*整点报警*/
void zhengdian (void)
{
if((seconde==0)&(minite==0))//整点报时
{
}
P1_5=0;
delay(1000);
P1_5=1;