51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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; //second 调整定义sbit P1_1=P1^1; //minite调整定义sbit P1_2=P1^2; //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;

}

}

/*定时闹钟*/

void dingshi(void)

{

if(P1_3==0) //按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、P1_7设置闹铃时间。

相关文档
最新文档