我想向您请教下51单片机驱动数码管显示出现乱码的问题,加我的QQ87734375
发布网友
发布时间:2022-05-11 20:04
我来回答
共3个回答
热心网友
时间:2023-10-18 16:27
只要 仿真 没事,那肯定是硬件连接问题,数码管分 1位的、2位的、4位的,接线方法就不一样
如 4个1位的连接,2个2位的连接,1个4位就和你仿真连接一样了。
当然要分清 a b c d e f g h(点),只要有一个错了 显示就乱了。
位选问题不大,最多顺序不对。追问连接没问题,现在就担心程序问题,但仿真没事所以就不淡定了,方便的话留个邮箱我发给你帮忙查一下,谢谢啦~!
追答只要 仿真 没事, 就要看硬件,只有看硬件连接才能解决问题。
热心网友
时间:2023-10-18 16:27
数码管的问题,在我看来,不如写一条类似P0=0x00 0xff看看是否是全亮 或者全灭。如果是的话,再写P0=000 0001B 按数码管的段,挨个试试,看看哪个位出现问题,没问题的话,再去看程序。至于什么动态显示,那是水到渠成的事情,先挨个试试数码管的段与P0口的一一对应关系,其实数码管这种里面就是led,所以没必要纠结。
热心网友
时间:2023-10-18 16:28
你的这个不是乱码就有问题了!~
你仔细理解一下这段
void wr595(uchar dat)
{
uchar a;
for(a=8;a>0;a--)
{
SH_CP=0;
DS=dat&0x80;
dat<<=1;
SH_CP=1;
_nop_();
_nop_();
SH_CP=0;
_nop_();
_nop_();
SH_CP=1;
}
}
你的for循环是有问题的
以为你的每个字节移了多次
所以就乱码了
void wr595(uchar dat)
{
uchar a;
for(a=8;a>0;a--)
{
SH_CP=0;
DS=dat&0x80;
dat<<=1;
SH_CP=1;
_nop_();
_nop_();
}
}
你看看下面的
去掉一个追问仿真没事,但是焊接实物出来就是乱码,管脚连线检查N次了,并且从新焊了一次还是不行,数码管的8位也测过了,求秒杀!!!
追答74LS164适合于驱动共阳的数码管,输出低电平时,LED发光。
驱动共阴的数码管,需要在各个段,加上高电平。
74LS164虽然可以输出高电平,但是输出电流很小,达不到驱动LED发光的地步。
换用74HC164试试,应该可以的。
9号引脚,正常工作时,应该接高电平。接低电平,就清零了。