程序中段码是共阳的,可显示程序中位控却是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();//等待按键释放
}
}
}
仿真结果如下
上传后程序太混乱了,根本无法阅读
晚上回家帮你找原因啊