我的數碼管電子鐘什么都沒問題了,可就是按鍵調時間時,一按下按鍵整個頻就黑了,松開又亮了,而且功能也都實現了,就是按下按鍵時會黑一下,請問各位大佬是怎么回事呢???????我在板子上實現的,應該是我的程序不完善,下面是我的程序。。。。。希望各位大佬幫忙解答下。。。。。
單片機源程序如下:
- #include<reg51.h>
- typedef unsigned int u16;
- typedef unsigned char u8;
- u8 ms0;
- u8 sec;
- u8 min;
- u8 hour;
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit k1=P3^1;
- sbit k2=P3^0;
- sbit k3=P3^2;
- sbit k4=P3^3;
- u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
- void delay(u8 i)
- {
- i--;
- }
- void keyscan();
- void display();
- void main()
- {
- P0=0X00;
- TMOD|=0X01;
- TH0=(65536-49960)/256;
- TL0=(65536-49960)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- display();
- }
-
- }
- void display()
- {
- while(1)
- {
- LSA=0;LSB=0;LSC=0;
- P0=smgduan[sec%10];
- delay(2);
- P0=0x00;
- LSA=1;LSB=0;LSC=0;
- P0=smgduan[sec/10];
- delay(2);
- P0=0x00;
- LSA=0;LSB=1;LSC=0;
- P0=0x40;
- delay(2);
- P0=0x00;
- LSA=1;LSB=1;LSC=0;
- P0=smgduan[min%10];
- delay(2);
- P0=0x00;
- LSA=0;LSB=0;LSC=1;
- P0=smgduan[min/10];
- delay(2);
- P0=0x00;
- LSA=1;LSB=0;LSC=1;
- P0=0x40;
- delay(2);
- P0=0x00;
-
- LSA=0;LSB=1;LSC=1;
- P0=smgduan[hour%10];
- delay(2);
- P0=0x00;
- LSA=1;LSB=1;LSC=1;
- P0=smgduan[hour/10];
- delay(2);
- P0=0x00;
- }
- }
- void T0_time() interrupt 1
- {
- TH0=(65536-49960)/256;
- TL0=(65536-49960)%256;
- ms0++;
- if(ms0>=20)
- {
- ms0=0;
- sec++;
- if(sec>=60)
- {
- sec=0;
- min++;
- if(min>=60)
- {
- min=0;
- hour++;
- if(hour>=20)
- hour=0;
- }
- }
- }
- keyscan();
- }
- /*void digdisplay()
- {
- switch(a)
- {
- case(0):
- LSA=0;LSB=0;LSC=0;break;
- case(1):
- LSA=0;LSB=0;LSC=1;break;
- case(2):
- LSA=0;LSB=1;LSC=0;break;
- case(3):
- LSA=0;LSB=1;LSC=1;break;
- case(4):
- LSA=1;LSB=0;LSC=0;break;
- case(5):
- LSA=1;KSB=0;LSC=1;break;
- case(6):
- LSA=1;LSB=1;LSC=0;break;
- case(7):
- LSA=1;LSB=1;LSC=1;break;
- }
- } */
- void keyscan()
- {
- if(k1==0)
- {
- delay(5);
- if(k1==0)
- {
- min--;
- if(min>=60)
- min=0;
- }
- while(!k1);
- }
- if(k2==0)
- {
- delay(5);
- if(k2==0)
- {
- min++;
- if(min>=60)
- min=0;
- }
- while(!k2);
- }
- if(k3==0)
- {
- delay(5);
- if(k3==0)
- {
- hour--;
- if(hour>=24)
- hour=0;
- }
- while(!k3);
- }
- if(k4==0)
- {
- delay(5);
- if(k4==0)
- {
- hour++;
- if(hour>=24)
- hour=0;
- }
- while(!k4);
- }
- }
復制代碼
所有資料51hei提供下載:
數碼管.zip
(24.99 KB, 下載次數: 5)
2018-8-7 23:36 上傳
點擊文件名下載附件
|