实验四LED数码管显示实验报告文档格式.docx
《实验四LED数码管显示实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《实验四LED数码管显示实验报告文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
P1输出段码数据
R存放显示数据
DPTR指向段码数据表首
P.6位选信号端口
R存放个位显示数据
R5存放十位显示数据
R6存放百位显示数据
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;
溢出位清零
重装计数初值
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
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
movXBR1,#4h
Interrupts_Init:
movIT1CF,#21h
Initializationfunctionfordevice,
CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallTimer_Init
lcallPort_IO_Init
lcallInterrupts_Init
END
*******************提高部分源代码************************
.asm
三位数码管从到199依次显示,间隔.5秒。
2111
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;
跳转扫描输出子程序
JNBTF,DIS;
判断定时是否溢出,未溢出,则执行扫描输出程序
CLRTR
CLRTF
MOVTL,#EEH
CJNER,#9H,CHANGE;
判断R是否达到9
SJMPSTART2
INCR;
R加一
跳转扫描输出子程序
个位满9,十位加一
START2:
MOVR,#H;
R满1归
INCR5;
R5(十位)加一
CJNER5,#AH,START3;
判断十位是否可以向百位进位
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延时
INCR1;
指向下一个LED数码管
MOVA,@R1
SJMPSELECT;
根据十位变化特性选择不同段码表
BACK:
MOVA,R5
MOVCA,@A+DPTR
MOVP1,A
LCALLDL1MS
MOVP1,#H
INCR1
MOVDPTR,#TABLE
MOVA,R6
SELECT:
CJNER6,#1H,ONE;
判断百位是否为1
当百位为1时十位应该从开始变化
SJMPBACK
ONE:
MOVDPTR,#TABLE;
当百位为时十位应该从1开始变化
1ms延时程序
DL1MS:
MOVR4,#4
D1:
MOVR7,#253
NOP
DJNZR7,$
DJNZR4,D1
RET
DBFCH,6H,DAH,F2H,66H,B6H,BEH,EH,FEH,F6H
DBH,6H,DAH,F2H,66H,B6H,BEH,EH,FEH,F6H;
publicInit_Device
INITSEGMENTCODE
rsegINIT
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
movPMDOUT,#Ch
movP1MDOUT,#FFh
六、程序测试方法与结果
基础部分观察P1端口输出波形(如下图)
由图可知,LED数码管切换频率为1HZ,跑完一轮经过16s,满足定时要求。
且按要求输出~F。
基础部分硬件调试
程序在C851F31单片机上按要求运行,即第一位数码管从到F依次显示。
硬件调试成功。
通过验收答辩。
程序按要求正常运行。
本人承诺:
本报告内容真实,无伪造数据,无抄袭他人成果。
本人完全了解学校相关规定,如若违反,愿意承担其后果。
签字
年月日