单片机按键实验,有两个问题想请教
1.如图,只有8多了一个小点,但是不知道代码如何改才能去掉小点?
2.独立按键k3,k4没有反应,只有1,2可以控制,代码如何改。代码放在这里,感谢。
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit DU = P2^6;//数码管段选
- sbit WE = P2^7;//数码管段选
- sbit key_s2 = P3^0;//独立按键S2
- sbit key_s3 = P3^1;//独立按键S3
- sbit key_s4 = P3^2;//独立按键S4
- sbit key_s5 = P3^3;//独立按键S5
- sbit beep=P2^3;
- uchar num;//数码管显示的值
- //共阴数码管段选表0-9
- uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
- uchar i;
- //毫秒级延时函数定义
- void delay(uint z)
- {
- uint x,y;
- for(x = z; x > 0; x--)
- for(y = 114; y > 0 ; y--);
- }
- void main()
- {
- WE = 1;//打开位选锁存器
- P0 = 0XFE; //1111 1110
- WE = 0;//锁存位选数据
-
- while(1)
- {
- if(key_s2 == 0)//判断S2是否被按下
- {
- delay(20);//按键消抖
- if(key_s2 == 0)
- {
- if(num != 9)//如果值不等于9则+1,功能把值限定为小于9
- num++;
- while(!key_s2);//松手检测
- }
- }
- if(key_s3 == 0)//判断S3是否被按下
- {
- delay(20);//按键消抖
- if(key_s3 == 0)
- {
- if(num > 0) //如果大于0则执行减一
- num--;
- while(!key_s3);//松手检测
- }
- }
- //松手之后刷新显示
- DU = 1;//打开段选锁存器
- P0 = tabel[num];//
- DU = 0;//锁存段选数据
- if(key_s4==0)//判断S3是否被按下
- {
- delay(20); //按键消抖
- if(key_s4==0)
- {
- //while(key_s4==0)//按下S3时循环这个LED灯
- while(key_s2==1&&key_s3==1&&key_s5==1)//按下S3时循环这个LED灯
- {
- P1=0x7e;
- delay(150);
- P1=0xbd;
- delay(150);
- P1=0xdb;
- delay(150);
- P1=0xe7;
- delay(150);
- P1=0x00;
- delay(150);
- }
- while(key_s2==0||key_s3==0||key_s5==0); //松手检测
- {
- P1=0xff;
- }
- }
-
-
- }
- if(key_s5==0)
- {
- delay(20);
- if(key_s5==0)
- {
- beep=0;
- }
- while(!key_s5);
- }
- }
- }
复制代码
|