#include <reg51.h> unsigned char code seg_duan[] = {0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char code seg_wei[] = {0xfe,0xfd,0xfb,0xf7}; unsigned char num=0; sbit key1=P3^0; sbit key2=P3^1; //sbit le=P2^0; void delay(unsigned int k) { unsigned int i,j; for(i=0;i<k;i++) { for(j=0;j<121;j++) {;} } } void keyscan() { if(key1==0) { delay(10); if(key1==0) { while(!key1); num++; if(num>99) { num=0; } } } if(key2==0) { delay(10); if(key2==0) { while(!key2); if(num==0) num=99; else num--; } } } void display(unsigned char i) { P2=seg_wei[0]; P0=seg_duan[i%10]; delay(5); P2=0xff; P2=seg_wei[1]; P0=seg_duan[i/10]; delay(5); } main() { while(1) { keyscan(); display(num); } }我需要在这段代码修改成以前设计的两位加减计数器,按键按下时,数码管上的数值不显示。现在要求按键按下时,不影响数码管上数值的显示。
时间: 2023-11-30 13:03:39 浏览: 124
要实现按键按下时,不影响数码管上数值的显示,可以使用一个变量flag来控制。当按键按下时,flag的值为1,此时不更新num的值,直到按键松开才更新num的值。
下面是修改后的代码:
```c
#include <reg51.h>
unsigned char code seg_duan[] = {0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char code seg_wei[] = {0xfe,0xfd,0xfb,0xf7};
unsigned char num=0, flag = 0; // 添加flag变量,初始值为0
sbit key1=P3^0;
sbit key2=P3^1;
//sbit le=P2^0;
void delay(unsigned int k) {
unsigned int i,j;
for(i=0;i<k;i++) {
for(j=0;j<121;j++) {
;
}
}
}
void keyscan() {
if(key1==0) {
delay(10);
if(key1==0) {
while(!key1);
flag = 1; // 按键按下时,将flag设为1
num++;
if(num>99) {
num=0;
}
}
}
if(key2==0) {
delay(10);
if(key2==0) {
while(!key2);
flag = 1; // 按键按下时,将flag设为1
if(num==0)
num=99;
else
num--;
}
}
}
void display(unsigned char i) {
P2=seg_wei[0];
P0=seg_duan[i%10];
delay(5);
P2=0xff;
P2=seg_wei[1];
P0=seg_duan[i/10];
delay(5);
}
main() {
while(1) {
keyscan();
if(!flag) // 如果flag为0,则更新数值
display(num);
flag = 0; // 每次循环结束时,将flag设为0
}
}
```
阅读全文