基于单片机的电子钟C语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的电子钟C语
言程序
This model paper was revised by the Standardization Office on December 10, 2020
基于51单片机的电子钟C语言程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*七段共阴管显示定义*/
ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 F,
0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
/*定义并初始化变量*/
ucharseconde=0;
ucharminite=0;
ucharhour=12;
ucharmstcnt=0;
sbitP1_0=P1^0;//second调整定义
sbitP1_1=P1^1;//minite调整定义
sbitP1_2=P1^2;//hour调整定义
/*函数声明*/
voiddelay(uintk);//延时子程序
voiddelay1(ucharh);
voidtime_pro();//时间处理子程序
voiddisplay();//显示子程序
voidkeyscan();//键盘扫描子程序
/*****************************/
/*延时子程序*/
/****************************/
voiddelay1(ucharh)
{
ucharj;
while((h--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
voiddelay(uintk)
{
uinta,b,c;
for(c=k;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
/**************************/
/*时间处理子程序*/
/**************************/
voidtime_pro(void)
{
if(seconde==60)//秒钟设为60进制
{seconde=0;
minite++;
if(minite==60)//分钟设为60进制
{minite=0;
hour++;
if(hour==24)//时钟设为24进制
{hour=0;}
}
}
}
/*****************************/
/*显示子程序*/
/*****************************/
voiddisplay(void)
{
P2=0xfe;
P0=dispcode[hour/10];//显示小时的十位
delay1(4);
P2=0xfd;
P0=(dispcode[(hour%10)])|0X80;//显示小时的个位delay1(4);
P2=0xfb;
P0=dispcode[minite/10];//显示分的十位
delay1(4);
P2=0xf7;
P0=(dispcode[minite%10])|0X80;//显示分的个位delay1(4);
P2=0xef;
P0=dispcode[seconde/10];//显示秒的十位
delay1(4);
P2=0xdf;
P0=dispcode[seconde%10];//显示秒的个位
delay1(4);
}
/*******************************/
/*键盘扫描子程序*/
/*******************************/ voidkeyscan(void)
{
if(P1_0==0)//按键1秒的调整
{
delay(2);
if(P1_0==0)
//delay(300);
{
seconde++;
if(seconde==60)
{seconde=0;}
}
}
if(P1_1==0)//按键2分的调整
{
delay(2);
if(P1_1==0)
// delay(300);
{
minite++;
if(minite==60)
{minite=0;}
}
}
if(P1_2==0)//按键3小时的调整
{
delay(2);
if(P1_2==0)
//delay(300);
{
hour++;
if(hour==24)
{hour=0;}
}
}
}
voidtimer0(void)interrupt1using0//定时器0方式1,50ms中断一次{
TH0=0x3c;
TMOD=0x11;
mstcnt++;
if(mstcnt==20)
{
seconde++;
mstcnt=0;//注意点。对计数单元的清零十分的重要,本次调试中就是