单片机数码管显示时钟程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
//#include#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=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 num1,num2,s,s1,m,m1,f,f1,num,numf,nums,dingshi; uchar ns,ns1,nf,nf1,numns,numnf;
void delay(uint z);
void keyscan ();
void keyscan1 ();
void alram();
void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1); void display0(uchar nf,uchar nf1,uchar ns,uchar ns1);
void main()
{
TMOD=0x01;//设定定时器0工作方式1
TH0=(65536-46080)/256 ;
TL0=(65536-46080)%256 ;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0中断
numns=12;
numnf=0;
while(1)
{
if(dingshi==0)
{
keyscan ();
display(m,m1,f,f1,s,s1);
alram();
}
else
{
keyscan1 ();
display0(nf,nf1,ns,ns1);
}
}
}
void keyscan ()
{
if(key1==0)
{
delay(10);
if(key1==0)
nums++;
if (nums==24)
nums=0;
while(!key1);
display(m,m1,f,f1,s,s1);
}
if(key2==0)
{
delay(10);
if(key2==0)
numf++;
if (numf==60)
numf=0;
while(!key2);
display(m,m1,f,f1,s,s1); }
if(key3==0)
{
delay(10);
if(key3==0)
{
dingshi=~dingshi;
while(!key3)
display(m,m1,f,f1,s,s1);
}
}
/* if(key4==0)
{
delay(10);
if(key4==0)
{
flag=1;
while(!key4);
display(m,m1,f,f1,s,s1);
}
} */
}
void keyscan1()
{
if(key1==0)
{
delay(10);
if(key1==0)
numns++;
if (numns==24)
numns=0;
while(!key1);
// display(nf,nf1,ns,ns1); }
if(key2==0)
{
delay(10);
if(key2==0)
numnf++;
if (numnf==60)
numnf=0;
while(!key2);
// display(nf,nf1,ns,ns1);
}
if(key3==0)
{
delay(10);
if(key3==0)
{
dingshi=0;
while(!key3);
// display(m,m1,f,f1,s,s1);
}
}
}
void alram()
{
if((numnf==numf)&&(numns==nums))
beep=0;
if(((numnf+1==numf)&&(numns==nums))&&(dingshi==0))//一分钟报时提示
beep=1;
}
void display0(uchar nf,uchar nf1,uchar ns,uchar ns1)//闹钟显示函数
{
nf=numnf%10;
nf1=numnf/10;
ns=numns%10;
ns1=numns/10;
/* wela=1;
P0=0xc0;//送位选数据
wela=0;
P0=0xff;*/
dula=1;
P0=table[ns1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[ns]|0x80;