C语言对单片机编程的问题(一道题)

来源:百度知道 编辑:UC知道 时间:2024/05/26 11:37:37
编的程序是按一个键按一下就显示1,不按就什么也不显示,再按一下显示2.
请看下下面这段程序,为什么我的程序出来后明明只开了1个数码管,这个数码管显示乱码,而且其他数码管也亮。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f}; //数码管从0到9
sbit key1=P3^4; //按键
sbit duan=P2^6; //数码管位选
sbit wei=P2^7; //数码管段选
void main()
{
while(1)
{

P3=0xff; //按键接口置为高电平
if(key1==0)
{
num++;
wei=1;
P0=0xfe;
wei=0;
duan=1;
P0=table[num];
duan=0;

}
else
{
wei=1;
P0=0xff;
wei=0;

duan=1;
P0=0x00;
duan=0;
}

}

}
请详细说明一下哪个地方错了?为什么错?谢谢!

P3 = 0xff; //按键接口置为高电平
if(key1 == 0) //有键按下
{
num++; //数字疯长
wei = 1;
P0 = 0xfe; //P0.0 = 0 ,仅一位发光
wei = 0;
duan = 1;
P0 = table[num]; // num如果超过9,table[num]越界
duan = 0;
}
else //无键按下
---------------------------------
缺少按键消抖,按键值num缺少上限检测...

真的很乱

你是刚学吧,很乱啊

这个需要看看你的硬件图了 乱码可能是编码不正确