单片机学习笔记(三)——数码管显示
扫描二维码
随时随地手机看文章
LED显示器的接法:
(1)共阴极
(2)共阳极
共阴极 共阳极
七段数码管加上一个小数点,共计 8 段。因此为LED显示器提供的编码正好是一个字节。TX 实验板用共阴 LED显示器,根据电路连接图显示 16 进制数的编码已列在下表。
0x3f
0x06
0x5b
0x4f
0x66
0x6d
0123450x7d
0x07
0x7f
0x6f
0x77
0x7c
6789ab0x39
0x5e
0x79
0x71
0x00
cdef无显示
LED数码显示方式及电路:
(1)静态显示方式
特点:每个数码管的段选必须接一个 8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
优点:占用CPU时间少,显示便于监测和控制。
缺点:硬件电路比较复杂,成本较高。
(2)动态显示方式
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示(即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示)。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
LED数码显示程序(C 语言):
#include
#define uint unsigned int
#define uchar unsigned char
sbit dula = P2 ^ 6;//段选
sbit wela = P2 ^ 7;//位选
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);//延时
int main()
{
wela = 1;//11101010 打开锁存器
P0 = 0xea; //选择LED数码管
wela = 0; //锁住LED数码管
while(1)
{
for(num = 0; num < 16; num++)
{
dula = 1; //打开锁存器
P0 = table[num]; //数值编码
dula = 0; //锁住LED显示
Delay(1000); //延时1s
}
}
return 0;
}
void Delay(unsigned int xx) //输入 xx :ms
{
while(xx--)
{
Delay1ms();
}
}
void Delay1ms()//@11.0592MHz 1ms
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}