要求:
四个数码管同时显示,当按下第一个按键时,四个数码管不变(同样显示原来的数字),当松开按键后,第一个数码管数字加1,其他数码管不变(一直显示,不会闪动),以此类推。
代码如下,欢迎各位大佬指教!
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define duan P0
- sbit k1=P3^4;
- sbit k2=P3^5;
- sbit k3=P3^6;
- sbit k4=P3^7;
- sbit wei1=P2^4;
- sbit wei2=P2^5;
- sbit wei3=P2^6;
- sbit wei4=P2^7;
- uint a,b,c,d;
- uint e=0;
- uchar code sz[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void timer1_init()
- {
- TMOD=0x10;
- TH1=(65535-45827)/256;
- TL1=(65535-45827)%256;
- EA=1;
- ET1=1;
- TR1=1;
- }
- void stop()
- {
- EA=0;
- ET1=0;
- TR1=0;
- }
- void start()
- {
- EA=1;
- ET1=1;
- TR1=1;
- }
- void delay(uint t)
- {
- uint i,j;
- for(i=t;i>0;i--)
- for(j=112;j>0;j--);
- }
- void display(uint a,uint b,uint c,uint d)
- {
- wei1=1;
- wei2=0;
- wei3=0;
- wei4=0;
- duan=sz[a];
- delay(1);
- P0=0XFF;
-
- wei1=0;
- wei2=1;
- wei3=0;
- wei4=0;
- duan=sz[b];
- delay(1);
- P0=0XFF;
- wei1=0;
- wei2=0;
- wei3=1;
- wei4=0;
- duan=sz[c];
- delay(1);
- P0=0XFF;
- wei1=0;
- wei2=0;
- wei3=0;
- wei4=1;
- duan=sz[d];
- delay(1);
- P0=0XFF;
- }
-
- void timer1() interrupt 3
- {
- TH1=(65535-45827)/256;
- TL1=(65535-45827)%256;
- if(k1==0)
- {
- delay(10);
- if(k1==0)
- {
- stop();
- wei1=1;
- wei2=0;
- wei3=0;
- wei4=0;
- duan=sz[a];
- while(k1==0);
- while(!k1);
- a++;
- if(a>9)
- a=0;
-
-
- }
- }
- if(k2==0)
- {
- delay(10);
- if(k2==0)
- {
- stop();
- wei1=0;
- wei2=1;
- wei3=0;
- wei4=0;
- duan=sz[b];
- while(k2==0);
- while(!k2);
- b++;
- if(b>9)
- b=0;
-
- }
- }
- if(k3==0)
- {
- delay(10);
- if(k3==0)
- {
- stop();
- wei1=0;
- wei2=0;
- wei3=1;
- wei4=0;
- duan=sz[c];
- while(k3==0);
- while(!k3);
- c++;
- if(c>9)
- c=0;
-
- }
- }
- if(k4==0)
- {
- delay(10);
- if(k4==0)
- {
- stop();
- wei1=0;
- wei2=0;
- wei3=0;
- wei4=1;
- duan=sz[d];
- while(k4==0);
- while(!k4);
- d++;
- if(d>9)
- d=0;
-
- }
- }
- start();
- }
- void main()
- {
- timer1_init();
- a,b,c,d=0;
- while(1){
- display(a,b,c,d);
- }
- }
复制代码
|