实验四LED数码管显示程序报告.docx

上传人:b****2 文档编号:2218695 上传时间:2023-05-02 格式:DOCX 页数:17 大小:127.23KB
下载 相关 举报
实验四LED数码管显示程序报告.docx_第1页
第1页 / 共17页
实验四LED数码管显示程序报告.docx_第2页
第2页 / 共17页
实验四LED数码管显示程序报告.docx_第3页
第3页 / 共17页
实验四LED数码管显示程序报告.docx_第4页
第4页 / 共17页
实验四LED数码管显示程序报告.docx_第5页
第5页 / 共17页
实验四LED数码管显示程序报告.docx_第6页
第6页 / 共17页
实验四LED数码管显示程序报告.docx_第7页
第7页 / 共17页
实验四LED数码管显示程序报告.docx_第8页
第8页 / 共17页
实验四LED数码管显示程序报告.docx_第9页
第9页 / 共17页
实验四LED数码管显示程序报告.docx_第10页
第10页 / 共17页
实验四LED数码管显示程序报告.docx_第11页
第11页 / 共17页
实验四LED数码管显示程序报告.docx_第12页
第12页 / 共17页
实验四LED数码管显示程序报告.docx_第13页
第13页 / 共17页
实验四LED数码管显示程序报告.docx_第14页
第14页 / 共17页
实验四LED数码管显示程序报告.docx_第15页
第15页 / 共17页
实验四LED数码管显示程序报告.docx_第16页
第16页 / 共17页
实验四LED数码管显示程序报告.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验四LED数码管显示程序报告.docx

《实验四LED数码管显示程序报告.docx》由会员分享,可在线阅读,更多相关《实验四LED数码管显示程序报告.docx(17页珍藏版)》请在冰点文库上搜索。

实验四LED数码管显示程序报告.docx

实验四LED数码管显示程序报告

实验名称LED数码管显示程序

指导教师

专业班级姓名学号

联系电话

 

本人承诺:

本报告内容真实,无伪造数据,无抄袭他人成果。

本人完全了解学校相关规定,如若违反,愿意承担其后果。

签字:

年月日

 

一、任务要求

实验内容:

利用C8051F310单片机控制数码管显示器

基本要求:

利用末位数码管循环显示数字0-F,显示切换频率为1Hz。

提高要求:

在数码管上显示0→1999计数,计数间隔为0.5秒,KINT键可开启10倍加速。

二、设计思路

基础部分:

选中末位数码管,将对应数值输入P1显示,TO控制延时

提高部分:

通过对P0.6、P0.7赋予不同的值,进行位选管。

再将对应的数字输入显示管中,点亮。

TO控制延时。

KINT键开启加速。

 

三、资源分配

标准部分:

R0-数码管计数器

数据表TABLE-存储对应段码的值

提高部分:

R1-TH0初值

R2-TLO初值

R3-判断标志位,选择对应的数码管亮

R4、R5、R6、R7对应数位显示计数器

R0-数码管计数器

数据表TABLE-存储对应段码的值

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

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

movP0MDOUT,#0FDh

movXBR1,#040h

ret

;Initializationfunctionfordevice,

;CallInit_Devicefromyourmainprogram

Init_Device:

lcallPCA_Init

lcallTimer_Init

lcallPort_IO_Init

ret

end

 

2、提高部分

;------------------------------------

;-GeneratedInitializationFile--

;------------------------------------

$include(C8051F310.inc)

publicInit_Device

INITSEGMENTCODE

rsegINIT

;Peripheralspecificinitializationfunctions,

;CalledfromtheInit_Devicelabel

 

ORG0000H

LJMPMAIN

ORG0003H

LJMPINT0

ORG000BH

LJMPIT0P

ORG001BH

LJMPIT1P

 

ORG0100H

MAIN:

LCALLInit_Device

CLRP2.0

CLRP3.1

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

 

START:

MOVA,R0;提取R0对应的段码

MOVCA,@A+DPTR

CLRP0.6

CLRP0.7

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;取当前应显示字符

MOVCA,@A+DPTR

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

MOVR6,#00H

INCR7

RET

CJNER7,#02H,RETURN2

MOVR7,#00H

RET

RETURN2:

RET

 

CHOOSE0:

MOVA,R3

CJNEA,#04H,CHOOSE1

DECR3

MOVA,R4

LJMPL2

CHOOSE1:

CJNEA,#03H,CHOOSE2

DECR3

MOVA,R5

LJMPL2

CHOOSE2:

CJNEA,#02H,CHOOSE3

DECR3

MOVA,R6

LJMPL2

CHOOSE3:

DECR3

MOVA,R7

LJMPL2

 

JUDGE0:

CJNER3,#03H,JUDGE1

CLRP0.6

CLRP0.7

RET

JUDGE1:

CJNER3,#02H,JUDGE2

CJNER7,#00H,DENT1

CJNER6,#00H,DENT1

CJNER5,#00H,DENT1

MOVP1,#00H

RET

DENT1:

SETBP0.6

CLRP0.7

RET

JUDGE2:

CJNER3,#01H,JUDGE3

CJNER7,#00H,DENT2

CJNER6,#00H,DENT2

MOVP1,#00H

RET

DENT2:

CLRP0.6

SETBP0.7

RET

JUDGE3:

CJNER7,#00H,DENT3

MOVP1,#00H

RET

DENT3:

SETBP0.6

SETBP0.7

RET

 

INITIAL:

MOVTH0,R1

MOVTL0,R2

RET

 

INT0:

CLREX0

MOVR1,#0F3H

MOVR2,#89H

RETI

 

STAY:

SJMP$

TABLE:

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H

 

;Peripheralspecificinitializationfunctions,

;CalledfromtheInit_Devicelabel

PCA_Init:

anlPCA0MD,#0BFh

movPCA0MD,#000h

ret

Timer_Init:

movTMOD,#021h

movCKCON,#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

movP0MDOUT,#0FDh

movXBR1,#040h

ret

Interrupts_Init:

movIE,#08Bh

ret

;Initializationfunctionfordevice,

;CallInit_Devicefromyourmainprogram

Init_Device:

lcallPCA_Init

lcallTimer_Init

lcallPort_IO_Init

lcallInterrupts_Init

ret

end

六、程序测试方法与结果

基础部分:

单片机按照规定频率显示0-F

提高部分:

在C8051F310单片机开发板烧录代码:

不按KINT键时,数码管以0.5s的间隔依次显示数,按下KINT键,数码管显示速率会在当前的基础上加快十倍。

 

七、心得体会

通过此次单片机实验编程,对于定时器中断,外部中断的使用和理解都更上了一个层次。

按键触发中断也显得更加简单。

对于单片机的结构和工作方式理解有一定提高。

也尝试使用4*4键盘,F1控制数码管暂停,F2控制数码管继续显示,F3控制数码管复位,获得成功的实验现象,对于键盘扫描控制程序有了更加深刻的认识。

在程序编程开始阶段,会出现001的情况,通过对控制数码管显示部分程序增加条件语句判断,成功修复了程序BUG,有较高的成就感。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2