实验四LED数码管显示实验报告.docx
- 文档编号:5742726
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:10
- 大小:17.15KB
实验四LED数码管显示实验报告.docx
《实验四LED数码管显示实验报告.docx》由会员分享,可在线阅读,更多相关《实验四LED数码管显示实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
实验四LED数码管显示实验报告
《微机实验》报告
7
实验名称LED数码管显示实验
指导教师曹丹华
专业班级光电122班姓名陈敬人学号
联系电话
一、任务要求
实验目的理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。
实验内容基础部分利用C851F31单片机控制数码管显示器。
利用末位数码管循环显示数字-F,显示切换频率为1Hz。
提高部分在数码管上显示→199计数,计数间隔为.5秒。
设计思路
基础部分
C851F31单片机片上晶振为25MHz,采用8分频后为625MHz,输入时钟信号为48个机器周期,T1采用定时器工作方式1,单次定时最长可达27s,可以实现1s定时要求。
定时采用软件查询工作方式,利用JNBTF,HERE实现。
置P.6和P.7端口为,位选信号选定末位数码管。
通过MOVCA,@A+DPTR指令,利用顺序查表法取出显示段码数据。
寄存器R自增1,并赋给A以取出下一个显示段码数据。
为减短代码长度,利用CJNE指令实现循环结构。
当寄存器R增至FH后,跳转至开头,重新开始下一轮显示。
提高部分
定时方式及查表方式同基础部分,由于要实现三个数码管同时显示,因此采用动态扫描显示法。
三、资源分配
基础部分
P.6:
位选信号端口
P.7位选信号端口
P1输出段码数据
R存放显示数据
DPTR指向段码数据表首
提高部分
P.6位选信号端口
P.7位选信号端口
R存放个位显示数据
R5存放十位显示数据
R6存放百位显示数据
P1输出段码数据
DPTR:
指向段码数据表首
四、流程图
基础部分
提高部分
五、源代码(含文件头说明、语句行注释)
基础部分
;******************基础部分源代码***************************
;Filename:
test.asm
;Decription:
末位数码管循环显示数字-F,显示切换频率为1Hz。
;Designedby:
陈敬人
;Date:
2119
;
;-GeneratedInitializationFile--
;
$include(C851F31.inc)
ORGH
LJMPMAIN
ORG1H
MAIN:
LCALLInit_Device;设备初始化
MOVSP,#4H;合理设置堆栈位置
MOVDPTR,#TABLE;DPTR指向段码数据表首
MOVTMOD,#1H;定时器T工作方式1
MOVTH,#6H;赋计数初值,定时1s
MOVTL,#C6H
CLRP.6;位选信号,选定末位数码管亮
CLRP.7
START:
MOVR,#H
MOVA,R;取显示数据
MOVCA,@A+DPTR;查表取段码数据
MOVP1,A;送显示数据
SETBTR;启动定时器
HERE:
JNBTF,HERE;等待定时
CLRTR;停止定时
CLRTF;溢出位清零
MOVTH,#6H;重装计数初值
MOVTL,#C6H
CJNER,#FH,CHANGE;判断数据是否显示完毕,未完则跳转至CHANGE
SJMPSTART;显示完毕,重新开始
CHANGE:
INCR
MOVA,R;取下一个显示数据
MOVCA,@A+DPTR;查表取段码数据
MOVP1,A;送输出显示数据
SETBTR;重新启动定时器
SJMPHERE
TABLE:
DBFCH,6H,DAH;段码数据表
DBF2H,66H,B6H
DBBEH,EH,FEH,F6H
DBEEH,3EH,1AH
DB7AH,9EH,8EH
;Peripheralspecificinitializationfunctions,
;CalledfromtheInit_Devicelabel
PCA_Init:
anlPCAMD,#BFh
movPCAMD,#h
ret
Timer_Init:
movTMOD,#1h
movCKCON,#2h
ret
Port_IO_Init:
;P.-Unassigned,Open-Drain,Digital
;P.1-Unassigned,Open-Drain,Digital
;P.2-Unassigned,Open-Drain,Digital
;P.3-Unassigned,Open-Drain,Digital
;P.4-Unassigned,Open-Drain,Digital
;P.5-Unassigned,Open-Drain,Digital
;P.6-Unassigned,Open-Drain,Digital
;P.7-Unassigned,Open-Drain,Digital
;P-Unassigned,Open-Drain,Digital
;P1-Unassigned,Open-Drain,Digital
;P2-Unassigned,Open-Drain,Digital
;P3-Unassigned,Open-Drain,Digital
;P4-Unassigned,Open-Drain,Digital
;P5-Unassigned,Open-Drain,Digital
;P6-Unassigned,Open-Drain,Digital
;P7-Unassigned,Open-Drain,Digital
;P-Unassigned,Open-Drain,Digital
;P1-Unassigned,Open-Drain,Digital
;P2-Unassigned,Open-Drain,Digital
;P3-Unassigned,Open-Drain,Digital
movXBR1,#4h
ret
Interrupts_Init:
movIT1CF,#21h
ret
;Initializationfunctionfordevice,
;CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallTimer_Init
lcallPort_IO_Init
lcallInterrupts_Init
ret
END
提高部分
;*******************提高部分源代码************************
;Filename:
.asm
;Decription:
三位数码管从到199依次显示,间隔.5秒。
;Designedby:
陈敬人
;Date:
2111
;
;-GeneratedInitializationFile--
;
$include(C851F31.inc)
ORGH
LJMPMAIN
ORG1H
MAIN:
LCALLInit_Device;调用定义语言
MOVSP,#2H;堆栈赋初值
MOVP1,#H;P1口清零,所有LED管熄灭
MOVTMOD,#1H;设置T为定时工作方式1
MOVTH,#85H
MOVTL,#EEH;定时器T赋初值
CLRP.6
CLRP.7;位选位清零
START1:
MOVR,#H;R赋初值(R存放个位数码管显示值)
MOVR5,#H;R5赋初值(R5存放十位数码管显示值)
MOVR6,#H;R6赋初值(R6存放百位数码管显示值)
SETBTR;开启定时器
SJMPDIS;跳转扫描输出子程序
HERE:
JNBTF,DIS;判断定时是否溢出,未溢出,则执行扫描输出程序
CLRTR
CLRTF
MOVTH,#85H
MOVTL,#EEH
CJNER,#9H,CHANGE;判断R是否达到9
SJMPSTART2
CHANGE:
INCR;R加一
SETBTR;开启定时器
SJMPDIS;跳转扫描输出子程序
;个位满9,十位加一
START2:
MOVR,#H;R满1归
INCR5;R5(十位)加一
CJNER5,#AH,START3;判断十位是否可以向百位进位
MOVR5,#H;R5(十位)满1归
INCR6;R6(百位)加一
CJNER6,#2H,START3;判断百位是否到2
SJMPSTART1
START3:
SETBTR
SJMPDIS
;扫描输出子程序
DIS:
MOV6H,#H
MOV61H,#4H
MOV62H,#8H;设置位选码(前三个数码管)
;MOV63H,#CH;第四个数码管
MOVR1,#6H;位选码赋R1
DISP:
MOVP1,#H;所有LED数码管熄灭
LD:
MOVA,@R1
ANLP,#3FH
ORLP,A
MOVDPTR,#TABLE;将表地址赋数据指针
MOVA,R
MOVCA,@A+DPTR;查表
MOVP1,A;数码管显示
LCALLDL1MS;调用1ms延时
MOVP1,#H;所有LED数码管熄灭
INCR1;指向下一个LED数码管
MOVA,@R1
ANLP,#3FH
ORLP,A
SJMPSELECT;根据十位变化特性选择不同段码表
BACK:
MOVA,R5
MOVCA,@A+DPTR
MOVP1,A
LCALLDL1MS
MOVP1,#H
INCR1
MOVA,@R1
ANLP,#3FH
ORLP,A
MOVDPTR,#TABLE
MOVA,R6
MOVCA,@A+DPTR
MOVP1,A
LCALLDL1MS
MOVP1,#H
SJMPHERE
SELECT:
CJNER6,#1H,ONE;判断百位是否为1
MOVDPTR,#TABLE;当百位为1时十位应该从开始变化
SJMPBACK
ONE:
MOVDPTR,#TABLE;当百位为时十位应该从1开始变化
SJMPBACK
;1ms延时程序
DL1MS:
MOVR4,#4
D1:
MOVR7,#253
NOP
DJNZR7,$
DJNZR4,D1
RET
TABLE:
DBFCH,6H,DAH,F2H,66H,B6H,BEH,EH,FEH,F6H
TABLE:
DBH,6H,DAH,F2H,66H,B6H,BEH,EH,FEH,F6H;段码数据表
publicInit_Device
INITSEGMENTCODE
rsegINIT
;Peripheralspecificinitializationfunctions,
;CalledfromtheInit_Devicelabel
PCA_Init:
anlPCAMD,#BFh
movPCAMD,#h
ret
Timer_Init:
movCKCON,#2h
ret
Port_IO_Init:
;P.-Unassigned,Open-Drain,Digital
;P.1-Unassigned,Open-Drain,Digital
;P.2-Unassigned,Open-Drain,Digital
;P.3-Unassigned,Open-Drain,Digital
;P.4-Unassigned,Open-Drain,Digital
;P.5-Unassigned,Open-Drain,Digital
;P.6-Unassigned,Push-Pull,Digital
;P.7-Unassigned,Push-Pull,Digital
;P-Unassigned,Push-Pull,Digital
;P1-Unassigned,Push-Pull,Digital
;P2-Unassigned,Push-Pull,Digital
;P3-Unassigned,Push-Pull,Digital
;P4-Unassigned,Push-Pull,Digital
;P5-Unassigned,Push-Pull,Digital
;P6-Unassigned,Push-Pull,Digital
;P7-Unassigned,Push-Pull,Digital
;P-Unassigned,Open-Drain,Digital
;P1-Unassigned,Open-Drain,Digital
;P2-Unassigned,Open-Drain,Digital
;P3-Unassigned,Open-Drain,Digital
movPMDOUT,#Ch
movP1MDOUT,#FFh
movXBR1,#4h
ret
;Initializationfunctionfordevice,
;CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallTimer_Init
lcallPort_IO_Init
ret
END
六、程序测试方法与结果
基础部分观察P1端口输出波形(如下图)
由图可知,LED数码管切换频率为1HZ,跑完一轮经过16s,满足定时要求。
且按要求输出~F。
基础部分硬件调试
程序在C851F31单片机上按要求运行,即第一位数码管从到F依次显示。
硬件调试成功。
提高部分
通过验收答辩。
程序按要求正常运行。
本人承诺:
本人承诺:
本报告内容真实,无伪造数据,无抄袭他人成果。
本人完全了解学校相关规定,如若违反,愿意承担其后果。
签字
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 LED 数码管 显示 报告