51单片机按键计数器图和程序有问题找不出来

2025年03月22日 16:25
有3个网友回答
网友(1):

程序中段码是共阳的,可显示程序中位控却是0有效,应该是1有效才对。3个按键,用 sbit 定义三个按键就行了,判断按键更简单,根本用不着写两个子程序来判断按键,搞那么复杂干啥,结果还不行吧。

修改后的程序如下:只保留一小部分。

#include

sbit k1=P1^4;

sbit k2=P1^5;

sbit k3=P1^6;

sbit k4=P1^7;

unsigned char code LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码表

unsigned char data display[4];

unsigned char k_count;

void delay(unsigned char m)//把延时子程序放在前面,就不用先声明了

{

while(m--)

{

unsigned char i=225;

while(i--);

}

}

void disp_count()//显示子程序也放在前面

{

display[2]=k_count/100;  //计算百位

display[1]=k_count/10%10;//计算十位

display[0]=k_count%10;   //计算个位

P2 = 0x10; //位控为1有效,仿真要求先输出位控码

P0 =LEDData[display[0]] ; //显示个位

delay(1);

P2 = 0x20;

P0 =LEDData[display[1]]; //显示十位

delay(1);

P2 = 0x40;

P0 =LEDData[display[2]]; //显示百位

delay(1);

P2 = 0x00; //关闭显示

}

void main(void)

{

while(1)

{

disp_count();

if(k1==0)//k1按下

{

k_count++;

while(k1==0)disp_count();//等待按键释放时,调显示子程序,避免数码管灭掉

}

if(k2==0)//k2按下

{

k_count--;

while(k2==0)disp_count();//等待按键释放

}

if(k4==0)//k4按下

{

k_count=0;

while(k4==0)disp_count();//等待按键释放

}

}

}

仿真结果如下

网友(2):

上传后程序太混乱了,根本无法阅读

网友(3):

晚上回家帮你找原因啊