angmall 发表于 2022-9-1 08:00 ![]() ![]() ![]() |
haiyang201 发表于 2022-9-2 08:02 不锁存,P0怎么复用分别控制段码和位码?你有什么高招分享出来。 |
也感谢你 ![]() |
名字不是重点 发表于 2022-9-1 11:06 他应该不需要锁存 只是当驱动提供电流用 |
angmall 发表于 2022-9-1 08:00 特别感谢你 ![]() ![]() ![]() |
调试成功!太感谢了![]() ![]() ![]() ![]() |
angmall 发表于 2022-9-1 18:48 所以,573是电平触发锁存,在LE高电平之前,数据必需先准备好: P0=data; // 先备好数据 LE=1; // LE高电平时,锁存使能,P0口数据(即data)被存入573内部, //如果OE被接地,573此时的输出将会是data;OE是高则573输出高阻 LE=0; // LE低电平时,锁存失能,573内部的数据不再受到P0口电平的影响,即保持原数据 而574是边沿触发锁存,(在CP的上升沿,将D的状态传到Q),所以574要这样(类似74HC595): CP=0; // 拉低CP P0=data;//传数据 CP=1; //拉高CP,产生一个上升沿 如果是这样: P0=data;//传数据 CP=0; // 拉低CP //// //可能在此处产生中断 CP=1; //拉高CP,产生一个上升沿 也可以,但代码不强壮,无法保证在CP=0之后的某种中断,改变P0的值,当中断恢复后的CP=1,锁存了错误的数据 |
名字不是重点 发表于 2022-9-1 11:06 如果你比较 LE 和 CP 两个 Pin 你会发现它们是完全不同的,74HC573 只需要一个高电平来激活 D 锁存器,而 74HC374 需要一个低到高电平的时钟来锁存 D 触发器。 573:“当 LATCH ENABLE (LE) 引脚为高电平时,Q 输出跟随 D 输入。当 LE 变为低电平时,D 输入端的数据将保留在输出端” 574:“D 输入的数据......在 CLOCK (CK) 输入的正向转换时传输到 Q 输出。” |
![]()
|
谢谢各位了 |
zhxiufan 发表于 2022-9-1 11:02 “。。。。先送位码,再送段码。。。。。” 不用消隐的话,你显示12345678时, 显示第1位“1”之后,第2位在刷显时也会显示“1”,之后才显示“2”。 你分析一下~或单步跟踪一下就能看出来了。 |
angmall 发表于 2022-9-1 08:00 你这个代码,我在Proteus中运行,显示 乱码。。 因为573的LE是高电平触发锁存的,所以,你这个时序有点不对: WE = 1; //运行之后 //这时573已发生锁存,存的是上一次的LEDPort值 LEDPort = wei[0]; //这个值要等到WE或DU为1时才会被锁存。 WE = 0; DU = 1; //按逻辑,这个运行过后LEDPort = wei[0];会被锁存到段驱573里 LEDPort = duan[ 1]; //而这个值会被锁存到下一位的位驱573中。 DU = 0; delay(2); 欢迎探讨~~ |
只要共阴共阳没有弄错,先送位码,再送段码,就会正确显示,不用消隐也可以的。 |
你的位码不对
|
让你把代码或工程发上来也不做。。。。 也就是我闲的蛋疼,才会花时间画图、敲代码、仿真了。。 这个是Proteus8.13的仿真工程,你看一下。 ![]() |
无语了~~~~这么个问题连续发了这么多贴。 你的代码 有问题! 1、573的OE脚本来是为消隐而生的,你把它接地了。代码中的消隐又是错的! 2、573的LE脚是电平触了,不是边沿触发,所以你的时序也有问题! 这个是匹配你电路图的代码,可以正常显示,你试试:
|