10 静态数码管

2018-03-25  本文已影响0人  aaa小菜鸡

单片机STC89C52学习——10 静态数码管

汇总:00 单片机STC89C52学习
参考教程:普中科技

1 工作原理

1.1 显示器及其接口

单片机系统中常用的显示器有:

LED显示器有两种显示结构:

1.2 8段LED数码管

8段数码管
共阴(本开发板使用) 共阳

共阴数码管码表(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锁存器

  1. OE为使能端:低电有效
  2. 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,暂未找到原因。结果第二天下载同样的程序,可以在正确的位显示正确的数字了,然后一会儿又不能了(图中改了位选)...
上一篇下一篇

猜你喜欢

热点阅读