1. 实验任务
如图所示,使用AT89S51单片机的P0端口的P0.0-P0.77连接到共阴数码管a-h在笔段上,数字管的公共端接地。0-9数字在数字管上循环显示,时间间隔为0.2秒。
2. 电路原理图
图4.7.1
3. 硬件连接在系统板上
单片机系统区域P0.0/AD0-P0.7/AD7端口用8芯线连接到四路静态数字显示模块区域的任何数字管a-h端口;要求:P0.0/AD0与a相连,P0.1/AD1与b相连,P0.2/AD2与c相连,……,P0.7/AD7与h相连。
4. 程序设计内容
(1. LED数字显示原理
七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。
LED数码管的g~a七个发光二极管因加正电压而发光,因加零电压而不发光。不同的明暗组合可以形成不同的字形。这种组合称为字形码。以下是阴极的字形码见表2
“0”3FH“8”7FH
“1”06H“9”6FH
“2”5BH“A”77H
“3”4FH“b”7CH
“4”66H“C”39H
“5”6DH“d”5EH
“6”7DH“E”79H
“7”07H“F”71H
(2. 由于显示的数字0-9的字形码没有规则可循,我们只能通过检查表满足我们的要求。这样,我们就可以按照0-9的顺序排列每个数字的笔段代码!建立的表格如下:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
5.程序框图
图4.7.2
6.汇编源程序
ORG 0
START: MOV R1,#00H
NEXT: MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A DPTR
MOV P0,A
LCALL DELAY
INC R1
CJNE R1,#10,NEXT
LJMP START
DELAY: MOV R5,#20
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
7. C语言源程序
#include 《AT89X51.H》
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispcount;
void delay02s(void)
{
unsigned char i,j,k;
for(i=20;i》0;i--)
for(j=20;j》0;j--)
for(k=248;k》0;k--);
}
void main(void)
{
while(1)
{
for(dispcount=0;dispcount《10;dispcount )
{
P0=table[dispcount];
delay02s();
}
}
}