数码管

第一次用单片机的三个IO来控制串行数码管模块输出八位数字.

该模块的原理是利用2片74HC595级联实现控制8个数码管,一个控制显示哪一位数码管,一个控制显示什么数字.

这个图是百度百科上的74HC595的芯片引脚图.我们可以看到VCC和GND接电源,左边七个和右边那个Q0一共八个引脚用来输出,ST_CP,SH_CP,DS用来输入,MR保持低高电平,OE接地,如果需要级联,那么第一级的Q7'需要接第二级的DS,ST_CP和SH_CP共用即可.

时序图如下图:

(随便找的一张图)

大家看到这个时序图肯定会喷死我,这TM是个什么玩意,我来形象地讲解一下大致原理。 首先是数据怎么传入的。这里面的原理是一根数据线,一根时钟线,时钟线一旦从低到高(或者从高到低),我们就记录一次数据线上的电平高低,然后往里面压一位数据。比如我想传输10101010,我就首先让数据位输出0,然后让时钟线从低到高,再从高到低,也就是输出10,然后0就会被记录下来,然后我再依次推入1,0,1,0…… 数据就是这样变化的: 0 10 010 1010 01010 101010 0101010 10101010 然后数据就传输完毕了。 那么数据传输完毕之后,还要输出,我就把第三根线叫做更新线吧,更新线也10(高电平低电平)一次,那么芯片的八个引脚就会按照储存器里面的数据输出。如果没有这个更新的步骤,输出就不会变。你说我能不能不要这个更新,让他时刻都更新啊,那样的话除非你输入的00000000,只要有1就会在数据中来回游动,数码管就会八个led都亮了。视觉暂留现象。

其实这只是数据在芯片之间传输的一种方法,还一种很普遍的方法叫串口,它就没有时钟线什么的,只有两根线,一根输出一根输入(全双工),数据传输速度是一开始就商量好了的,之后我传输过去的东西你就按照时间去算,这个优点很明显,节省io,原理简单,缺点也明显,速度慢,一位错了就全错了。