单片机STC89C52学习——10 静态数码管
汇总:00 单片机STC89C52学习
参考教程:普中科技
1 工作原理
1.1 显示器及其接口
单片机系统中常用的显示器有:
- 发光二极管LED(Light Emitting Diode)显示器
- 液晶LCD(Liquid Crystal Display)显示器
- TFT液晶显示器等
LED显示器有两种显示结构:
- 段显示(7段、米字型等)
- 点阵显示(5×8、8×8点阵等)
1.2 8段LED数码管
共阴(本开发板使用) | 共阳 |
---|---|
共阴数码管码表(0~F):
0x3f , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d , 0x7d , 0x07 ,
0x7f , 0x6f , 0x77 , 0x7c ,
0x39 , 0x5e , 0x79 , 0x71 ,
0x00 无显示
静态显示原理:
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码(若要显示8个数字则需要8*8=64个IO口控制)。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。
1.3 74H573锁存器
- OE为使能端:低电有效
- LE为锁存端:
当LE为高电平时,Q0 ~ Q7与D0 ~ D7状态相同;
当LE为低电平时,Q0 ~ Q7锁存数据,无论D0 ~ D7如何变化,Q0 ~ Q7保持不变
2 程序:静态数码管——控制1个数码管显示1个数字
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define LED P0// 段选
sbit LSA = P2^2;// 38译码器的位选
sbit LSB = P2^3;
sbit LSC = P2^4;
//sbit LE = P1^0;// 锁存器的锁存端
u8 code LEDSeg[] = { 0x3f , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d , 0x7d , 0x07 ,
0x7f , 0x6f , 0x77 , 0x7c ,
0x39 , 0x5e , 0x79 , 0x71 , 0x00};// 定义数组,并保存到flash中,否则在data中
void main()
{
LSA = 1; LSB = 1; LSC = 0;// 38译码器控制LED1为低,选中LED1,1110 0011
// LE = 1;// 高电平开放
LED = LEDSeg[0];// 显示0
while (1);
}
效果:经测试位选没问题,段选总是显示"8."即0xff,暂未找到原因。结果第二天下载同样的程序,可以在正确的位显示正确的数字了,然后一会儿又不能了(图中改了位选)...