LED数码管显示实验
- 格式:docx
- 大小:1.86 MB
- 文档页数:10
《微机实验》报告
实验名称 LED数码管显示实验
专业班级 姓名xxxxx 学号
联系方式
【实验目的】
理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。
【任务要求】
使用C8051F310单片机控制数码管显示器,要求利用末位数码管循环显示数字0-9,显示切换频率为1Hz。
【设计思路】
对振荡器信号频率进行8分频,再对定时器进行48分频,以使在一次定时时间范围内实现1s定时。采用查询方式进行定时。位选信号选定末位数码管不改变。利用顺序查表法逐个取出显示段码数据,寄存器R0的值自增1并赋与寄存器A以改变下一次显示所取的段码数据(查表过程使用代码“MOVC A, @A+DPTR”)。当寄存器R0的值增至09H后,跳转至开头,重新开始下一轮显示。
【资源分配】
利用查表方式取显示数据段码,段码数据置于数据表TABLE中。工作寄存器R0所存数
据用于调整查表操作所取数据及决定是否开始下一轮的显示。数据指针DPTR用于查表。P1口用于输出显示数据段码信号。定时器T0用于实现1s定时。
【流程图】
开始查表准备DPTR←TABLE置T0计数初值选定末位数码管R0←00H取段码数据启动定时器等待中断TF0=0?重置T0初值R0=09H?INC R0NYNY
【源代码】
; ;------------------------------------
;- Generated Initialization File --
;------------------------------------
;--------------------------------------
;Desgined by :xxxxx
;Date: 11月7号
;class: xxxxx
;number:xxxxx
;--------------------------------------
$include (C8051F310.inc)
ORG 0000H
LJMP MAIN
ORG 1000H
CLR P3.1
MAIN: LCALL Init_Device ;设备初始化
CLR P3.1 ;关闭蜂鸣器
MOV SP ,#60H ;设置堆栈保护现场
MOV DPTR ,#TABLE ;通过dptr访问数据表table
CLR P0.6 ;选择最后一个数码管显昃数字
CLR P0.7
MOV TMOD ,#01H ;设定定时器工作方式0
MOV TH0,#06H ;给定使砌设订初值
MOV TL0,#0C6H
BEGIN:MOV R0,#00H ;通过R0实现0到9的递增
MOV A ,R0
MOVC A ,@A+DPTR
MOV P1,A ;数码管显示数据
SETB TR0 ;启动定时器
YICHU: JNB TF0,YICHU ;判断是否溢出
CLR TR0; ;停止计时
CLR TF0; ;溢出位复位
CJNE R0, #09H,CONTINUE ;未溢出时继续显示
SJMP BEGIN ;溢出返回执行
CONTINUE:INC R0 ;R0++
MOV A,R0
MOVC A,@A+DPTR
MOV P1,A
SETB TR0
SJMP YICHU
TABLe: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H ; 表中存放的0-9
; Peripheral specific initialization functions,
; Called from the Init_Device label
PCA_Init:
anl PCA0MD, #0BFh
mov PCA0MD, #000h
ret
Timer_Init:
mov TMOD, #001h
mov CKCON, #002h
ret
Port_IO_Init:
; P0.0 - Unassigned, Push-Pull, Digital
; P0.1 - Unassigned, Open-Drain, Digital
; P0.2 - Unassigned, Push-Pull, Digital
; P0.3 - Unassigned, Push-Pull, Digital
; P0.4 - Unassigned, Push-Pull, Digital
; P0.5 - Unassigned, Push-Pull, Digital
; P0.6 - Unassigned, Push-Pull, Digital
; P0.7 - Unassigned, Push-Pull, Digital
; P1.0 - Unassigned, Open-Drain, Digital
; P1.1 - Unassigned, Open-Drain, Digital
; P1.2 - Unassigned, Open-Drain, Digital
; P1.3 - Unassigned, Open-Drain, Digital
; P1.4 - Unassigned, Open-Drain, Digital
; P1.5 - Unassigned, Open-Drain, Digital
; P1.6 - Unassigned, Open-Drain, Digital
; P1.7 - Unassigned, Open-Drain, Digital
; P2.0 - Unassigned, Open-Drain, Digital
; P2.1 - Unassigned, Open-Drain, Digital
; P2.2 - Unassigned, Open-Drain, Digital
; P2.3 - Unassigned, Open-Drain, Digital
mov P0MDOUT, #0FDh
mov XBR1, #040h
ret
; Initialization function for device,
; Call Init_Device from your main program
Init_Device:
lcall PCA_Init
lcall Timer_Init
lcall Port_IO_Init
ret
end
【程序测试方法与结果、软件性能分析】
1、软件仿真结果
P0(选定末位数码管)
P1(0~9显示数据输出信号)
0
1
2
3
4
5
6
7
8
9
2、硬件运行结果
【思考题】
●数码管采用动态驱动方式时刷新频率应如何选择?为什么?
答:利用人眼视觉暂留效应,若在一定时间范围内,数码管笔端频率越快,则人眼看不出闪烁。因此,需选择刷新频率高一些,则可看清楚数字。