|
程序写了大半天啊,终于搞定了,虽然在 大侠们看来, 实在是小儿科。,但是对于我一个业余爱好者,程序的设计没参照任何人的结构,就能写出来 对于0基础学员来说还是很兴奋的哈,请求 共同爱好单片机的朋友给我指点指点,,
#include<reg52.h>
#define smg P0 //数码管显示 段
sbit LSA=P2^2; //数码管位选
sbit LSB=P2^3;//数码管位选
sbit LSC=P2^4; //数码管位选
void csh(); //初始化声明
unsigned int a, b,c,d,e,f,js,j,o;
#define ke P1 //键盘接口
unsigned char kee; //存放键盘 键值
void ys(unsigned int c) ;//延时声明
void kep (void); //键盘声明
unsigned char kk; //检测按键是否按下
void xsss(); //数码管显示声明
unsigned char code sz[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//按键1 调 分的个位 按键2调分的十位,按键3调时的个位 按键4调时的十位;
unsigned char u[17];
void main(void)
{ csh();
while(1){ kep(); xsss();
if(o==10){b++;o=0;}
if(b==6) {c++;b=0;}
if(c==10){d++;c=0;}
if(d==6){e++;d=0;}
if(e==10){f++;e=0;}
if(f==2&&e==4){o=0;b=0;c=0;d=o;e=0;f=0;}
if(kk==1)
{ TR0=0;
switch(kee)
{ case(1):d++;break;
case(2):c++;if(c==9){c=0;} break;
case(3):e++; break;
case(4):f++;if(f==2){f=0;}break;
} } kk=0;TR0=1;
}
}
void csh() //初始化函数
{ f=0;e=0;d=0;c=6;b=0;o=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void zd() interrupt 1 //定时ET0的中断函数
{
TH0=(65536-49972)/256;
TL0=(65536-49972)%256;
js++; if(js==20){o++;js=0;} //如果此条 不放在中断里,有可能因为程序在执行其他程序而超过20,if语句就检测不到js=20了也就不执行此语句;无法为js置0了,js有可能持续增加,
}
void ys(unsigned int c)
{
unsigned char a,b;
for(b=c;b>0;b--)
for(a=60;a>0;a--);
}
void kep(void) //键盘函数
{
char a=0;
ke=0x0f;
if(ke!=0x0f){
ys(30);
if(ke!=0x0f){ kk=1;
switch(ke)
{
case(0x07):kee=0;break;
case(0x0b):kee=1;break;
case(0x0d):kee=2;break;
case(0x0e):kee=3;break;
}
ke=0xf0;
switch(ke)
{
case(0x70):kee=kee;break;
case(0xb0):kee=kee+4;break;
case(0xd0):kee=kee+8;break;
case(0xe0):kee=kee+12;break;
}
while((a<50)&&(ke!=0xf0))
{ ys(50);
a++;
}
}
}
}
void xsss() //数码管 动态显示函数
{ switch(0)
{
case(0):
LSA=0;LSB=1;LSC=0; smg=sz[10]; // -
j=10;
while(j--);
smg=0x00;
LSA=1;LSB=0;LSC=1;smg =sz[10]; // -
j=10;
while(j--);
smg =0x00;
LSA=0;LSB=0;LSC=0;smg =sz[o]; // 秒
ys(1);
smg=0x00;
LSA=1;LSB=0;LSC=0; smg=sz[b]; //秒的十位
ys(1);
smg =0x00;
LSA=1;LSB=1;LSC=0;smg =sz[c];//分的个位
ys(1);
smg =0x00;
LSA=0;LSB=0;LSC=1; smg=sz[d]; // 分的十位
ys(1);
smg =0x00;
LSA=0;LSB=1;LSC=1; smg=sz[e]; // 小时的个位
ys(1);
smg=0x00;
LSA=1;LSB=1;LSC=1; smg=sz[f]; // 小时的十位
ys(1);
smg =0x00;
}
}
|
|