|
現(xiàn)在數(shù)碼管最初狀態(tài)全為0,我想一開(kāi)始不顯示,按下矩陣按鈕顯示對(duì)應(yīng)的數(shù),然后再按下矩陣按鍵前一個(gè)數(shù)左移后面顯示新的數(shù)字,需要如何改進(jìn)。
單片機(jī)C語(yǔ)言源程序如下:
- #include"reg51.h"
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- #define GPIO_KEY P1
- #define GPIO_DIG P0
- u16 a,b,c;
- u16 KeyValue;
- u16 keyflag,i;
- u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
- u8 dat[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
- u16 wei[8]={0};
- void delay(u16 i)
- {
- while(i--);
- }
- void display()
- {
- LSA=0; LSB=0; LSC=0; GPIO_DIG=smgduan[wei[0]];delay(50); GPIO_DIG=0x00;
- LSA=1; LSB=0; LSC=0; GPIO_DIG=smgduan[wei[1]];delay(50); GPIO_DIG=0x00;
- LSA=0; LSB=1; LSC=0; GPIO_DIG=smgduan[wei[2]];delay(50); GPIO_DIG=0x00;
- LSA=1; LSB=1; LSC=0; GPIO_DIG=smgduan[wei[3]];delay(50); GPIO_DIG=0x00;
- LSA=0; LSB=0; LSC=1; GPIO_DIG=smgduan[wei[4]];delay(50); GPIO_DIG=0x00;
- LSA=1; LSB=0; LSC=1; GPIO_DIG=smgduan[wei[5]];delay(50); GPIO_DIG=0x00;
- LSA=0; LSB=1; LSC=1; GPIO_DIG=smgduan[wei[6]];delay(50); GPIO_DIG=0x00;
- LSA=1; LSB=1; LSC=1; GPIO_DIG=smgduan[wei[7]];delay(50); GPIO_DIG=0x00;
- }
- void KeyDown(void)
- {
- u16 a=0;
- GPIO_KEY=0x0f;
- if(GPIO_KEY!=0x0f)
- {
- delay(1000);
- if(GPIO_KEY!=0x0f)
- {
- GPIO_KEY=0x0f;
- switch(GPIO_KEY)
- {
- case(0X07): KeyValue=9;break;
- case(0X0b): KeyValue=8;break;
- case(0X0d): KeyValue=7;break;
- case(0X0e): KeyValue=20;break;
- }
- GPIO_KEY=0xf0;
- switch(GPIO_KEY)
- {
- case(0X70): KeyValue=KeyValue;break;
- case(0Xb0): KeyValue=KeyValue-3;break;
- case(0Xd0): KeyValue=KeyValue-6;break;
- case(0Xe0): KeyValue=KeyValue-9;break;
- }
-
- if(KeyValue==0 || KeyValue==1 || KeyValue==2 || KeyValue==3 || KeyValue==4 || KeyValue==5 || KeyValue==6 || KeyValue==7 || KeyValue==8 || KeyValue==9)
- {
- keyflag=1;
- }
- while((a<50)&&(GPIO_KEY!=0xf0))
- {
- delay(1000);
- a++;
- }
- }
- }
- }
- void main()
- {
- u16 a=0,b=0,c=0;
- while(1)
- {
- display();
- KeyDown();
- if(keyflag==1)
- {
- for(i=7;i>0;i--)
- {
- wei[i]=wei[i-1];
- }
- wei[0]=KeyValue;
- keyflag=0;
- }
- else if(KeyValue==-1)
- {
- for(i=0;i<8;i++)
- wei[i]=0;
- display();
- }
- else if(KeyValue==20)
- {
- a=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- for(i=0;i<8;i++)
- wei[i]=0;
- while(1)
- {
- display();
- KeyDown();
- if(KeyValue==-2) break;
- if(keyflag==1)
- {
- for(i=7;i>0;i--)
- {wei[i]=wei[i-1];}
- wei[0]=KeyValue;
- keyflag=0;
- }
- }
- b=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- c=a+b;
- wei[0]=c%10;
- wei[1]=c/10%10;
- wei[2]=c/100%10;
- wei[3]=c/1000%10;
- wei[4]=c/10000%10;
- wei[5]=c/100000%10;
- wei[6]=c/1000000%10;
- wei[7]=c/10000000%10;
- display();
- }
- else if(KeyValue==17)
- {
- a=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- for(i=0;i<8;i++)
- wei[i]=0;
- while(1)
- {
- display();
- KeyDown();
- if(KeyValue==-2) break;
- if(keyflag==1)
- {
- for(i=7;i>0;i--)
- {wei[i]=wei[i-1];}
- wei[0]=KeyValue;
- keyflag=0;
- }
- }
- b=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- if(a>=b)
- {
- c=a-b;
- wei[0]=c%10;
- wei[1]=c/10%10;
- wei[2]=c/100%10;
- wei[3]=c/1000%10;
- wei[4]=c/10000%10;
- wei[5]=c/100000%10;
- wei[6]=c/1000000%10;
- wei[7]=c/10000000%10;
- }
- if(a<b)
- {
- u16 e=0;
- c=b-a;
- wei[0]=c%10;
- wei[1]=c/10%10;
- if(wei[1]==0)
- {
- wei[1]=16;
- e=1;
- }
- wei[2]=c/100%10;
- if(wei[2]==0 && e==0)
- {
- wei[2]=16;
- e=1;
- }
- wei[3]=c/1000%10;
- if(wei[3]==0 && e==0)
- {
- wei[3]=16;
- e=1;
- }
- wei[4]=c/10000%10;
- if(wei[4]==0 && e==0)
- {
- wei[4]=16;
- e=1;
- }
- wei[5]=c/100000%10;
- if(wei[5]==0 && e==0)
- {
- wei[5]=16;
- e=1;
- }
- wei[6]=c/1000000%10;
- if(wei[6]==0 && e==0)
- {
- wei[6]=16;
- e=1;
- }
- wei[7]=c/10000000%10;
- if(wei[7]==0 && e==0)
- {
- wei[7]=16;
- e=1;
- }
- }
- display();
- }
- else if(KeyValue==14)
- {
- a=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- for(i=0;i<8;i++)
- wei[i]=0;
- while(1)
- {
- display();
- KeyDown();
- if(KeyValue==-2) break;
- if(keyflag==1)
- {
- for(i=7;i>0;i--)
- {wei[i]=wei[i-1];}
- wei[0]=KeyValue;
- keyflag=0;
- }
- }
- b=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- c=a*b;
- wei[0]=c%10;
- wei[1]=c/10%10;
- wei[2]=c/100%10;
- wei[3]=c/1000%10;
- wei[4]=c/10000%10;
- wei[5]=c/100000%10;
- wei[6]=c/1000000%10;
- wei[7]=c/10000000%10;
- display();
- }
- else if(KeyValue==11)
- {
- a=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- for(i=0;i<8;i++)
- wei[i]=0;
- while(1)
- {
- display();
- KeyDown();
- if(KeyValue==-2) break;
- if(keyflag==1)
- {
- for(i=7;i>0;i--)
- {wei[i]=wei[i-1];}
- wei[0]=KeyValue;
- keyflag=0;
- }
- }
- b=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;
- c=a/b;
- wei[0]=c%10;
- wei[1]=c/10%10;
- wei[2]=c/100%10;
- wei[3]=c/1000%10;
- wei[4]=c/10000%10;
- wei[5]=c/100000%10;
- wei[6]=c/1000000%10;
- wei[7]=c/10000000%10;
- display();
- }
- }
- }
復(fù)制代碼 |
|