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

上传人:b****5 文档编号:6818386 上传时间:2023-01-10 格式:DOCX 页数:10 大小:17.15KB
下载 相关 举报
实验四LED数码管显示实验报告.docx_第1页
第1页 / 共10页
实验四LED数码管显示实验报告.docx_第2页
第2页 / 共10页
实验四LED数码管显示实验报告.docx_第3页
第3页 / 共10页
实验四LED数码管显示实验报告.docx_第4页
第4页 / 共10页
实验四LED数码管显示实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

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

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

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

实验四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依次显示。

硬件调试成功。

  提高部分

  通过验收答辩。

程序按要求正常运行。

  本人承诺:

  本人承诺:

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

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

  签字

  年月日

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1