|
第一次編了這么一段關(guān)于51單片機(jī)控制直流電機(jī)正反轉(zhuǎn)并對(duì)進(jìn)出車輛進(jìn)行計(jì)數(shù)的程序,從剛開(kāi)始寫到現(xiàn)在已經(jīng)改了好多次但是這回問(wèn)題是實(shí)物現(xiàn)在對(duì)電機(jī)控制基本沒(méi)問(wèn)題,但計(jì)數(shù)部分?jǐn)?shù)碼管沒(méi)辦法按預(yù)期效果正常示數(shù),甚至除了一開(kāi)始的00以外都不會(huì)顯示正常的數(shù)字,想請(qǐng)教一下該怎么去修改。
具體單片機(jī)程序如下
- typedef unsigned int u16;
- sbit X=P1^0;
- sbit Y=P1^1;
- sbit in3=P1^2;
- sbit in4=P1^3;
- sbit xingcheng1=P1^4;
- sbit xingcheng2=P1^5;
- sbit led=P1^6;
- sbit gs=P0^0;
- sbit gg=P0^1;
- u8 i;
- u8 k;
- u16 sum;
- u8 code smgduan[]={0xde,0x88,0x5d,0x9d,0x8b,0x97,0xd7,0x8c,
- 0xdf,0x9f};
- unsigned int g,s;
- void delay(u16 z)
- {
- while(z--);
- }
- void main()
- {
- i=2;
- k=1;
- sum=0;
- while(1)
- {
- s=sum/10;
- g=sum%10;
- P2=smgduan[g];
- gg=0;
- gs=1;
- delay(77);
- P2=smgduan[s];
- gs=0;
- gg=1;
- delay(77);
- if((X==0||Y==0)&&X!=Y)
- {
- in3=1;in4=0;
- k++;
-
- if(xingcheng1==0&&k==2)
- {
- in3=0;in4=0;
- k=1;
- }
- if(X==0&&Y==1)
- {
- i--;
- }
- if(X==1&&Y==0)
- {
- i++;
- }
-
- if(X!=Y)
- {
- switch(i)
- {
- case(1):
- {
- if(X==1&&Y==0)
- {
- sum++;break;
- }
- }
- case(3):
- {
- if(X==0&&Y==1)
- {
- sum--;break;
- }
- }
- }
- }
- if(X==1&&Y==1)
- {
- in3=0;in4=1;
- k--;
-
- if(xingcheng2==0&&k==0)
- {
- in3=0;in4=0;
- k=1;
- }
- }
- if(sum<=20)
- led=0;
- if(sum>=20)
- led=1;
- }
- i=2;
- }
- }
復(fù)制代碼 |
|