单片机数码管显示时钟程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ttincludeO //#include#include〈>
ftdefine uchar unsigned char
ftdefine uint unsigned int
sbit dula二P2"6;
sbit wela二P2"7;
sbit keyl=P3"4;
sbit key2二P3"5;
sbit key3=P3*6;
sbit beep二P2"3;
unsigned code table[]={
0x3f , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d , 0x7d , 0x07 ,
0x7f , 0x6f , 0x77 , 0x7c,
0x39 , 0x5e , 0x79 , 0x71
};
uchar numl, num2, s, si, m, ml, f, fl, num, numf, nums, dingshi;
uchar ns, nsl, nf, nf 1, numns, numnf;
void delay(uint z);
void keyscan ();
void keyscanl ();
void alram(); void display(uchar m, uchar ml, uchar f, ucharf1, uchars,
ucharsl); void displayO(uchar nf, uchar nf1, uchar ns, uchar nsl); void main()
{
TMOD二0x01;//设定定时器0工作方式1
THO=(65536-46080)/256 ;
TLO=(65536-46080)%256 ;
EA二1;//开总中断
ETO=1;//开定时器0中断
TRO二1;//启动定时器0中断
numns=12;
numnf=0;
while (1)
{
if(dingshi==0)
{
keyscan ();
display (m, ml, f, fl, s, si);
alram();
else
keyscanl ();
displayO (nf, nf 1, ns, nsl);
}
}
}
void keyscan ()
if (keyl==0)
{
delay(10);
if(keyl==0)
nums++;
if (nums=:=24)
nums二0;
while (!keyl);
display (m, ml, f, fl, s, si); }
if(key2==0)
delay(10);
if (key2=0)
numf++;
if (numf==60)
numf=O;
while (!key2);
display(m, ml, f, fl, s, si);
}
if(key3==0)
{
delay (10);
if(key3==0)
{
dingshi二'dingshi;
while(!key3)
display(m, ml, f, fl, s, si);
}
}
/* if(key4=0)
{
delay (10);
if(key4==0)
flag二1;
while(!key4);
display (m, ml, f, fl, s, si);
}
}*/
}
void keyscanl()
{
if(keyl==0)
{
delay 仃0);
if(keyl==0)
numns++;
if (numns=24)
numns=0;
while (!keyl);
// display (nf, nf 1, ns, nsl);
if (key2=0)
delay (10);
if(key2==0)
numnf++;
if (numnf—60)
numnf=0;
while(!key2);
// display (nf, nf 1, ns, nsl);
}
if(key3==0)
{
delay 仃0);
if(key3==0)
{
dingshi^O;
wh订e(!key3);
display (m, ml, f, fl, s, si);
}
void alramO
if((numnf==numf)&&(numns二二nums))
beep二0;
if (((numnf+l=:numf) && (numns~nums)) && (dingshi—O)) // 一分钟报
时提示
beep=l;
}
void displayO (uchar nf, uchar nf 1, uchar ns, uchar nsl)//闹钟显示函数
{
nf=numnf%10;
nfl=numnf/10;
ns=:numns%10;
nsl 二numns./10;
/* wela=l;
P0=0xc0; //送位选数据
wela=0;
P0二Oxff;*/