蓝桥杯51单片机设计
#hc573问题#
一,问题发现:
在初始化hc573后,蜂鸣器与led灯是关闭状态的
当执行hc573(4)后,蜂鸣器响起,继电器打开
原因查询:
当在执行hc573(4)后,LSA,LSB,LSC三个引脚的数字发生变化
从101变成100,灯执行,却蜂鸣器继电器变化
问题解决:
LSC=1 LSB=0 LSA=0
P2: 111 7通道(打开)
LSC=1;
P2: 111 7通道(打开)
LSB=0;
P2: 101 5通道(打开) 蜂鸣器响起,继电器打开
LSA=0;
P2: 100 4通道(打开) 灯通道打开
在111后面,执行一次000,再执行100,就不会出现101
在display()函数最后,在数码管显示最后加一个hc573(0){LSA=LSB=LSC=0}
(因为先进行7通道,7通道为数码管显示通道)
但也只是治标不治本
治本方法:直接全部赋值
P2=0x80:1000 0000 (4通道)
P2=0xa0:1010 0000 (5通道)
P2=0xc0:1100 0000 (6通道)
P2=0xe0:1110 0000 (7通道)

和1&是保留效果,和0&是清除效果
可以先把高三位清0,低五位保留,再利用或运算
与1|是保留,与0|是清除
二,问题发现
当执行上面的问题解决方法后发现,led灯会微微发亮
原因查询:
当执行hc573初始化后,再执行led的相关设置,hc573(4)时,灯有微微亮起
LSA LSB LSC 三个引脚的数字变化从111编程100,灯执行
问题解决:
P2:1111 1111
P0:1100 0000
LSC=1;
P2:1111 1111
P0:1100 0000
LSB=0;
P2:1011 1111
P0:1100 0000
LSA=0;
P2:1001 1111
P0:1100 0000(灯L1~L6亮)
在111后面,执行一次000,就可以
在消隐函数的最后放入000模式
hc73(7)
P0=smg_number[]
hc573(0){P2&0x1f}
P0=0xff(关灯)
但解决方法治标不治本
最优解决方法
找出问题:
锁存器运作过程:
开锁存器
P0赋值
开锁存器
P0赋值
……
这样上一个P0值会影响下一个锁存器的打开方式
所以为我们的上一个解决方法是
开锁存器
P0赋值
关锁存器
P0=0xff全部关闭
开锁存器
……
这种发放要考虑好多因素
新的结构:
P0赋值
开锁存器
关锁存器
P0赋值
开锁存器
关锁存器
……
这种结构,对于锁存器无影响