实验四LED数码管显示程序报告Word文档格式.docx
- 文档编号:4182279
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:17
- 大小:127.23KB
实验四LED数码管显示程序报告Word文档格式.docx
《实验四LED数码管显示程序报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验四LED数码管显示程序报告Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
R0-数码管计数器
数据表TABLE-存储对应段码的值
R1-TH0初值
R2-TLO初值
R3-判断标志位,选择对应的数码管亮
R4、R5、R6、R7对应数位显示计数器
R0-数码管计数器
KINT-加速键
四、流程图
1、基础部分
2、提高部分
3、ITOP中断部分
4、IT1P部分
5、INT0部分
五、源代码(含文件头说明、语句行注释)
1、基础部分
;
------------------------------------
-GeneratedInitializationFile--
$include(C8051F310.inc)
ORG0000H
LJMPMAIN
ORG1000H
CLRP3.1
MAIN:
LCALLInit_Device;
设备初始化
CLRP3.1
MOVSP,#40H
MOVDPTR,#TABLE;
赋予DPTR数据表table地址
CLRP0.6;
选择最后一个数码管
CLRP0.7
MOVTMOD,#01H;
设定时器TO为工作方式1
MOVTH0,#06H
MOVTL0,#0C6H
START:
MOVR0,#00H;
通过R0实现0到F
SJMPDISPLAY
LOOP:
JNBTF0,LOOP;
判断是否溢出
CLRTR0;
;
停止计时
CLRTF0;
溢出复位
CJNER0,#10H,DISPLAY;
未溢出时继续显示
SJMPSTART;
溢出返回执行
DISPLAY:
MOVA,R0
MOVCA,@A+DPTR
MOVP1,A
SETBTR0
INCR0
SJMPLOOP
TABLE:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
publicInit_Device
INITSEGMENTCODE
rsegINIT
Peripheralspecificinitializationfunctions,
CalledfromtheInit_Devicelabel
PCA_Init:
anlPCA0MD,#0BFh
movPCA0MD,#000h
ret
Timer_Init:
movTMOD,#001h
movCKCON,#002h
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
movP0MDOUT,#0FDh
movXBR1,#040h
Initializationfunctionfordevice,
CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallTimer_Init
lcallPort_IO_Init
end
2、提高部分
ORG0000H
LJMPMAIN
ORG0003H
LJMPINT0
ORG000BH
LJMPIT0P
ORG001BH
LJMPIT1P
ORG0100H
LCALLInit_Device
CLRP2.0
MOVSP,#40H;
配置堆栈指针
MOVDPTR,#TABLE;
移动DPTR指针到表格
MOVTH1,#81H;
T1初始化
MOVTL1,#81H
MOVR4,#00H
MOVR5,#00H
MOVR6,#00H
MOVR7,#00H
MOVA,#00H
MOVR1,#83H
MOVR2,#5CH
SETBTR1
LCALLINITIAL;
T0初始化
MOVR0,#00H
MOVA,R0;
提取R0对应的段码
MOVCA,@A+DPTR
CLRP0.6
MOVP1,A;
显示初始化
SETBTR0;
开启计时
LJMPSTAY;
等待中断
IT0P:
CLRTR0;
停止计时器
CLRTF0;
清零溢出位
LCALLINITIAL;
给T0赋值
INCR0;
段码指示器加1
JBP2.0,SKIP1
LCALLCOUNT
JMPSKIP2
SKIP1:
CJNER0,#0FH,RETURN;
判断是否显示完毕
MOVR0,#00H;
初始化R0重新循环
RETURN:
MOVA,R0;
取当前应显示字符
MOVP1,A;
开始显示
SKIP2:
SETBTR0;
开始计时
RETI
IT1P:
CJNER3,#00H,L1
MOVR3,#04H
L1:
LJMPCHOOSE0
L2:
MOVCA,@A+DPTR
MOVP1,A
LCALLJUDGE0
SETBEX0
RETI
COUNT:
INCR4;
内部计数器
CJNER4,#0AH,RETURN2
MOVR4,#00H
INCR5
CJNER5,#0AH,RETURN2
MOVR5,#00H
INCR6
CJNER6,#0AH,RETURN2
INCR7
RET
CJNER7,#02H,RETURN2
MOVR7,#00H
RETURN2:
RET
CHOOSE0:
MOVA,R3
CJNEA,#04H,CHOOSE1
DECR3
MOVA,R4
LJMPL2
CHOOSE1:
CJNEA,#03H,CHOOSE2
DECR3
MOVA,R5
CHOOSE2:
CJNEA,#02H,CHOOSE3
MOVA,R6
CHOOSE3:
MOVA,R7
JUDGE0:
CJNER3,#03H,JUDGE1
CLRP0.7
JUDGE1:
CJNER3,#02H,JUDGE2
CJNER7,#00H,DENT1
CJNER6,#00H,DENT1
CJNER5,#00H,DENT1
MOVP1,#00H
DENT1:
SETBP0.6
JUDGE2:
CJNER3,#01H,JUDGE3
CJNER7,#00H,DENT2
CJNER6,#00H,DENT2
DENT2:
SETBP0.7
JUDGE3:
CJNER7,#00H,DENT3
MOVP1,#00H
RET
DENT3:
SETBP0.7
INITIAL:
MOVTH0,R1
MOVTL0,R2
INT0:
CLREX0
MOVR1,#0F3H
MOVR2,#89H
STAY:
SJMP$
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
movTMOD,#021h
Interrupts_Init:
movIE,#08Bh
lcallInterrupts_Init
六、程序测试方法与结果
基础部分:
单片机按照规定频率显示0-F
在C8051F310单片机开发板烧录代码:
不按KINT键时,数码管以0.5s的间隔依次显示数,按下KINT键,数码管显示速率会在当前的基础上加快十倍。
七、心得体会
通过此次单片机实验编程,对于定时器中断,外部中断的使用和理解都更上了一个层次。
按键触发中断也显得更加简单。
对于单片机的结构和工作方式理解有一定提高。
也尝试使用4*4键盘,F1控制数码管暂停,F2控制数码管继续显示,F3控制数码管复位,获得成功的实验现象,对于键盘扫描控制程序有了更加深刻的认识。
在程序编程开始阶段,会出现001的情况,通过对控制数码管显示部分程序增加条件语句判断,成功修复了程序BUG,有较高的成就感。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 LED 数码管 显示 程序 报告