微机原理实验四LED数码管显示实验图文精.docx
- 文档编号:23451660
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:21
- 大小:1.36MB
微机原理实验四LED数码管显示实验图文精.docx
《微机原理实验四LED数码管显示实验图文精.docx》由会员分享,可在线阅读,更多相关《微机原理实验四LED数码管显示实验图文精.docx(21页珍藏版)》请在冰豆网上搜索。
微机原理实验四LED数码管显示实验图文精
实验名称LED数码管显示实验
指导教师
专业班级
姓名
学号
联系方式
一实验要求:
实验四LED数码管显示实验
实验目的:
理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。
实验内容:
利用C8051F310单片机控制数码管显示器
基本要求:
利用末位数码管循环显示数字0-F,显示切换频率为1Hz。
提高要求:
在数码管上显示0→199计数,计数间隔为0.5秒。
二、设计思路
1基本要求:
对F310信号频率进行8分频,再对定时器进行48分频,以使在一次定时时间范围内实现1s定时。
采用查询方式进行定时。
P0.6,P0.7作为位选信号来一直选择末位数码管输出信号。
再利用R0作为相对寻址来储存数据并赋值给A。
通过MOVCA,@A+DPTR指令,利用顺序查表法取出显示段码数据。
寄存器R0自增1,并赋给A以取出下一个显示段码数据。
2提高要求:
依然对信号频率八分频,对定时器进行48分频,通过P0,6,P0.7进行位控选择数码管输出,定时器定时0.5s,当溢出时进入中断,并通过中断程序将段位控制按序加一,R3,R6,R7分别储存第一第二第三位数码管段位码,利用A为中间变量,通过P1输出储存的值,查表输出数码管值,达到119时结束。
三、资源分配
1基本要求:
P0.6:
位选信号端口
P0.7:
位选信号端口
P1:
输出段码数据
R0:
存放显示数据
DPTR:
指向段码数据表首
2提高要求:
P0.6:
位选信号端口
P0.7:
位选信号端口
P1:
输出段码数据
DPTR:
指向段码数据表首
R3,R6,R7:
分别储存第三第二第一位数码管数据
四、流程图
1基本要求
2提高要求:
主程序
接--2提高要求:
动态扫描程序中断程序
五、源代码(含文件头说明、语句行注释
1基本要求:
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
LCALLInit_Device
MOVSP,#40H
MOVDPTR,#TAB;将DPTR地址指向表头
MOVTMOD,#01H;定时器采用T0定时方式一MOVTH0,#06H;定时器赋予初值
MOVTL0,#0C6H
CLRP0.6;选择末位数码管
CLRP0.7
START:
MOVR0,#00H;赋初值0
CLRA
MOVCA,@A+DPTR;查表输出
MOVP1,A
SETBTR0;定时器开始工作
HERE:
JNBTF0,HERE;等待溢出
CLRTR0
CLRTF0
MOVTH0,#06H;重新赋予初值
MOVTL0,#0C6H
CJNER0,#0FH,NEXT;等待末位数码管到F
SJMPSTART
NEXT:
INCR0;R0加一
MOVA,R0
MOVCA,@A+DPTR
MOVP1,A;P1输出
SETBTR0
SJMPHERE;踏步
org1000h
TAB:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB0FEH,0E6H,0EEH,3EH,1AH,7AH,9EH,8EH
;------------------------------------
;-GeneratedInitializationFile--
;------------------------------------
$include(C8051F310.inc
publicInit_Device
INITSEGMENTCODE
rsegINIT
;Peripheralspecificinitializationfunctions,;CalledfromtheInit_Devicelabel
PCA_Init:
anlPCA0MD,#0BFh
movPCA0MD,#000h
ret
Timer_Init:
movCKCON,#002h
ret
Port_IO_Init:
;P0.0-Unassigned,Open-Drain,Digital;P0.1-Unassigned,Open-Drain,Digital;P0.2-Unassigned,Open-Drain,Digital;P0.3-Unassigned,Open-Drain,Digital;P0.4-Unassigned,Open-Drain,Digital;P0.5-Unassigned,Open-Drain,Digital;P0.6-Unassigned,Open-Drain,Digital;P0.7-Unassigned,Open-Drain,Digital
;P1.0-Unassigned,Push-Pull,Digital;P1.1-Unassigned,Push-Pull,Digital;P1.2-Unassigned,Push-Pull,Digital;P1.3-Unassigned,Push-Pull,Digital;P1.4-Unassigned,Push-Pull,Digital;P1.5-Unassigned,Push-Pull,Digital;P1.6-Unassigned,Push-Pull,Digital;P1.7-Unassigned,Push-Pull,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
movP1MDOUT,#0FFh
movP2MDOUT,#0C0h
movXBR1,#040h
ret
;Initializationfunctionfordevice,
;CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallTimer_Init
lcallPort_IO_Init
ret
END
2提高部分:
ORG0000H
LJMPSTART
ORG000BH
LJMPTI00
ORG0300H
START:
LCALLInit_Device
MOVR3,#00H;百位数码管赋予初值
MOVR6,#00H;十位数码管赋予初值
MOVR7,#01H;个位数码管赋予初值
MOV60H,#00H;设置位控码
MOV61H,#40H
MOV62H,#80H
MOVTMOD,#01H;选择定时器T0方式一
SETBET0;开外中断T0
SETBEA
MOVTH0,#131;定时器赋予初值
MOVTL0,#99
MAIN:
LJMPDISP;跳入动态输出子程序
MAIN1:
LCALLCOUNTER
AJMPMAIN;重新扫描
;=================动态输出子程序==================
DISP:
MOVSP,#30H;设置堆栈指针
MOVR1,#60H;位选指针赋初值
MOVP1,#00H;灯全灭
;=================
LD0:
MOVA,@R1;取出位选码
ANLP0,#3FH;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位
ORLP0,A;输出位选信号
MOVA,R7;取出段选码
MOVDPTR,#TAB;DPTR指向段选码表第一个数据
MOVCA,@A+DPTR;查表,取出段选码
MOVP1,A;输出段选码
LCALLDL1MS;延时1ms,灯亮1ms
MOVP1,#00H;灯全灭
INCR1;位选指针加一
MOVA,@R1;取出位选码
ANLP0,#3FH;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位
ORLP0,A;输出位选信号
MOVA,R6;取出段选码
MOVDPTR,#TAB;DPTR指向段选码表第一个数据
MOVCA,@A+DPTR;查表,取出段选码
MOVP1,A;输出段选码
LCALLDL1MS;延时1ms,灯亮1ms
MOVP1,#00H;灯全灭
INCR1
MOVA,@R1;取出位选码
ANLP0,#3FH;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位
ORLP0,A;输出位选信号
MOVA,R3;取出段选码
MOVDPTR,#TAB;DPTR指向段选码表第一个数据
MOVCA,@A+DPTR;查表,取出段选码
MOVP1,A;输出段选码
LCALLDL1MS;延时1ms,灯亮1ms
MOVP1,#00H;灯全灭
LJMPMAIN1;返回主程序
;===============延时1ms子程序=============
ORG0050H
DL1MS:
MOVR4,#4;延时程序通过R4,R5实现
D1:
MOVR5,#253
NOP
DJNZR5,$
DJNZR4,D1
RET
ORG0100H
COUNTER:
SETBTR0;定时器开启
RET
;中断程序
TI00:
MOVTH0,#133;中断程序重新赋予初值
MOVTL0,#99
INCR7;个位加一
CJNER7,#0BH,S1;判断个位是否进位
MOVR7,#01H;重新将个位归零
CJNER6,#00H,S2;判断此时十位是否显示
MOVR6,#01H;若不显示则开启显示
S2:
INCR6;十位加一
CJNER6,#0BH,S1;判断十位是否进位
CJNER3,#00H,S3;判断百位是否显示
MOVR3,#01H
S3:
INCR3;百位加一
MOVR6,#01H;十位重新归零
CJNER3,#03H,S1;判断百位是否到2
MOVP1,#00H;如果到200则数码管全熄灭
SJMP$;踏步停止
S1:
RETI;中断返回
ORG0200H
;===============段选码表==============;
TAB:
DB00H,0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H;$include(C8051F310.inc
publicInit_Device
INITSEGMENTCODE
rsegINIT
;Peripheralspecificinitializationfunctions,
;CalledfromtheInit_Devicelabel
PCA_Init:
anlPCA0MD,#0BFh
movPCA0MD,#000h
ret
Timer_Init:
movCKCON,#002h
ret
Port_IO_Init:
;P0.0-Unassigned,Open-Drain,Digital;P0.1-Unassigned,Open-Drain,Digital;P0.2-Unassigned,Open-Drain,Digital;P0.3-Unassigned,Open-Drain,Digital;P0.4-Unassigned,Open-Drain,Digital;P0.5-Unassigned,Open-Drain,Digital;P0.6-Unassigned,Push-Pull,Digital;P0.7-Unassigned,Push-Pull,Digital
;P1.0-Unassigned,Push-Pull,Digital;P1.1-Unassigned,Push-Pull,Digital;P1.2-Unassigned,Push-Pull,Digital;P1.3-Unassigned,Push-Pull,Digital;P1.4-Unassigned,Push-Pull,Digital;P1.5-Unassigned,Push-Pull,Digital;P1.6-Unassigned,Push-Pull,Digital;P1.7-Unassigned,Push-Pull,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,#0C0h
movP1MDOUT,#0FFh
movXBR1,#040h
ret
;Initializationfunctionfordevice,
;CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallTimer_Init
lcallPort_IO_Init
ret
END
六程序测试方法与结果、软件性能分析
1基本要求:
测试方法:
观察P1端口输出波形
由图可知,LED数码管切换频率为1HZ,跑完一轮经过16s,满足定时要求。
2提高要求:
1首先测试时间,在中断程序处设置断点,观察每次计数的时间:
时间为0.5s,符合要求。
2硬件测试:
在测试上测试是否能正常运行并实现功能
硬件测试知,该程序可实现功能并正常运行。
ORG0000H
LJMPSTART
ORG000BH
LJMPTI00
ORG0300H
START:
LCALLInit_Device
MOVR3,#00H;百位数码管赋予初值
MOVR6,#00H;十位数码管赋予初值
MOVR7,#01H;个位数码管赋予初值
MOV60H,#00H;设置位控码
MOV61H,#40H
MOV62H,#80H
MOVTMOD,#01H;选择定时器T0方式一SETBET0;开外中断T0
SETBEA
MOVTH0,#83H;定时器赋予初值
MOVTL0,#63H
MAIN:
LJMPDISP;跳入动态输出子程序
MAIN1:
LCALLCOUNTER
AJMPMAIN;重新扫描
;=================动态输出子程序==================
DISP:
MOVSP,#30H;设置堆栈指针
MOVR1,#60H;位选指针赋初值
MOVP1,#00H;灯全灭
;=================
LD0:
MOVA,@R1;取出位选码
ANLP0,#3FH;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位
ORLP0,A;输出位选信号
MOVA,R7;取出段选码
MOVDPTR,#TAB;DPTR指向段选码表第一个数据
MOVCA,@A+DPTR;查表,取出段选码
MOVP1,A;输出段选码
LCALLDL1MS;延时1ms,灯亮1ms
MOVP1,#00H;灯全灭
INCR1;位选指针加一
MOVA,@R1;取出位选码
ANLP0,#3FH;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位
ORLP0,A;输出位选信号
MOVA,R6;取出段选码
MOVDPTR,#TAB;DPTR指向段选码表第一个数据
MOVCA,@A+DPTR;查表,取出段选码
MOVP1,A;输出段选码
LCALLDL1MS;延时1ms,灯亮1ms
MOVP1,#00H;灯全灭
INCR1
MOVA,@R1;取出位选码
ANLP0,#3FH;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位
ORLP0,A;输出位选信号
MOVA,R3;取出段选码
MOVDPTR,#TAB;DPTR指向段选码表第一个数据
MOVCA,@A+DPTR;查表,取出段选码
MOVP1,A;输出段选码
LCALLDL1MS;延时1ms,灯亮1ms
MOVP1,#00H;灯全灭
LJMPMAIN1
;===============延时1ms子程序=============ORG0050H
DL1MS:
MOVR4,#6;延时程序通过R4,R5实现D1:
MOVR5,#252
NOP
DJNZR5,$
DJNZR4,D1
RET
ORG0100H
COUNTER:
SETBTR0;定时器开启
RET
;中断程序
TI00:
MOVTH0,#83H;中断程序重新赋予初值MOVTL0,#63H
INCR7;个位加一
CJNER7,#0BH,S1;判断个位是否进位
MOVR7,#01H;重新将个位归零
CJNER6,#00H,S2;判断此时十位是否显示MOVR6,#01H;若不显示则开启显示
S2:
INCR6;十位加一
CJNER6,#0BH,S1;判断十位是否进位
CJNER3,#00H,S3;判断百位是否显示
MOVR3,#01H
S3:
INCR3;百位加一
MOVR6,#01H;十位重新归零
CJNER3,#03H,S1;判断百位是否到2
MOVP1,#00H;如果到200则数码管全熄灭
SJMP$;踏步停止
S1:
RETI;中断返回
ORG0200H
;===============段选码表==============;
TAB:
DB00H,0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H;
$include(C8051F310.inc
publicInit_Device
INITSEGMENTCODE
rsegINIT
;Peripheralspecificinitializationfunctions,
;CalledfromtheInit_Devicelabel
PCA_Init:
anlPCA0MD,#0BFh
movPCA0MD,#000h
ret
Timer_Init:
movCKCON,#002h
ret
Port_IO_Init:
;P0.0-Unassigned,Open-Drain,Digital;P0.1-Unassigned,Open-Drain,Digital;P0.2-Unassigned,Open-Drain,Digital;P0.3-Unassigned,Open-Drain,Digital;P0.4-Unassigned,Open-Drain,Digital;P0.5-Unassigned,Open-Drain,Digital;P0.6-Unassigned,Push-Pull,Digital;P0.7-Unassigned,Push-Pull,Digital
;P1.0-Unassigned,Push-Pull,Digital;P1.1-Unassigned,Push-Pull,Digital
微机实验余成驹光电1202班U201214134;P1.2;P1.3;P1.4;P1.5;P1.6;P1.7;P2.0;P2.1;P2.2;P2.3-Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,Unassigned,Push-Pull,Push-Pull,Push-Pull,Push-Pull,Push-Pull,Push-Pull,DigitalDigitalDigitalDigitalDigitalDigitalOpen-Drain,DigitalOpen-Drain,DigitalOpen-Drain,DigitalOpen-Drain,DigitalmovmovmovretP0MDOUT,P1MDOUT,XBR1,#0C0h#0FFh#040h;Initializationfunctionfordevice,;CallInit_DevicefromyourmainprogramInit_Device:
lcallPCA_InitlcallTimer_InitlcallPort_IO_Init
微机实验余成驹光电1202班U201214134retEND本人承诺:
本报告内容真实,无伪造数据,无抄袭他人成果。
本人完全了解学校相关规定,如若违反,愿意承担其后果。
签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验 LED 数码管 显示 图文