单片机学习笔记(三)——数码管显示
LED显示器的接法:
(1)共阴极
(2)共阳极
共阴极 共阳极
七段数码管加上一个小数点,共计 8 段。因此为LED显示器提供的编码正好是一个字节。TX 实验板用共阴 LED显示器,根据电路连接图显示 16 进制数的编码已列在下表。
| 0x3f |
0x06 |
0x5b |
0x4f |
0x66 |
0x6d |
| 0 | 1 | 2 | 3 | 4 | 5 |
| 0x7d |
0x07 |
0x7f |
0x6f |
0x77 |
0x7c |
| 6 | 7 | 8 | 9 | a | b |
| 0x39 |
0x5e |
0x79 |
0x71 |
0x00 |
|
| c | d | e | f | 无显示 |
LED数码显示方式及电路:
(1)静态显示方式
特点:每个数码管的段选必须接一个 8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
优点:占用CPU时间少,显示便于监测和控制。
缺点:硬件电路比较复杂,成本较高。
(2)动态显示方式
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示(即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示)。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
LED数码显示程序(C 语言):
#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit 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);}