最近喜欢上了单片机,课程设计做的是STM32的触屏版的万年历。之前一直在专注的学习C语言还有Java,话说这Java居然是在学完Android之后才去深入学的,自己也是醉了。课程设计做起了跟硬件搭点边的东西,真是深感其牛(*)之处(自动屏蔽不雅用词)。此处请各位玩儿硬件长大的,模电电路工程师,数电工程师接下我的各种崇拜。。。你们太牛(*)了。。。
好了,言归正传:
手里有一套别人送给我的 MSP430 LanchPad,总是想着不能就那么浪费了,从某宝买来了一些外设,先拿个LED开刀了。
盗张图,无意做宣传,请忽略
串行输入4位LED。输入:Vcc,GND就不说了;SCLK,更新显示。RCLK,数据移位。DIO,数据位。
也看到了,真正的数据线只有三根。
硬件原理图如下图所示:
U1与U2都是74HC595芯片,U2作为段选(用于选择当前是哪一个数码管显示),U1作为片选(用于控制数码管
上的LED显示数字)。
工作原理:
1)首先读入8位的数字字模数据,依次移位,现在U2已经保存了数字数据。
2)再次录入8位的段选数据,用来控制当前数字由几号数码管显示。
此时,U2保存的是段选数据,而刚刚的片选数据已经通过U2的Q7‘依次传到了U1上。
3)更新显示数据。
例程:
RCLK上升沿触发,将DIO口数据向寄存器中移位。
SCLK上升沿触发,将寄存器中数据读入锁存器,也就是更新显示内容了。
每次只显示一个数码管上的数字,多次遍历刷新。我们就看到了四位不变的数字。
下面的程序代码我已经实现了一个时钟功能,但是还没有添加调整时间的功能,大家可以自己研究一下。
更新:目前已经实现了通过一个按键的长按与短按来调整时间。由于本文主要是让大家理解串行LED屏的工作原理,故不再上传更新后的代码。有需要的亲联系我吧。