设计目标是:用DW0.1.2.3.4.5。空档和 1.2.3.4.5档。在DW1——DW2——DW3——DW4——DW5时,按加档或者减档键,档位正常加减。 在,一档DW1亮时按(加档)键,和,二挡DW2时按(减档)键,就会归为空档DW0亮。在空挡DW0时,按加档键应该DW2亮为2档;按减档键则DW1亮为1档。实际情况是:有时候按一下加档键会加两个档位,按一下降档键会减两下档位。主要的是1和2档到空档 有时候需要按很多次对应按键他才变化,还有就是空档到1一般正常 ,但是到2档这里总会出现问题,有时直接跳的三挡,或者一档。。。跟预想的完全不一样。
/************************************************************
控制名称:档位检测与显示
控制要求:1、用数码管显示各个档位。
2、利用4个接近传感器。
输入信号:脉冲信号(离散)。
检测方式:检测动作,来区分不同的档位。
*************************************************************/
- #include<reg52.h>
- sbit key=P3^4;//右
- sbit key1=P3^7;//左
- sbit key2=P3^5;//中右
- sbit key3=P3^6;//中左
- sbit key4=P3^0;//档位归空
- sbit k1=P2^0;
- sbit k2=P2^1;
- sbit k3=P2^2;
- sbit k4=P2^3;
- sbit k5=P2^4;
- sbit k6=P2^5;
- void delay3(unsigned char a)
- {
- unsigned char b,c;
- for(a;a>0;a--)
- for(b=100;b>0;b--)
- for(c=100;c>0;c--);
- }
- void delay(unsigned char a)
- {
- unsigned char b,c;
- for(a;a>0;a--)
- for(b=100;b>0;b--)
- for(c=100;c>0;c--);
- }
- void main()
- {
- unsigned char i,a=1,d=0,r,num;
- P3=0xff;
- P2=0x01;
- P1=0x00;
- while(1)
- {
- if(key4==0){delay(10);k6=0;}
- else
- {
- if(key==0){delay(10);if(a<5)a=a+1;else a=5;}else a=a;
- //if(key1==0)delay(10);
- if(key1==0){delay(10);if(a>1)a=a-1;else a=1;}else a=a;
- //if(key2==0)delay(10);
- if(key2==0)delay(10);
- if(key2==0){delay(10);if(a==1)d=1;else d=0;}
- if(key3==0)delay(10);
- if(key3==0){delay(10);if(a==2)d=1;else d=0;}
- if(a==1)k1=0;else k1=1;
- if(a==2)k2=0;else k2=1;
- if(a==3)k3=0;else k3=1;
- if(a==4)k4=0;else k4=1;
- if(a==5)k5=0;else k5=1;
- if(a==r){k6=0;}else k6=1;
- if(d==1){delay(10);{if(key==0){a=2;d=0;} else if(key1==0){a=1;d=0;}else {a=r;}}}
- //if(d==1){delay(10);for(i=100;i>0;i--){if(key1==0){a=1;d=0;} else{a=r;}}}
- }
- }
- }
复制代码
|