51单片机学习--第三章 数码管显示原理及应用实现

标签:
it |
分类: 51单片机学习 |
第三章 数码管显示原理及应用实现
§3.1 数码管显示原理
★ 共阴极数码管编码
符号 |
编码 |
符号 |
编码 |
0 |
0x 3f |
8 |
0x7f |
1 |
0x06 |
9 |
0x6f |
2 |
0x5b |
10 |
0x77 |
3 |
0x4f |
11 |
0x7c |
4 |
0x66 |
12 |
0x39 |
5 |
0x6d |
13 |
0x5e |
6 |
0x7d |
14 |
0x79 |
7 |
0x07 |
15 |
0x71 |
★ C语言编程时,编码定义方法如下:
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
上面unsigned char 是数组类型,也就是数组中元素变量类型,table是数组名,我们可以自由定义它,但是不要和关键字重名;table后面必须加中括号[],等号右边用一个大括号包含所有的元素,大括号后面加一个分号,大括号内部元素与元素之间用逗号隔开,注意,最后一个元素后面不要加逗号。
调用数组方法如下:
即将table这个数组中的第4个元素直接赋给P0口,即
★ 锁存器(74HC573)
http://s2/mw690/002YfyShty6Mvv9KIZb81&690数码管显示原理及应用实现" TITLE="51单片机学习--第三章
:三态允许控制端(低电平有效),通常叫做输出使能端,或输出允许端都可以
1D~8D:数据输入端
1Q~8Q:数据输出端
LE:锁存允许端,或叫锁存控制端
§3.2 数码管静态显示
当多位数码管应用于某以系统时,他们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字必定一样,数码管的这种显示方法叫做静态显示。
下面我们就用C语言写一段程序,先让第一个共阴数码管显示一个8字。
1、只打开第一个数码管的位选
2、(U1锁存器控制控制段选、U2锁存器控制位选)
位选,给U2锁存器的锁存端一个高电平,然后将数据0xfe(二进制为1111 1110)从单片机的P0口直接送出到锁存器U2的数据输出端,然后再关闭U2锁存器
段选,用操作U2的方法给U1的数据输出端再送出一个数据0x7f(二进制为0111 1111)
例:3.2.1 让第一个数码管显示一个8字
◤
#include
sbit dula=P2^6;
sbit wula=P2^7;
void main()
{
}
◣
例3.2.2 让实验板上6个数码管同时点亮,依次显示0到f,时间间隔为1s,循环下去
◤
#include
#define uchar unsigned char
#define uint unsigned int
sbit FM=P2^3;
sbit 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 delayms(uint);
void main()
{
}
void delayms(uint xms)
{
}
◣
§3.3 数码管动态显示
数码管的动态显示又叫数码管的动态扫描显示。
所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快人眼已经无法分辨出来。
下面我们来看例子
例子3.3.1 第一个数码管显示1,时间由0.5s缩短到1ms,然后关闭它,立即让第二个数码管显示2,时间为1ms,在关闭它……一直到最后一个数码管显示6,时间同样为1ms,关闭它后再回来显示第一个数码管,一直循环下去
◤
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
void main()
{
dula=1;
P0=table[1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(1);
dula=1;
P0=table[2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(1);
dula=1;
P0=table[3];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(1);
dula=1;
P0=table[4];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);
dula=1;
P0=table[5];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(1);
dula=1;
P0=table[6];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(1);
}
}
void delayms(uint xms)
{
}
◣