//本数字钟以24时制显示。其中独立按钮S19(P3^2)为调时开始按钮;S1(P1^0)为调秒;S5(P1^1)为调分;
// S9(P1^2)为调时;S12(P1^3)为确定;
//采用晶振为110592 //
#include <reg51h>
sbit sb1=P1^0;
sbit sb2=P1^1;
sbit sb3=P1^2;
sbit sb4=P1^3;
sbit dd=P1^4;
code w[8]={0,1,2,3,4,5,6,7};
code LED[11] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned int z,k,t,n,b,v,c;
void m(float i)
{
unsigned int x,j;
for(j=0;j<i;j++)
for(x=0;x<=100;x++);
}
void main()
{
TMOD=0X01;
TH0=(65336-45872)/256;
TL0=(65336-45872)/256;
EA=1;
ET0=1;
TR0=1;//定时器中断//
IT0=1;
EX0=1; //按键中断//
dd=0;
while(1)
{
EX0=1;
P0=LED[z];
P2=w[7];
m(1);
P0=LED[t];
P2=w[6];
m(1); //秒
P2=w[5];
P0=LED[10];
m(1); //间隔线
P0=LED[n];
P2=w[4];
m(1);
P0=LED[b];
P2=w[3];
m(1); //分
P2=w[2];
P0=LED[10];
m(1); //间隔线
P0=LED[v];
P2=w[1];
m(1);
P0=LED[c];
P2=w[0];
m(1); //时
if(z==10)
{
z=0;
t++;
}
if(t==6)
{
t=0;
n++;
} //秒判断
if(n==10)
{
n=0;
b++;
}
if(b==6)
{
b=0;
v++;
} //分判断
if(v==10)
{
v=0;
c++;
}
if(c==2)
if(v==4)
{
c=0;
v=0;
n=0;
b=0;
n=0;
t=0;
z=0;
} //时判断
}
}
void tt() interrupt 1 //定时器中断服务函数
{
TH0=(65336-45872)/256;
TL0=(65336-45872)/256;
k++;
if(k==20)
{
k=0;
z++;
}
}
void KEY() interrupt 0 //按键中断服务函数
{
while(1)
{
if(sb1==0) //调秒按键
{
sb1=1;
z++;
m(200);
if(z==10)
{
z=0;
t++;
if(t==6) t=0;
}
}
if(sb2==0) //调分按键
{
sb2=1;
n++;
m(200);
if(n==10)
{
n=0;
b++;
if(b==6) b=0;
}
}
if(sb3==0) //调时按键
{
sb3=1;
v++;
m(200);
if(v==10)
{
v=0;
c++;
}
if(c==2)
if(v==4)
{
c=0;
v=0;
}
}
P0=LED[z]; //数码管显示
P2=w[7];
m(1);
P0=LED[t];
P2=w[6];
m(1);
P2=w[5];
P0=LED[10];
m(1);
P0=LED[n];
P2=w[4];
m(1);
P0=LED[b];
P2=w[3];
m(1);
P2=w[2];
P0=LED[10];
m(1);
P0=LED[v];
P2=w[1];
m(1);
P0=LED[c];
P2=w[0];
m(1);
if(sb4==0) break; //确定按钮
}
EX0=0;
}1程序写好之后首先要编译成HEX或者BIN文件才能烧录到单片机中。2如果是EPROM或者OTP的单片机,那只能烧录好之后再焊接到应用的电路板上。事实上现在的单片机都支持在线编程,就是说你把单片机焊接在电路板上了一样可以烧录(或者)修改其中的程序。如果单片机支持Bootloader,那更好,就像计算机软件升级一样,在单片机使用的过程中都能对其烧写程序!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)