單片機按鍵實驗,有兩個問題想請教
1.如圖,只有8多了一個小點,但是不知道代碼如何改才能去掉小點?
2.獨立按鍵k3,k4沒有反應,只有1,2可以控制,代碼如何改。代碼放在這里,感謝。
51hei圖片_20211109185136.jpg (326.79 KB, 下載次數: 28)
下載附件
2021-11-9 18:51 上傳
51hei圖片_20211109185142.jpg (340.25 KB, 下載次數: 16)
下載附件
2021-11-9 18:52 上傳
單片機源程序如下:
- #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);
- }
- }
- }
復制代碼
|