标题: 51单片机驱动74hc595点亮一个led灯 [打印本页]

作者: tksj906470593    时间: 2017-12-13 18:47
标题: 51单片机驱动74hc595点亮一个led灯
请教一下lf(0!=(led8_one&0x80))   DATE_HC595=1  else DATE_HC595=0中if里面是什么意思啊led8_one与上0x80实在看不懂,为什么可以这样与的?

作者: HC6800-ES-V2.0    时间: 2017-12-14 09:23
本帖最后由 HC6800-ES-V2.0 于 2017-12-14 10:50 编辑

同学,你没有看看595的芯片手册吧。
我来给你解释一下:
第一:595芯片功能是:串行数据(1位)输入转并行数据(8位)输出,即只有一位I/O口输入,而输出有8位I/O口,俗称“串转并”。
第二:595芯片每得到一位数据,它的移位寄存器都会向高位移动一位,即:要先传送高位数据
第三:根据以上知识,可以解释你的程序了!
①我可以肯定,led_one是一个unsigned char数据类型,它有8位
②DATE_HC595就是595芯片那“串”的那一位
③怎样判断led_one的最高1位是1或是0,从而赋值给DATE_HC595呢?
如:led_one=10111100,它与0x80=10000000,与运算就是“有零得零”,则结果是10000000,不是零,则赋DATE_HC595=1,正确啊,led_one高位是1啊。
led_one向左移位后,led_one=01111000,它再与0x80,则结果是00000000,是零,则赋值DATE_HC595=0,正确啊,led_one高位是零嘛。
程序循环8次,这个led_one的值就一位一位地进入到595,最后一次性输出。

同学,我猜你没有把0x80十六进制数与计算机二进制数联系起来吧!
其实还不止这一种算法的,我至少知道两种,但我很喜欢这一种,很明确、有把握感。

作者: tksj906470593    时间: 2017-12-14 17:36
HC6800-ES-V2.0 发表于 2017-12-14 09:23
同学,你没有看看595的芯片手册吧。
我来给你解释一下:
第一:595芯片功能是:串行数据(1位)输入转并行 ...

您真是大神啊!这么多人查看过我的贴,只有您才才有能力回复给我,也只有这种解释方式让我理解了这条语句,真的我在网上查看过很多了也发贴寻问过,了,在买吴鉴鹰开发板群里问过,没有像您这种解说的,自己确实看过74hc595的工作方式努力学过,没有转过这个弯,我得非常感谢您!以后在学51单片机路上还望您多多指教!!!

作者: 5151dpj    时间: 2019-1-25 19:43
这里面的Led8_One是定值吗,还是随机的
作者: 5151dpj    时间: 2019-1-25 19:54
Led8_One是定值吗,还是就是一个变量不固定
作者: Gerage    时间: 2019-2-15 17:39
HC6800-ES-V2.0 分析的不错
作者: 小玺    时间: 2019-3-12 08:41
HC6800-ES-V2.0 发表于 2017-12-14 09:23
同学,你没有看看595的芯片手册吧。
我来给你解释一下:
第一:595芯片功能是:串行数据(1位)输入转并行 ...

讲的太好了,点赞
作者: ealoo    时间: 2019-7-7 09:29
HC6800-ES-V2.0 发表于 2017-12-14 09:23
同学,你没有看看595的芯片手册吧。
我来给你解释一下:
第一:595芯片功能是:串行数据(1位)输入转并行 ...

理解透澈,还能讲的简单易懂,同样受教,感谢
作者: 小玺    时间: 2020-2-25 02:13
HC6800-ES-V2.0 发表于 2017-12-14 09:23
同学,你没有看看595的芯片手册吧。
我来给你解释一下:
第一:595芯片功能是:串行数据(1位)输入转并行 ...

我有回来看一遍你的讲解,你咋讲的这么好呢摩拜




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1