理工大学七段数码管显示实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理报告
姓名:于川平
班级:通信14-1
学号: 3140731132
指导老师:张彪
一、实验目的
1.学习七段数码管的工作原理;
2.学习数码管与8051单片机的接口方法;
3.掌握动态扫描显示技术。
二、实验原理
如图
4.9-1
所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。LED数码管中的发光二极管共有两种连接方法:
1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。实验中使用的LED显示器为共阴极接法。
2)共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳
极接+5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。
为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。七段发光二极管,再加上一个小数点位,共计八段。因此提供给LED显示器的字形代码正好一个字节。若a、b、c、d、e、f、g、dp 8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,则用共阴极LED数码管显示十六进制数时所需的字形代码如表4.9-1所示。
2、动态显示
按图4.9-2(b)连接线路,通过交替选中LED1和LED0循环显示两位十进制数。七段数码管段码连接不变,位码驱动输入端S1、S0接8255A C口的PC1、PC0,通过C口的这两位交替输出1和0,以便交替选中LED1和LED0,从而实现两位十进制数的交替显示。请编程实现在两个LED数码管上循环显示00 99,程序流程图如图4.9-3(b)所示
1. 静态显示:数码管为共阴极,通过BCD码译码驱动器CD4511驱动,其输入端A~D输入4位BCD码,位码输入低电平选中。按图4-1连接好电路,将8255的A口PA0~PA3与七段数码管LED1的BCD码驱动输入端A1~D1相连,8255的A口PA4~PA7与七段数码管LED2的BCD码驱动输入端A2~D2相连,8255的B 口PB0~PB3与七段数码管LED3的BCD码驱动输入端A3~D3相连,8255的B口PB4~PB7与七段数码管LED4的BCD码驱动输入端A4~D4相连,8255的C口PC0~PC3分别与七段数码管LED4~LED4的位驱动输入端DG1~DG4相连。编程从键盘
上每输入4个0~9数字,在七段数码管LED4~LED4上依次显示出来。
三、编程提示
1. 由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不用,编程时需要了解当前的微机使用那段IO地址并进行处理。
2. 对实验内容1,七段数码管字型代码与输入的关系如下表
3. 对实验内容1,七段数码管字型代码与输入的关系如下表
四、实验设备
微型计算机、单片机仿真器、实验仪、示波器(各一台);实验连线(若干)。
五、实验内容
1.编程在8位数码管上面显示“12345678”8个数字,每经过1秒8个数字循环左移一位显示。依次为:1234578、23456781、34567812....... 汇编语代码:
ORG 0000H
START:
MOV R4,#00H
FLASH:
MOV R2,#01H
MOV R0,#30H
MOV DPTR,#TABFLA
LOPFLA: MOV A,R2
MOV P2,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
MOV R3,#0
DJNZ R3,$
MOV P1,#0FFH
RL A
MOV R2,A
INC R0
CJNE R0,#38H,
GOON
MOV R0,#30H
GOON:
CJNE A,#01H,LOPFLA
INC R4
CJNE R4,#7FH,GOON1
MOV A,30H
MOV 30H,31H
MOV 31H,32H
MOV 32H,33H
MOV 33H,34H
MOV 34H,35H
MOV 35H,36H
MOV 36H,37H
MOV 37H,A
MOV R4,#00H
GOON1:
AJMP FLASH
TABFLA:
DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,88H
DB 83H,0C6H,0A1H,86H,8EH
END
源程序清单如下:
data segment
ioport equ 0C400h-0280h
io8255c equ ioport+28ah
io8255k equ ioport+28bh
io8255a equ ioport+288h
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 01h,02h,03h,04h,05h,06h,07h,08h;存放要显示的十位和个位
con db ? ;位码
data ends
code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
mov dx,io8255k ;将8255设为A口C口出mov al,80h
out dx,al
loop2:
mov al,08h ;设置数码管位计数器初值到CON
mov byte ptr con,al
mov si,offset buffer1 置显示缓冲器指针SI
mov ah,7fh ;置位码初值disp0:
mov cx,0ffffh
mov bl,ds:[si] ;取显示缓冲区显示值存BX
mov bh,0h push si
mov dx,io8255c ;位码从C口输出
mov al,ah out dx,al
mov dx,io8255a
mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码
mov al,byte ptr [si]