• 领导讲话
  • 自我介绍
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 当前位置: 勤学考试网 > 公文文档 > 计划规划 > 正文

    实验四-LED数码管显示实验报告

    时间:2020-11-26 12:53:36 来源:勤学考试网 本文已影响 勤学考试网手机站

    《微机实验》报告

    PAGE 7

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

    指导教师 曹丹华

    专业班级 光电1202班 姓名 陈敬人 学号

    联系电话

    一、任务要求

    实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。

    实验内容:1.基础部分:利用C8051F310单片机控制数码管显示器。利用末位数码管循环显示数字0-F,显示切换频率为1Hz。2.提高部分:在数码管上显示0→199计数,计数间隔为0.5秒。

    设计思路

    1.基础部分

    C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,T1采用定时器工作方式1,单次定时最长可达1.027s,可以实现1s定时要求。

     定时采用软件查询工作方式,利用JNB TF0, HERE实现。

    置P0.6和P0.7端口为0,位选信号选定末位数码管。

    通过MOVC A, @A+DPTR指令,利用顺序查表法取出显示段码数据。寄存器R0自增1,并赋给A以取出下一个显示段码数据。

    为减短代码长度,利用CJNE指令实现循环结构。当寄存器R0增至0FH后,跳转至开头,重新开始下一轮显示。

    2.提高部分

    定时方式及查表方式同基础部分,由于要实现三个数码管同时显示,因此采用动态扫描显示法。

    三、资源分配

    1.基础部分

    P0.6: 位选信号端口

    P0.7: 位选信号端口

    P1: 输出段码数据

    R0: 存放显示数据

    DPTR: 指向段码数据表首

    2.提高部分

    P0.6: 位选信号端口

    P0.7: 位选信号端口

    R0: 存放个位显示数据

    R5: 存放十位显示数据

    R6: 存放百位显示数据

    P1: 输出段码数据

    DPTR: 指向段码数据表首

    四、流程图

    1.基础部分

    2.提高部分

    五、源代码 (含文件头说明、语句行注释)

    1.基础部分

    ;******************基础部分源代码***************************

    ;Filename: test.asm

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

    ;Designed by: 陈敬人

    ;Date: 2014.11.9

    ;

    ;- Generated Initialization File --

    ;

    $include (C8051F310.inc)

    ORG 0000H

    LJMP MAIN

    ORG 1000H

    MAIN: LCALL Init_Device ;设备初始化

    MOV SP, #40H ;合理设置堆栈位置

    MOV DPTR, #TABLE ;DPTR指向段码数据表首

    MOV TMOD, #01H ;定时器T0工作方式1

    MOV TH0, #06H ;赋计数初值,定时1s

    MOV TL0, #0C6H

    CLR P0.6 ;位选信号,选定末位数码管亮

    CLR P0.7

    START: MOV R0, #00H

    MOV A, R0 ;取显示数据

    MOVC A, @A+DPTR ;查表取段码数据

    MOV P1, A ;送显示数据

    SETB TR0 ;启动定时器

    HERE: JNB TF0, HERE ;等待定时

    CLR TR0 ;停止定时

    CLR TF0 ;溢出位清零

    MOV TH0, #06H ;重装计数初值

    MOV TL0, #0C6H

    CJNE R0, #0FH, CHANGE ;判断数据是否显示完毕,未完则跳转至CHANGE

    SJMP START ;显示完毕,重新开始

    CHANGE: INC R0

    MOV A, R0 ;取下一个显示数据

    MOVC A, @A+DPTR ;查表取段码数据

    MOV P1, A ;送输出显示数据

    SETB TR0 ;重新启动定时器

    SJMP HERE

    TABLE: DB 0FCH, 60H, 0DAH ;段码数据表

    DB 0F2H, 66H, 0B6H

    DB 0BEH, 0E0H, 0FEH, 0F6H

    DB 0EEH, 3EH, 1AH

    DB 7AH, 9EH, 8EH

    ; Peripheral specific initialization functions,

    ; Called from the Init_Device label

    PCA_Init:

    anl PCA0MD, #0BFh

    mov PCA0MD, #000h

    ret

    Timer_Init:

    mov TMOD, #001h

    mov CKCON, #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, 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

    mov XBR1, #040h

    ret

    Interrupts_Init:

    mov IT01CF, #021h

    ret

    ; Initialization function for device,

    ; Call Init_Device from your main program

    Init_Device:

    lcall PCA_Init

    lcall Timer_Init

    lcall Port_IO_Init

    lcall Interrupts_Init

    ret

    END

    2.提高部分

    ;*******************提高部分源代码************************

    ;Filename: 0.asm

    ;Decription: 三位数码管从0到199依次显示,间隔0.5秒。

    ;Designed by: 陈敬人

    ;Date: 2014.11.10

    ;

    ;- Generated Initialization File --

    ;

    $include (C8051F310.inc)

    ORG 0000H

    LJMP MAIN

    ORG 1000H

    MAIN:

    LCALL Init_Device ;调用定义语言

    MOV SP,#20H ;堆栈赋初值

    MOV P1,#00H ;P1口清零,所有LED管熄灭

    MOV TMOD,#01H ;设置T0为定时工作方式1

    MOV TH0,#85H

    MOV TL0,#0EEH ;定时器T0赋初值

    CLR P0.6

    CLR P0.7 ;位选位清零

    START1: MOV R0,#00H ;R0赋初值0 (R0存放个位数码管显示值)

    MOV R5,#00H ;R5赋初值0 (R5存放十位数码管显示值)

    MOV R6,#00H ;R6赋初值0 (R6存放百位数码管显示值)

    SETB TR0 ;开启定时器

    SJMP DIS ;跳转扫描输出子程序

    HERE: JNB TF0,DIS ;判断定时是否溢出,未溢出,则执行扫描输出程序

    CLR TR0

    CLR TF0

    MOV TH0,#85H

    MOV TL0,#0EEH

    CJNE R0,#09H,CHANGE ;判断R0是否达到9

    SJMP START2

    CHANGE:INC R0 ;R0加一

    SETB TR0 ;开启定时器

    SJMP DIS ; 跳转扫描输出子程序

    ;个位满9,十位加一

    START2:MOV R0,#00H ;R0满10归0

    INC R5 ;R5(十位)加一

    CJNE R5,#0AH,START3 ;判断十位是否可以向百位进位

    MOV R5,#00H ;R5(十位)满10归0

    INC R6 ;R6(百位)加一

    CJNE R6,#02H,START3 ;判断百位是否到2

    SJMP START1

    START3:SETB TR0

    SJMP DIS

    ;扫描输出子程序

    DIS: MOV 60H,#00H

    MOV 61H,#40H

    MOV 62H,#80H ;设置位选码(前三个数码管)

    ;MOV 63H,#0C0H ;第四个数码管

    MOV R1,#60H ;位选码赋R1

    DISP:MOV P1,#00H ;所有LED数码管熄灭

    LD0: MOV A,@R1

    ANL P0,#3FH

    ORL P0,A

    MOV DPTR,#TABLE0 ;将表地址赋数据指针

    MOV A,R0

    MOVC A,@A+DPTR ;查表

    MOV P1,A ;数码管显示

    LCALL DL1MS ;调用1ms延时

    MOV P1,#00H ;所有LED数码管熄灭

    INC R1 ;指向下一个LED数码管

    MOV A,@R1

    ANL P0,#3FH

    ORL P0,A

    SJMP SELECT ;根据十位变化特性选择不同段码表

    BACK: MOV A,R5

    MOVC A,@A+DPTR

    MOV P1,A

    LCALL DL1MS

    MOV P1,#00H

    INC R1

    MOV A,@R1

    ANL P0,#3FH

    ORL P0,A

    MOV DPTR,#TABLE

    MOV A,R6

    MOVC A,@A+DPTR

    MOV P1,A

    LCALL DL1MS

    MOV P1,#00H

    SJMP HERE

    SELECT:CJNE R6,#01H,ONE ;判断百位是否为1

    MOV DPTR,#TABLE0 ;当百位为1时十位应该从0开始变化

    SJMP BACK

    ONE:MOV DPTR,#TABLE ;当百位为0时十位应该从1开始变化

    SJMP BACK

    ;1ms延时程序

    DL1MS:

    MOV R4,#4

    D1:

    MOV R7,#253

    NOP

    DJNZ R7,$

    DJNZ R4,D1

    RET

    TABLE0: DB 0FCH, 60H, 0DAH,0F2H, 66H, 0B6H,0BEH, 0E0H, 0FEH, 0F6H

    TABLE: DB 00H, 60H, 0DAH,0F2H, 66H, 0B6H,0BEH, 0E0H, 0FEH, 0F6H ;段码数据表

    public Init_Device

    INIT SEGMENT CODE

    rseg INIT

    ; Peripheral specific initialization functions,

    ; Called from the Init_Device label

    PCA_Init:

    anl PCA0MD, #0BFh

    mov PCA0MD, #000h

    ret

    Timer_Init:

    mov CKCON, #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

    mov P0MDOUT, #0C0h

    mov P1MDOUT, #0FFh

    mov XBR1, #040h

    ret

    ; Initialization function for device,

    ; Call Init_Device from your main program

    Init_Device:

    lcall PCA_Init

    lcall Timer_Init

    lcall Port_IO_Init

    ret

    END

    六、程序测试方法与结果

    1. 基础部分 观察P1端口输出波形(如下图)

    由图可知,LED数码管切换频率为1HZ,跑完一轮经过16s,满足定时要求。且按要求输出0~F。

    2.基础部分 硬件调试

    程序在C8051F310单片机上按要求运行,即第一位数码管从0到F依次显示。硬件调试成功。

    3.提高部分

    通过验收答辩。程序按要求正常运行。

    本人承诺:

    本人承诺:

    本报告内容真实,无伪造数据,无抄袭他人成果。本人完全了解学校相关规定,如若违反,愿意承担其后果。

    签字:

    年 月 日

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问