求助 80C51 单片机 数码管动态扫描
51单片机吧
全部回复
仅看楼主
level 6
bandaohoist 楼主
大家好,本人为新入门学习单片机,购买了郭天祥老师学习板用于学习,在学到数码管动态扫描时自己写了个程序,
题:利用动态扫描方法在六位数码管上显示出稳定的654321
但是在运行时出现如下问题:
第一个数码管显示0和6,第二个数码管显示6和5,第三个数码管显示5和4,第四个数码管显示4和3,第五个数码管显示3和2,第六个数码管显示2和1,每个数码管会延时显示2个数字,然后跳到下一个数码管,依次循环;
请大神指出程序中存在问题,在此表示感谢程序如下
#include<reg52.h>
#define uint unsigned int//宏定义
#define uchar unsigned char//宏定义
uchar a,num;//定义变量
sbit duan=P2^6;//数码管段选锁存器控制I/O口
sbit wei=P2^7;//数码管位选锁存器控制I/O口
uchar code table[]={//数码管段选ROM 存储区数据(6.5.4.3.2.1)
0x7d,0x6d,0x66,0x4f,0x5b,0x06};
uchar code tablewei[]={//数码管位选ROM存储区数据(1.2.3.4.5.6)
0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
void delay(uint z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
wei=1;//选择第一个数码管
P0=tablewei[num];
wei=0;
delay(5);
duan=1;//第一个数码管发送数据
P0=table[num];
duan=0;
P0=0xff;
delay(5);
num++;//
if(num==6)
num=0;
}
}
2017年03月30日 02点03分 1
level 1
应该是num==7.如果用stm8的话,在线调试一下就明白了。51虽然简单,不能在线调试很操蛋。
2017年03月30日 15点03分 3
level 1
还有你num没有置初值,写vc程序的话是很不好的习惯
2017年03月30日 15点03分 4
犯懒了呵呵
2017年03月31日 03点03分
1