-
单
片
机
实
验
报
告
实验九
七段数码管显示实验
一、实验目的
1
.学习七段数码管的工作原理;
<
/p>
2
.学习数码管与
8051
单片机的接口方法;
3
.掌握动态扫描显示技术。
二、实验原理
如图所示,
LED
数码管由
7
个发光
二极管组成,此外,还有一个圆点型发光
二极管(在图中以
dp
表示),用于显示小数点。通过七段发光二极管亮暗的不
共阴极接法
图
共阳极接法
同组合,可以显示多种数
字、字母以及其它符号。
LED
数码管中的发光二极管共
有两种连接方法:
1
)
共阴极
接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴
极接地,这样阳极端输
入高电平的段发光二极管就导通点亮,而输入低电平的
则不点亮。实验中使用的
LED
显示器为共阴极接法
2
)
共阳极
接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳
极接+
5V
。
这样阴极端输入低电平的段发光二极管就导通点
亮,
而输入高电平
的则不点亮。
p>
为了显示数字或符号,要为
LED
显示器提
供代码,因为这些代码是为显示字
形的,
因此称之为字形代码。
七段发光二极管,
再加上一个小数点位,
共计八段。
因此提供给
LED
显示器
的字形代码正好一个字节。若
a
、
b<
/p>
、
c
、
d
、
e
、
f
、
g
、
dp 8
个显示段依次对应一个字节的低位到高位,即
D0
、
D1
、
D2
、
D3
、
D4
、
D5
、
D6
、
D7
,则用共阴极
LED
数码管显示十六进制数时所需的字形代码如表所示。
表
共阴极
L
ED
数码管字形代码
字型
0
1
2
3
4
5
共阴极字形
代码
3FH
06H
5BH
4FH
66H
6DH
字型
6
7
8
9
A
b
共阴极字形
代码
7DH
07H
7FH
6FH
77H
7CH
字型
C
d
E
F
灭
共阴极字形
代码
39H
5EH
79H
71H
00H
2
、动态显示
按图(
b
)连接线路,通过交替选中
LED1
和
LED0
循环显示两位十进
制
数。
七段数码管段码连接不变,
位码
驱动输入端
S1
、
S0
接
8255A C
口的
PC1
、
PC0
,
通
过
C
口的这两位交替输出
1
和
0
,
以便交替选中
p>
LED1
和
LED0
,
从而
实现两位十进制数的交替显示。请编程实现在两个
p>
LED
数码管上循环显示
00
99
,程序流程图如图
(b)
所示。
开始
开始
<
/p>
十位数的段码至
A
口
个位数的段码至
A
口
延时并修改要显示的数字
返回
DOS
返回
DOS
(b)
动态显示程序流程图
(a)
静态显示程序流程图
图
*
实际上试验中使用的是共阳极数码
管,这里就不一一列出。
三、实验电路图
第一部分电路图:
第二部分电路图:
四、实验设备
微型计算机、单片机仿
真器、实验仪、示波器
(
各一台
)
p>
;
实验连线
(<
/p>
若干
)
。
五、实验内容
*
由于汇编语言程序中已经做了相应的注释,
C
语言的编程原
理与之相同处不再做重复注释,
仅作个别注释,
请
见谅。
1
.编程在
8
位数码管上面显示“”
8
< br>个数字,每经过
1
秒
8
个数字循环左移
一位显示。依次为:
12345
78
、
、
.......
汇编语言程序代码:
O
RG
0000H
START:
M
OV
R4,#00H
FLASH:
M
OV
R2,#01H
M
OV
R0,#30H
M
OV
DPTR,#TABFLA
LOPFLA:
M
OV
A,R2
M
OV
P2,A
M
OV
A,@R0
M
OVC A,@A+DPTR
M
OV
P1,A
M
OV
R3,#0
D
JNZ
R3,$$
M
OV
P1,#0FFH
M
OV
A,R2
R
L
A
M
OV
R2,A
I
NC
R0
C
JNE
R0,#38H,GOON
M
OV
R0,#30H
GOON:
C
JNE
A,#01H,LOPFLA
I
NC
R4
C
JNE
R4,#7FH,GOON1
;
把字形表首地址给外部寻址寄存器
;
输出位型
;
在程序段中查表得到字形
;
输出字形
;
循环等待延时
;
关显示
;
位型左移一位
;
下一个字形
;
若已经显示一遍则初始化
M
OV
A,30H
;
显示表左移更新
M
OV
30H,31H
M
OV
31H,32H
M
OV
32H,33H
M
OV
33H,34H
M
OV
34H,35H
M
OV
35H,36H
M
OV
36H,37H
M
OV
37H,A
M
OV
R4,#00H
GOON1:
A
JMP
FLASH
TABFLA:
;
字形表
D
B
0C0H,0F9H,0A4H,0B0H,99H
D
B
92H,82H,0F8H,80H,90H,88H
D
B
83H,0C6H,0A1H,86H,8EH
END
C
语言程序代码:
#include<>
data
unsigned char disadd _at_ 0x30;
const unsigned char LED_TAB[]={0xC0,0xF
9,0xA4,0xB0,0x99,0x92,
p>
0x82,0xF8,0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E};
data unsigned char j;
void delay()
{
u
nsigned char
i=0xFF;
w
hile(i--)
{
;
}
}
void change_s()
{
u
nsigned char *k;
u
nsigned char
m;
k
=&disadd;
m
=*k;
*
k=*(k+1);
*
(k+1)=*(k+2);
*
(k+2)=*(k+3);
*
(k+3)=*(k+4);
*
(k+4)=*(k+5);
*
(k+5)=*(k+6);
*
(k+6)=*(k+7);
*
(k+7)=m;
j
=0x00;
}
main()
{
u
nsigned char i;
u
nsigned char
disbit;
u
nsigned char
*disnum,*n;
S
P=0x40;
j
=0x00;
n
=&disadd;
*
(n)=0x01;
*
(n+1)=0x02;
*
(n+2)=0x03;
*
(n+3)=0x04;
*
(n+4)=0x05;
*
(n+5)=0x06;
*
(n+6)=0x07;
*
(n+7)=0x08;
w
hile(1)
{
disbit=0x01;
disnum=&disadd;
//
显示表移位
//
计数值初始化
//
显示设置初值为
1~8
-
-
-
-
-
-
-
-
-
上一篇:浅析孔子天命观下的“六十而耳顺”
下一篇:个人对照检查材料