第 3 章 数码管显示
DESCRIPTION
第 3 章 数码管显示. 3.1 概述. 3.1.1 LED 数码管简介. 对于 0.5 吋(对角线尺寸) LED 数码管,每段对应一个发光管. 3.1.2 数字和字符的数码管显示图样. 3.1.3 共阳和共阴数码管. 共阳极:点亮时加高电平. 共阴极:点亮时加低电平. 段码:高电平驱动. 段码:低电平驱动. 3.2 数码管显示. 3.2.4 静态显示和动态显示. 静态显示 每个数码管有独立的驱动电路,亮度高电路复杂,编程容易。. 3 位共阳极数码管静态显示. 公共极直接接 +5V 电源. 独立的段码驱动电路. - PowerPoint PPT PresentationTRANSCRIPT
第 3 章 数码管显示 3.1 概述3.1.1 LED 数码管简介
对于 0.5 吋(对角线尺寸) LED 数码管,每段对应一个发光管
3.1.2 数字和字符的数码管显示图样
1 2 3 4
A
B
C
D
4321
D
C
B
ATitle
Number RevisionSize
A4
Date: 24-Jul-2012 Sheet of File: D:\C51_JIA_MA\½ÌѧÓõç·ͼ.Ddb Drawn By:
com
a
b
c
d
e
f
g
dp
com
a
b
c
d
e
f
g
dp
3.1.3 共阳和共阴数码管
共阳极:点亮时加高电平
共阴极:点亮时加低电平
段码:高电平驱动段码:低
电平驱动
1 2 3 4
A
B
C
D
4321
D
C
B
ATitle
Number RevisionSize
A4
Date: 24-Jul-2012 Sheet of File: D:\C51_JIA_MA\½ÌѧÓõç·ͼ.Ddb Drawn By:
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED1
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED2
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED31 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
+5V
3.2.4 静态显示和动态显示 3.2 数码管显示
静态显示每个数码管有独立的驱动电路,亮度高电路复杂,编程容易。
独立的段码驱动电路
3位共阳极数码管静态显示
公共极直接接 +5V 电源
(在“串口应用”讲解 )
3.2.4 静态显示和动态显示
动态显示 所有数码管的段码共有一套驱动电路采用扫描显示。亮度稍低,电路简单,编程复杂, CPU 实时扫描显示占用 CPU 的时间。
以 4位共阳极数码管动态显示为例
▶视频
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
一个扫描周期
共阳极数码管动态显示“ 1234”的过程(位扫描)
送 1的段码送 2的段码送 4的段码送 3的段码
消隐——扫描切换时,先灭掉“当前显示的数码管”,然后送下一位的段码,再点亮下一位数码管
使用公共教室,必须先下课,再上课,有一个
“间隙”,否则会怎样?
1 2 3 4
A
B
C
D
4321
D
C
B
ATitle
Number RevisionSize
A4
Date: 26-Aug-2012 Sheet of File: D:\C51_JIA_MA\½ÌѧÓõç·ͼ.Ddb Drawn By:
EA/VP31
X119
X218
RESET9
RD17
WR16
INT012
INT113
T014
T115
P101
P112
P123
P134
P145
P156
P167
P178
P0039
P0138
P0237
P0336
P0435
P0534
P0633
P0732
P2021
P2122
P2223
P2324
P2425
P2526
P2627
P2728
PSEN29
ALE/P30
TXD11
RXD10
U1 AT89C51
I11
I22
I33
B44
B55
I66
I77
GN
D9
CO
M9
C810
O712
O613
O514
O415
O316
O217
O118
I88
U2ULN2803
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED1
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED2
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED3
Q18550
Q28550
Q38550R1 10K
R2 10K
R3 10K
12345678
161514131211109
PR1
100
GND
+5V
相对应的段码接在一起
依次驱动(扫描)公共极8路 OC 反相
器,驱动电流 >100mA( 267 页)
排电阻,作用限流
3/8 在内部是接在一起的,所以可任意接一个就可以了
动态显示电路 外接感性负载(电动机 /继电器)时 ,接负载电源
1 2 3 4
A
B
C
D
4321
D
C
B
A Title
Number RevisionSize
A4
Date: 26-Aug-2012 Sheet of File: D:\C51_JIA_MA\½ÌѧÓõç·ͼ.Ddb Drawn By:
EA/VP31
X119
X218
RESET9
RD17
WR16
INT012 INT113
T014 T115
P101
P112
P123
P134
P145
P156
P167
P178
P00 39
P0138
P0237
P03 36
P04 35
P05 34
P0633
P0732
P20 21
P21 22
P22 23
P2324
P24 25
P25 26
P26 27
P27 28
PSEN29ALE/P 30
TXD 11RXD 10
U1 AT89C51
I11
I22
I33
B44
B55
I66
I77
GN
D9
CO
M9
C8 10O7 12O6 13O5 14O415O3 16O2 17O1 18
I88
U2ULN2803
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED1
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED2
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED3
Q18550
Q28550
Q38550R1 10K
R2 10K
R3 10K
12345678
161514131211109
PR1
100
GND
+5V
00000001
00000001
00000001
00000001
0 1 0
11111110
101 P2 口送“ 8的
反相”的段码
反相器同时送“ 8”段码: 00000001 ,哪一个显示“ 8”呢?
P0口“位”
码
动态显示 为了正确显示段码与位码必须同步!
反相
1 2 3 4
A
B
C
D
4321
D
C
B
ATitle
Number RevisionSize
A4
Date: 11-Jul-2012 Sheet of File: D:\C51_JIA_MA\½ÌѧÓõç·ͼ.Ddb Drawn By:
EA/VP31
X119
X218
RESET9
RD17
WR16
INT012 INT113
T014T1
15
P101
P112
P123
P134
P145
P156
P167
P178
P00 39
P0138
P0237
P03 36
P0435
P0534
P0633
P0732
P2021
P2122
P22 23
P2324
P24 25
P2526
P2627
P27 28
PSEN29ALE/P30
TXD 11RXD
10
U1 AT89C51
I11
I22
I33
B44
B55
I66
I77
GN
D9
COM
9
C8 10O7
12O613
O5 14O4
15O3 16O2
17O118
I88
U2UNL2803
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED1
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED2
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED3
Q18550
Q28550
Q38550R1 10K
R2 10K
R3 10K
12345678
161514131211109
PR1
100
GND
+5V
00000001
00000001
00000001
00000001
101
0 1 00 0 0
11111110
101
111
消隐消隐信号
消隐信号
无论段码如何,因为所有阳极都是低电平,所以全灭
编写程序程
C 语言知识:宏( 47页) 宏定义的一般格式:#define 宏名 字符串或数字宏定义就是用宏名代替一个字符串,也就是简单的替换。 不是必须的,但更便于编写、修改、理解程序。
上述宏定义后
P_duan 和 P2 就是等效的,好处是:
读程序时, P_duan 的意义更清晰,表示段码驱动端口的意思。
如果想改为其他端口,只需修改宏定义即可,而不必“修改程序”。
C 语言知识:一维数组( 56页)为了便于访问将同一类型数据的有序集合——数组。数组的定义方式为:类型 数组名 [常数 ];
这两数组均为一组常数定义为 code, 存储在程序存储器 (ROM) 中,定义为 data ,存储在内存中,是不合理的!!
段码表的获取可通过“ LED 段码查询”实现。复
制
1 2 3 4
A
B
C
D
4321
D
C
B
ATitle
Number RevisionSize
A4
Date: 11-Jul-2012 Sheet of File: D:\C51_JIA_MA\½ÌѧÓõç·ͼ.Ddb Drawn By:
EA/VP31
X119
X218
RESET9
RD17
WR16
INT012 INT113
T014 T115
P101
P112
P123
P134
P145
P156
P167
P178
P00 39
P0138
P02 37
P03 36
P04 35
P0534
P0633
P07 32
P20 21
P2122
P22 23
P2324
P24 25
P25 26
P26 27
P27 28
PSEN 29ALE/P30TXD 11
RXD 10
U1 AT89C51
I11
I22
I33
B44
B55
I66
I77
GN
D9
CO
M9
C8 10O7 12O6 13O5 14O4
15O3 16O217O1 18
I88
U2UNL2803
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED1
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED2
e1
d2
com
3c
4
dp5
b6
a7
com
8
f9
g10
LED3
Q18550
Q28550
Q38550R1 10K
R2 10K
R3 10K
12345678
161514131211109
PR1
100
GND
+5V
动态显示 x的千 /百 /十 /个位
将 x的千 /百/十 /个位的段码存入 nx
[] 中
“取余”
将 x的千 /百/十 /个位的段码存入 nx
[] 中“取余”
填写“显示数组”程序
先整除 再“ %10” 赋值 位x/1000=1 1 nx[0]=1 千
x/100=12 2 nx[1]=2 百
x/10=123 3 nx[2]=3 十
x=1234 4 nx[3]=4 个
X=1234
利用循环语句填写“显示数组”程序及框图
i=0
取出 X的最低位
i<4
?是
X除以 10
i++
i x nx[3-i]=x%10
位
0 1234 nx[3]=4 个1 123 nx[2]=3 十2 12 nx[1]=2 百3 1 nx[0]=1 千
X=1234
显示数组 :nx[4]={千位 ,百位 ,十位 ,个位 }
否 ☞?
先处理最低位比较方便 ,特别是使用循环语句时,也节省内存 。处理完个位,就可以”舍掉”个位 (除以 10)……
☞ 程序框图
动态显示程序
执行必要的程序
i<4? 否是
先送 i位的段码
再送 i位的位码(扫描 i位)
显示 i位延时
消隐
i+1( 下一位 )
i=0(显示千位) i=0,1,2,3时 ,分别显
示千 /百 /十 /个位
执行必要的程序
i<4? 否是
先送 i位的段码
再送 i位的位码(扫描 i位)
显示 i位延时
消隐
i+1( 下一位 )
i=0(显示千位)
i=4 时,跳出 for循环
执行必要的程序,对于本例,没有任何其他程序,只有动态显示功能
再次进入 for循环——动态显示
执行必要的程序
i<4? 否是
先送 i位的段码
再送 i位的位码(扫描 i位)
显示 i位延时
消隐
i+1( 下一位 )
i=0(显示千位)
虽然送出第 i 位的段码但位码送出之前,仍处于消隐状态,第 i 位不亮。
处于消隐状态 ,所以位的 COM 无效
程序执行到这儿 ,才显示第 i 位的数字
☞ 交换一下会怎样?
动态显示 :必须反复执行
第 i 位的 COM 有效,点亮了第 i 位,而第 i 位的段码没有送出 ,这样就把第( i-1 )的数字瞬间显示在了第i 位上啦,起不到消隐的目的。
程序执行到这儿 ,才将第 i 位的数字显示第 i 位上 ▶视频
这两个“动作”能否交换次序?结论:不可以,这
就是“序”
执行必要的程序
i<4? 否是
再送 i位的段码
先送 i位的位码(扫描 i位)
显示 i位延时
消隐
i+1( 下一位 )
i=0(显示千位)