第一次编了这么一段关于51单片机控制直流电机正反转并对进出车辆进行计数的程序,从刚开始写到现在已经改了好多次但是这回问题是实物现在对电机控制基本没问题,但计数部分数码管没办法按预期效果正常示数,甚至除了一开始的00以外都不会显示正常的数字,想请教一下该怎么去修改。
具体单片机程序如下
- 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;
- }
- }
复制代码 |