搜索
您的当前位置:首页正文

LED数码管显示实验

来源:意榕旅游网


《微机实验》报告

实验名称 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取段码数据启动定时器N等待中断TF0=0?Y重置T0初值YR0=09H?NINC R0

【源代码】

; ;------------------------------------ ;- 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 ;

; Peripheral specific initialization functions, ; Called from the Init_Device label PCA_Init:

anl PCA0MD, #0BFh mov PCA0MD, #000h ret

表中存放的0-9 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、硬件运行结果

【思考题】

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

答:利用人眼视觉暂留效应,若在一定时间范围内,数码管笔端

频率越快,则人眼看不出闪烁。因此,需选择刷新频率高一些,则可看清楚数字。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top