本实验主要是了解51单片机和数码管连接的硬件电路图以及软件编程操作。
目录:
硬件电路:
1.数码管锁存器模块:
74HC573的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。
引脚功能和芯片真值表:
简单来说,当使能端OE'接低电平时,锁存器工作(故在电路设计时直接将使能端OE'与GND相连)。此时若锁存器锁存控制端LE为高,则数据输出端与数据输入端电平同步,当锁存控制端LE转为低电平,无论数据输入端电平高低,数据输出端的电平仍然保持与上次LE为高时的电平。
两个锁存器就是可以将一组八位I/O口当做十六位使用,解决了数码管对I/O口使用过多的问题。
两个锁存器一个控制每一位数码管的段码,即数码管所显示的数值;另一个控制八位数码管的显示位数。
2.八位共阴数码管:
一个锁存器Q0 ~ Q7连接整个八位数码管的WE1 ~ WE8,控制八位数码管显示的位数;
另一个锁存器Q0 ~ Q7连接整个八位数码管的两组A ~ F,控制每一位数码管显示的数值。
八位共阴数码管由两片四位共阴数码管组成
一位共阴数码管详细电路图
程序代码
1.数码管静态显示
原理分析:
数码管显示需要确定一位数码管显示的数值和八位数码管显示的位数。
其中要控制一位数码管中A-G和DP共8个led显示单元和8位数码管。
所以我们用两片锁存器将一组8位I/O口扩展为两组8位即16位,其中一片控制每一位数码管显示的数字,将其锁存控制端LE命为DULA(代码中定义为du),其中一片控制八位数码管显示的位数,将其锁存控制端LE命为WELA(代码中定义为we)。
由此我们便可以确定八位数码管显示哪几位并且显示什么数字了。
另外,在使每一位数码管显示数字时,我们需要给一组I/O口赋值。例如显示数字0,我们会使a,b,c,d,e,f灯点亮,因为是共阴数码管,所以点亮给高电平,即“du”锁存器锁存00111111,用十六进制表示为0x3f。以此类推,我么可以把数码管显示的数字以数组形式存储在单片机程序储存其中,数组下标即为对应的显示数字,方便使用。
数码管静态显示由锁存器输出端将I/O电平锁定输出。
代码实现:
八位数码管全部静态显示数字0
代码如下:
2.数码管动态显示
原理分析:
数码管动态显示是分时显示,main函数中代码在一个循环中执行,数码管由程序动态扫描显示。利用人眼的视觉暂留的特点,仿佛数码管是同时显示一样。
代码实现:
数码管动态显示数字12
代码如下:
3.代码运行效果图