|
程序寫了大半天啊,終于搞定了,雖然在 大俠們看來, 實在是小兒科。,但是對于我一個業余愛好者,程序的設計沒參照任何人的結構,就能寫出來 對于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;
}
}
|
|