• 开题报告
  • 社会实践报告
  • 申请报告
  • 研究报告
  • 党政报告
  • 可行性报告
  • 情况报告
  • 事迹材料
  • 申报材料
  • 述廉报告
  • 调查报告
  • 实验报告
  • 整改措施
  • 整改报告
  • 整改方案
  • 考察报告
  • 结题报告
  • 竞聘报告
  • 请示报告
  • 社会调查报告
  • 自查报告
  • 报告写作指导
  • 学习报告
  • 当前位置: 天一资源网 > 完整版 正文

    [华中科技大学单片机实验报告完整版led灯控制器]单片机实验led流水灯

    时间:2020-07-16 08:19:05 来源:天一资源网 本文已影响 天一资源网手机站

    华中科技大学单片机实验报告-完整版-LED灯控制器

     ———————————————————————————————— 作者:

     ———————————————————————————————— 日期:

     

     【任务要求】

     利用C8051F310单片机设计一个LED灯控制器, LED灯外接于P0.0端,LED灯分别按2Hz,1Hz和0.5Hz三种不同频率闪动,各持续10s,在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次,利用单片机内部定时器定时,要求采用中断方式。

     设计思路

     【设计思路】

      设置定时器T0定时时间为25ms,每隔25ms开一次中断,共R1次,R0与R2共同作用构成循400次循环,以达到定时10秒的目的。首先LED灯以2Hz频率闪动,初始赋值R1=10,循环执行10次中断后,即过去0.25s,灯闪烁一次,依次循环,直至10s定时时间到,蜂鸣器响一次,2Hz频率的闪烁结束。然后LED灯以1Hz频率闪动,设置R1=20,与上类似,每过0.5s灯闪烁一次,十秒定时到,蜂鸣器响一次,到下一阶段。最后LED灯以0.5Hz频率闪动,设置R1=40即可,思路同上。当三十秒执行完毕后,使用无条件转移语句跳转到程序开始处,循环以上过程。

     【资源分配】

     R1:定时0.25秒,0.5秒或1秒

     R0,R2:循环400次,定时10秒

     定时器T0:定时中断25ms

     定时器T1:定时10s

     【流程图】 

     【源代码 (含文件头说明、资源使用说明、语句行注释)】

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

     ;-  Generated Initialization File  --

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

     $include (C8051F310.inc)

     public  Init_Device

     INIT SEGMENT CODE

        rseg INIT

     

      ORG 0000H

      ? LJMP MAIN

      ORG 000BH?

      ;T0中断入口

      ?  LJMP IT0P? ? ?   ;转T0中断服务程序

      ? ORG 001BH ?  ;T1中断入口

        LJMP IT1P ;转T1中断服务程序

     ?  ORG 1000H ? ? ;主程序

     MAIN: LCALL Init_Device  ;设备初始化

          MOV SP , #60H ;赋堆栈指针

         MOV TMOD , #11H?

     ;T1定时方式1,T0定时方式1

     ? MOV  R0 , #40 ? ?   ;循环400次

      MOV R2 , #10

     ? MOV

     R1 , #10 ?  ;定时0.25s

       MOV TH1 , #38H

     ;T1置初值

      ? MOV  TL1 , #9EH

     ? MOV  TH0 , #38H? ?

     ;T0置初值

      ? MOV TL0 , #9EH

      ? SETB  EA ;允许中断

     ? SETB  ET0

      SETB  ET1

     LOOP: SETB TR0 ;计时开始

     

       SETB TR1

     ?

     CJNE

     R1 , #0,LOOP ? ;判断是否到达0.25s

      CLR P3.1

      CPL  P0.0 ;取反

     ?  MOV  R1 , #10

     ? CJNE  R0 , #0,LOOP ;判断是否到达10s

     ? CLR   TR0 ?   ;清零

      CLR  TR1

      ?  MOV   R1 , #20 ? ;R1重新赋值

      MOV R0 , #40 ;循环400次

      MOV  R2 , #10

     ? SETB  P3.1

     LOOP1: SETB TR0 ?  

      ;计时

            SETB  TR1

     ? CJNE R1 , #0 ,LOOP1 ;判断是否到达0.5s

      ? CLR P3.1

        CPL P0.0   ;取反

      MOV  R1 , #20

      CJNE R0 , #0 ,LOOP1? ? ;判断是否到达10s

        CLR TR0 ? ;清零

     ? CLR   TR1

     ?  MOV R1 , #40? ?  ;R1再次赋值

      MOV R0 , #40? ;循环

      MOV  R2 , #10

     LOOP2:  SETB  P3.1

        SETB TR0 ?

     ;计时

      SETB  TR1

      CJNE  R1 , #0 ,LOOP2 ? ;判断是否到达1s

      ? CLR

     P3.1

      ?  CPL   P0.0

      ;取反

     ?   MOV  R1 , #40

     ?

     CJNE  R0 , #0 , LOOP2 ? ;判断是否到达10s

      ? CLR TR0 ?     ;清零

      ?  CLR TR1

     HERE:  AJMP  HERE ?   ;等待中断

       

     ? ORG   1500H ? ? ;T0中断服务程序

     IT0P:

      MOV TH0 , #38H? ? ;重置计数初值

         MOV  TL0 , #9EH

      ?

     DJNZ R2 , LOOP0

      ;循环

     ?

     MOV R2 , #10

      ? DEC

     R0

      ?  RETI

     LOOP0:   RETI

        ORG 1600H ? ?  ;T1中断服务程序

     IT1P: MOV  TH1 , #38H? ? ;重置计数初值

     ?  MOV TL1 , #9EH

     ? DEC  R1

      ?  RETI

     

     ; Peripheral specific initialization functions,

     ; Called from the Init_Device label

     PCA_Init:

       anl  PCA0MD, #0BFh

       mov PCA0MD,   #000h

       ret

     Timer_Init:

      mov TMOD,  

     #001h

         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

     Oscillator_Init:

        mov

     OSCICN, #083h

        ret

     Interrupts_Init:

        mov  IE,  #082h

      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 Oscillator_Init

      lcall Interrupts_Init

       ret

     end

     【程序测试方法与结果、软件即硬件性能分析】

     【一】软件测试与性能分析

     1.开始时,LED灯以2Hz频率闪动,P0.0位输入,可以看到P0.0位的闪动。10秒前,蜂鸣器位P3.1一直为低电平。截图如下:

     此时时间为:

     2.10s时刻,蜂鸣器响一次,P3.1恰变为高电平,截图如下:

     

     此时时间为:

     3.之后LED灯以1Hz频率闪动,观察发现,P0.0口的闪动比之前慢,且与显示时间对应,符合设计要求,截图如下:

       

     此时时间为:

     4.20s时刻,蜂鸣器响一次,对应的P3.1口变为高电平。截图如下:

     

     此时时间为:

     5.20s之后,LED灯以0.5Hz频率闪动,观察发现,P0.0口的闪动比之前又慢一些,且与显示时间对应,符合设计要求,截图如下:

       

     此时时间为:

     6.30s时刻,蜂鸣器又响一次,P3.1口变为高电平,截图如下:

       

     此时时间为:

     7.30s之后,LED灯又以2Hz闪动,即循环执行以上过程,截图如下:

     通过以上分析可知程序在每一步骤运行正常,0~10sLED灯内以频率2Hz闪动,10s时蜂鸣器响一次,之后10s~20s间,LED灯以频率1Hz闪动,20s时蜂鸣器又响一次,之后LED灯以频率0.5s闪动,30s时蜂鸣器响一次,30s之后循环以上操作。软件运行结果达到预期目标,测试成功!

     【二】硬件测试(照片说明)

     【思考题】

     1.若想实现3种闪耀方式的持续时间在5s-20s范围内可调,且每种方式的持续时间各不相同,应如何设计程序?

     答:可以通过更改定时器T1的多次循环计时次数,来使10s计时变为其他时间。通过KINT键进入更改模块,使用矩阵键盘以1s的步长增减T1计时时间。

    相关关键词: 2017NFL超级碗视频整场回放完整版 项目管理培训课件(完整版) 2017第36届香港电影金像奖颁奖典礼全程直播视频完整版回放重播 国际歌歌词完整版分享 国际歌歌词完整版

    • 范文大全
    • 教案下载
    • 优秀作文
    • 励志
    • 课件
    • 散文
    • 名人名言