1. 数码管显示原理
a为共阴极,b为共阳极
2. 静态与动态显示
静态显示 每个数码管的选段必须接入一个8位的数据线来保持显示字形码。当输入一次字形码后显示字形可以一直保持,直到输入新的字形码为止。
动态显示 将所有数码管的段选并联在一起,由位选控制,控制那个数码管有效。亮的数码管采用动态扫描方式。轮流向各位数码管送出字形码和对应位选,利用发光管的余晖和人肉眼的残留,使人们感觉数码管都在显示
3. 74HC573锁存器的工作原理
锁存器的作用:把数据输入端与输出端进行隔离或连接
OE端需要接地,才能让输出口Q有高低电平的转换
LE脚高,输出端Q随输入端D的数据变化而变化 LE脚低,输出端Q数据保持不变,输入端D数据变化不会改变Q数据
4. 上拉电阻的作用
上拉就是将一个不确定的信号,通过一个电阻,控制在高电平,电阻同时起限流作用。下拉同理,变为低电平。
P0作为输入输出口,上电复位处于开漏模式。P0内部无上拉电阻,所以IO必须作为外接10K-4.7K的上拉电阻这是常识
开漏模式:可以输出低电平,无法输出高电平
P1,P2,P3准双向,P0开漏
场效应管
Gate 栅极 Source 源极 Drain 漏极
只有GS有正向电压才会导通。
5. 原理图分析
可以看出DO-D7对应P0.0-P0.7,因此D0低位,D7高位
举例: 让阴极数码管显示1。0000 0110
从原理图可以看出,一组P0的IO口控制了8位数码管
U9电路图,19线出A连接数数码管的a,数码管的a脚,控制4位数码管的a,19-11线的原理相同分别对应,a,b,c,d,e,f,g,dp
6. 实践编程
编程思路: U8控制选择那位亮,U9控制选择亮的数字
U8需要得到P0的数据后,无论P0是否改变都不变换亮的数码管的位置,因此LE需要低电平
U9需要得到P0数据后,P0改变就变换数码管数据因此LE需要高电平。
共阴极 段选:共阴的原因,电平为1,亮 位选:WEI是阴极,所以要接到GND上面,电平为0,接到GND上面,才选择该位
静态
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DUAN = P2^6;
sbit WEI = P2^7;
void main()
{
WEI = 1; //打开位选
P0 = 0XFE; //选择第一位
WEI = 0; //关闭位选
DUAN = 1;
P0 = 0X06; //选择
DUAN = 0;
while(1)
{
}
}
动态
数组概念 数组是一组有序数据的集合,数组中每一个数据都是同一个数据类型。
定义格式如下
数据类型 数组名[常量表达式] = {元素表}; []中数字可以不写 可以在table前面加 code ,加上code表示存放在ram中,程序运行后无法改变,不加code表示存放在data区,程序运行可以改变 unsigned char table[3] = {0X3F, 0X06, 0X5B,};
P0 = table[0]; 0X3F
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DUAN = P2^6;
sbit WEI = P2^7;
//显示数据 0123456789
uchar table[] = {0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
//延时
void delay(uint i)
{
uint j, k;
for(j=i;j>0;j--)
for(k=114;k>0;k--);
}
// 显示函数 (选择位, 选择段数字, 延时时长)
void show(uchar i, uchar j, uchar k)
{
P0 = 0XFF;//清除段选
WEI = 1;
P0 = i;
WEI = 0;
DUAN = 1;
P0 = table[j];
DUAN = 0;
delay(k);//视觉残留
}
//显示数据 3位数字
void display(uchar i)
{
uchar a, b, c;
a = i / 100;
b = i % 100 /10;
c = i % 10;
show(0XFE, a, 5);
show(0XFD, b, 5);
show(0XFB, c, 5);
}
void main()
{
while(1)
{
display(182);
}
}
|