1. 数码管的显示器及其接口
单片机系统中 常用的显示器有: 发光二极管LED显示器、液晶LCD显示器、TFT液晶显示器。本文主要是关于LED显示器的说明。
LED显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5x8、8x8点阵等)。
LED数码管根据接法可以分为共阴和共阳。
如下图中,左边是共阴接法,右边是共阳接法。共阴表示8个led的阴极接到一起,共阳是8个led的阳极接到一起。
显示数字或字符时需要编码。如果是共阴接法,那么a/b/c/d/e/f/g/dp为高电平时对应的led就会亮,编码0~F分别是:
2. 数码管静态显示原理
LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入依次字形码后,显示字形可一直保持,知道送入新字形码为止,这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。
如下为proteus仿真静态数码管,共阳极,显示0.
typedef unsigned char u8;
// code保存数据到寄存器中 共阴极码表
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
#define LCDP1 P1
void show_LCD_static_P1()
{
LCDP1 = (~segment[0])&0x7f; // 共阳极显示
while(1){}
}
3. 数码管动态显示原理
动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。点亮数码管采用动态扫描显示。松台扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以选择限流电阻时应该略小于静态显示电路中的。
4. 操作实践
如下是普中51-单核-A2板子上的数码管模块原理图,可以看到,右上有8个数码管用来显示字符,这8个数码管一端分别与LED1~LED8连接,另一端与P0口连接,所以通过控制P0口来显示我们需要的字符;LED1~LED8通过74HC138译码器与P2^2、P2^3、P2^4连接,这三个IO口控制是哪一个LED可以显示。
静态数码管显示,第一个数码管显示字符F
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
#define LCD P0
typedef unsigned char u8;
// code保存数据到寄存器中
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
void show_LCD_static()
{
// LED1显示字符F
P22 = 1;
P23 = 1;
P24 = 1;
P0 = segment[15];
while(1){}
}
显示结果:
动态数码管显示,从第一个数码管开始依次显示0,1,2,3,4,5,6,7
#include "LCD.h"
#include "reg51.h"
#include "delay.h"
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
#define LCD P0
typedef unsigned char u8;
// code保存数据到寄存器中
u8 code segment[] = {0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
void show_P0_0()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:
P22 = 1; P23 = 1; P24 = 1; break;
case 1:
P22 = 0; P23 = 1; P24 = 1; break;
case 2:
P22 = 1; P23 = 0; P24 = 1; break;
case 3:
P22 = 0; P23 = 0; P24 = 1; break;
case 4:
P22 = 1; P23 = 1; P24 = 0; break;
case 5:
P22 = 0; P23 = 1; P24 = 0; break;
case 6:
P22 = 1; P23 = 0; P24 = 0; break;
case 7:
P22 = 0; P23 = 0; P24 = 0; break;
}
P0 = segment[i];
delay_ms(500); // delay.h中的延时函数
P0 = 0;
}
}
显示结果:
文章来源:https://www.toymoban.com/news/detail-476591.html
上图的连接中左边的数码管1对应的是74HC138的15pin,即Y0,也就是74HC138的ABC都是0的时候输出对应的是Y0,正好对应的是代码中P22=P23=P24=0时,显示7.文章来源地址https://www.toymoban.com/news/detail-476591.html
到了这里,关于【单片机】【数码管】数码管显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!