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、硬件运行结果

【思考题】

●数码管采用动态驱动方式时刷新频率应如何选择?为什么?

答:利用人眼视觉暂留效应,若在一定时间范围内,数码管笔端频率越快,则人眼看不出闪烁。因此,需选择刷新频率高一些,则可看清楚数字。