51单片机-数码管显示
1.静态数码管
数码管原理图:
共阳极数码管需要给低电平数码管才会点亮,共阴极数码管需要给高电平才会点亮。在数码管的中的字码a代表低位,dp代表高位,也就是a代表(2^0) dp代表(2^7)。
共阴极显示16进制所有数字代码:
0: 0x3F ( abcdef = 0011 1111 )
1: 0x06
2: 0x5B
3: 0x4F
4: 0x66
5: 0x6D
6: 0x7D
7: 0x07
8: 0x7F
9: 0x6F
A: 0x77
B: 0x7C
C: 0x39
D: 0x5E
E: 0x79
F: 0x71
(2)数码管锁存模块:
为了方便数据存储需要将数码管数据进行锁存,锁存分为2种:位锁存,段锁存。
位锁存:在单片机数码管中有8位,需要使用芯片来锁存中要显示的具体哪一位数码管。在上面的芯片中是用来锁存位的,WE1代表低位,WE8代表高位。在位锁存中低电平有效。
74HC537芯片介绍:芯片中锁存开关位LE引脚,高电平开启锁存,低电平锁住数据。芯片的其他功能还有中继信号等作用。
锁存使用第二行,中继信号使用第一行。
段锁存:下面那个芯片代表段锁存,段锁存作用是锁住具体要在数码管中显示的数据。列如:我们将位锁存锁住以后就要开启P2-6引脚下面的段锁存,虽然两个芯片D段引脚在单片机中使用的相同,但是位锁存已经被锁存在第一个芯片之中,修改引脚数据不会发生变化,但是段选与位选的锁存引脚是不相同的。
#include <REGX52.H>
#define unsigned int uint;
#define unsigned int uint;
sbit duan = P2^6;//高电平有效,当开启段选以后可以控制数码管中那一根数码管
sbit wei = P2^7; //高电平有效,当开启位选可以控制8位数码管显示那一位
void main(){
//显示哪一个数码管
wei = 1; //打开位选,修改显示的数码管
P0 = 0xFD;// 1111 1101 低电平有效 让第二位数码管显示
wei = 0;//进行数据锁存
//数码管中具体显示的内容
duan = 1;
P0 = 0x5B;//0-9:0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
duan = 0;
}
2.动态数码管显示
动态数码管的思想是将静态数码管进行封装,然后修改显示的数据。
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
sbit duan =</