找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4075|回复: 0
收起左侧

单片机自动报时系统设计实验报告 流程图 程序

[复制链接]
ID:112317 发表于 2016-4-7 01:11 | 显示全部楼层 |阅读模式

流程图:
0.png

1.png

2.png


本实验所有资料打包下载: 单片机实验.rar (55.34 KB, 下载次数: 7)



实验报告论文如下:

单片机实验报告
   
       ―自动报时系统设计实验
                   院系电信学院自动化0106
                   姓名王建冬
                   学号200182012

一.     设计任务
1.时间显示功能。用6位数码管显示时,分,秒。
2.利用键盘可以设定当前时间(时,分,秒)
3.2个LED指示灯L1,L2来表示输出状态
4.作息时间表存于ROM中,时间表如下:
08:00开始工作           L1亮2s后灭,L2灭;
11:30 午休               L1亮2s后灭,L2亮一个小时后灭;
12:30下午工作开始       L1亮2s后灭,L2灭;
17:00下班               L1亮2s后灭,L2亮十分钟后灭;
二.     硬件连线图 (附录1)
三.     程序流程图 (附录2)
四.     程序 (附录3)
        
五.     操作说明
      
系统上电显示“LLLLLLLL”后,立即从初始时间7:56:30开始运行。当按下键盘last键后,进入修改模式,此时数码管对应小时的位置闪烁,时间不停,再按一下last,退出修改模式,显示正常。
在修改模式下:按下next键,转换要修改的位置,由数码管相应的位置闪烁,可知将要修改的是小时,分钟,还是秒,此时间也不停止;按下shift键,时间停止,相应的位置加一,如果指向秒的位置则清零,实现修改时间的功能。修改完毕,再按一下last,退出修改模式,显示正常。
六.     心得
       通过实验,更好得理解了MCS-51单片机的硬件系统与指令系统,有了在ADEK51实验设备上开发单片机的能力,同时对键盘扫描/显示芯片8279有了一定的了解,并能熟练应用8279。
由于本实验有一定的复杂性及应用性,所以更强调系统的设计步骤、方法,在实验中还要不断的修改,以使程序尽可能的合理与简化,此次实验增加了自己的开发经验,为以后打下坚实的基础。

程序:
  1. ;附录3:源程序
  2. ;说明:
  3. ;R0指向30,31,32的地址指针,初始值为30 全局
  4. ;R1函数toram的入口,指向20的地址指针   全局
  5. ;R2定时一秒的常数 全局
  6. ;R3接受按键 全局
  7. ;R4报警标志位   全局         r3,r4是函数toram用到的寄存器   局部
  8. ;R5计时器状态标志  全局      r5=00 计时器go  r5=11 计时器stop
  9. ;R6修改状态标志  全局        r6=00 按键无效  r6=ff 进入修改状态,
  10. ;R7函数toram的入口,全局 一个压缩BCD码
  11. ;20H开始的8个数据单元存放时间的BCD码
  12. ;30H,31H,32H依次存放小时,分,秒的压缩BCD码

  13. Z8279   EQU  0FF82H
  14. D8279   EQU  0FF80H                    
  15. LEDMOD  EQU  10H                        
  16. LEDFEQ  EQU  38H                          
  17. LEDCLS  EQU  0D1H                       
  18. LEDWRO  EQU  90H                     
  19. KEY1    EQU  28H    ;修改状态改变
  20. KEY2    EQU  29H    ;修改位置改变         
  21. KEY3    EQU  2AH    ;数值改变   

  22. ORG 0000H
  23. AJMP START
  24. ORG 000BH
  25. AJMP T0INT
  26. ORG  0040H
  27. START:
  28.        MOV SP,#60H
  29.        MOV R1,#20H
  30.        MOV R2,#08H
  31.        MOV A,#00H
  32.        MOV 30H,#07H
  33.        MOV 31H,#56H
  34.        MOV 32H,#30H
  35.        MOV DPTR,#Z8279
  36.        MOV A,#LEDCLS
  37.        MOVX @DPTR,A
  38.        LCALL DELAY
  39.        MOV A,#LEDMOD
  40.        MOVX @DPTR,A
  41.        MOV A,#LEDFEQ
  42.        MOVX @DPTR,A
  43. LOOP22:
  44.        MOV @R1,A
  45.        INC R1
  46.        DJNZ R2,LOOP22      
  47.        LCALL INIT8279
  48. ;------------------------初始化     
  49.        CLR P1.0
  50.        CLR P1.1
  51.       
  52.        MOV R6,#00H                  
  53.        MOV R0,#30H
  54.        MOV R2,#14H
  55.        mov R5,#00h
  56.        MOV R4,#00H          ;清标志位   -报警      
  57.        MOV R7,#00H
  58.        MOV 22H,#00H
  59.        MOV 25H,#00H
  60.        CLR TF0
  61.        MOV TMOD,#01H
  62.        MOV TH0,#4BH
  63.        MOV TL0,#0FCH
  64.        MOV IE,#82H
  65.        SETB TR0
  66. ;---------------------修改时间   
  67. MODIFY:                 
  68.       MOV DPTR,#Z8279                     
  69.       MOVX A,@DPTR
  70.       ANL A,#0FH
  71.       JZ KEY_OUT                ;没有按键 跳出
  72.       MOV A,#40H
  73.       MOVX @DPTR,A
  74.       MOV DPTR,#D8279
  75.       MOVX A,@DPTR              ;A接受按键
  76.       MOV R3,A
  77.       CJNE R3,#KEY1,POSITION    ;判断按键是不是key1,  不是跳转   
  78.       CJNE R6,#00H,PRESS_SEC    ;第一次按key1进入修改状态,(显示闪烁),时间不停   
  79.       MOV R6,#0FFH              ;置标志位                       
  80.       SJMP KEY_OUT              ;跳出
  81. PRESS_SEC:
  82.       MOV R6,#00H               ;第二次按key1跳出修改状态 (不闪烁)
  83.       
  84.       CJNE R5,#00H,MODIFY_OK    ;如果计时停止,恢复计时   
  85.       SJMP KEY_OUT
  86. MODIFY_OK:
  87.       SETB TR0                  ;启动定时器
  88.       SJMP KEY_OUT
  89. POSITION:
  90.       CJNE R3,#KEY2,VALUE       ;判断是否为key2,不是跳转
  91.       CJNE R6,#0FFH,KEY_OUT     ;若未进入修改状态,跳转
  92.       INC R0                    ;若进入修改状态,则移位
  93.       CJNE R0,#33H,JJJ
  94.       MOV R0,#30H
  95. JJJ:
  96.       SJMP KEY_OUT
  97. VALUE:
  98.       CJNE R3,#KEY3,KEY_OUT   ;判断是否为key3,不是跳出
  99.       CJNE R6,#0FFH,KEY_OUT   ;判断是否进入修改状态,没有-跳出
  100.        CLR TR0      ;若已进入,停止计时,准备修改
  101.        MOV R5,#11H        ;标记置位,表明计时停止
  102.        CJNE R0,#32H,WWW
  103.        MOV @R0,#00H
  104.        SJMP KEY_OUT
  105. WWW:      
  106.        MOV A,@R0       ;在相应的位置加一
  107.        ADD A,#01H
  108.        DA A
  109.        MOV @R0,A
  110.        MOV A,R0
  111.        CJNE A,#30H,SIXTY  ;如果不是小时,加到60,
  112.        CJNE @R0,#24H,KEY_OUT  ;是小时,加到24
  113.        MOV @R0,#00H
  114.        SJMP KEY_OUT
  115. SIXTY:  
  116.        CJNE @R0,#60H,KEY_OUT
  117.        MOV @R0,#00H
  118.        SJMP KEY_OUT
  119. KEY_OUT:
  120.            CJNE R6,#0FFH,NODIS  ;如果已进入修改状态,进入闪烁显示状态
  121.            LCALL FLASHON
  122. NODIS:
  123.            LCALL SIREN           ;调用报警程序
  124.            AJMP MODIFY          ;循环
  125. ;------------------------子程序-------------------------
  126. FLASHON:      
  127.            CJNE R0,#30H,JUMP31  ;如果指针指向小时,则小时位闪烁
  128.            MOV R1,#26H                  
  129.            MOV A,@R0
  130.            MOV R7,A
  131.            LCALL TORAM   ;将小时的BCD码送到26H,27H
  132.            MOV DPTR,#Z8279     ;闪烁
  133.            MOV A,#86H
  134.            MOVX @DPTR,A
  135.            MOV DPTR,#D8279
  136.            MOV A,#00H
  137.            MOVX @DPTR,A
  138.            MOV DPTR,#Z8279
  139.            MOV A,#87H
  140.            MOVX @DPTR,A
  141.            MOV DPTR,#D8279
  142.            MOV A,#00H
  143.            MOVX @DPTR,A
  144.            LCALL DELAY

  145.            MOV DPTR,#Z8279  ;将小时的值显示出来
  146.            MOV A,#86H
  147.            MOVX @DPTR,A
  148.            MOV DPTR,#D8279
  149.            MOV A,26H
  150.            MOVX @DPTR,A        
  151.            MOV DPTR,#Z8279  ;将小时的值显示出来
  152.            MOV A,#87H
  153.            MOVX @DPTR,A
  154.            MOV DPTR,#D8279
  155.            MOV A,27H
  156.            MOVX @DPTR,A
  157.            LCALL DELAY
  158.            RET             ;显示完毕,跳出
  159. JUMP31:         
  160.            CJNE R0,#31H,JUMP32  ;如果指针指向 分,则分钟的位置闪烁
  161.            MOV R1,#23H
  162.            MOV A,@R0
  163.            MOV R7,A
  164.            LCALL TORAM
  165.            MOV DPTR,#Z8279
  166.            MOV A,#83H
  167.            MOVX @DPTR,A
  168.            MOV DPTR,#D8279
  169.            MOV A,#00H
  170.            MOVX @DPTR,A
  171.            MOV DPTR,#Z8279
  172.            MOV A,#84H
  173.            MOVX @DPTR,A
  174.            MOV DPTR,#D8279
  175.            MOV A,#00H
  176.            MOVX @DPTR,A
  177.            LCALL DELAY
  178.             
  179.            MOV DPTR,#Z8279
  180.            MOV A,#83H
  181.            MOVX @DPTR,A
  182.            MOV DPTR,#D8279
  183.            MOV A,23H
  184.            MOVX @DPTR,A
  185.            MOV DPTR,#Z8279
  186.            MOV A,#84H
  187.            MOVX @DPTR,A
  188.            MOV DPTR,#D8279
  189.            MOV A,24H
  190.            MOVX @DPTR,A
  191.            LCALL DELAY
  192.            RET
  193. JUMP32:
  194.            CJNE R0,#32H,QIUT  ;如果指针指向秒,则秒位闪烁
  195.            MOV R1,#20H            
  196.            MOV A,@R0
  197.            MOV R7,A
  198.            LCALL TORAM
  199.            MOV DPTR,#Z8279
  200.            MOV A,#80H
  201.            MOVX @DPTR,A
  202.            MOV DPTR,#D8279
  203.            MOV A,#00H
  204.            MOVX @DPTR,A
  205.            MOV DPTR,#Z8279
  206.            MOV A,#81H
  207.            MOVX @DPTR,A
  208.            MOV DPTR,#D8279
  209.            MOV A,#00H
  210.            MOVX @DPTR,A  
  211.            LCALL DELAY
  212.             
  213.            MOV DPTR,#Z8279
  214.            MOV A,#80H
  215.            MOVX @DPTR,A
  216.            MOV DPTR,#D8279
  217.            MOV A,20H
  218.            MOVX @DPTR,A
  219.            MOV DPTR,#Z8279
  220.            MOV A,#81H
  221.            MOVX @DPTR,A
  222.            MOV DPTR,#D8279
  223.            MOV A,21H
  224.            MOVX @DPTR,A
  225.            LCALL DELAY
  226. QIUT:      RET

  227. SIREN:
  228.        PUSH ACC
  229.        MOV A,#00H    ;读取时间t1,与现在时间比较,
  230.        MOV DPTR,#TIMETABLE      ;若相等,置报警位,输出报警信号
  231.        MOVC A,@A+DPTR           ;不等,跳转---比较表中的下一个时间
  232.        CJNE A,30H,NEXT1
  233.        MOV A,#01H
  234.        MOV DPTR,#TIMETABLE
  235.        MOVC A,@A+DPTR
  236.        CJNE A,31H,NEXT1
  237.        MOV A,#02H
  238.        MOV DPTR,#TIMETABLE
  239.        MOVC A,@A+DPTR
  240.        CJNE A,32H,NEXT1
  241.        MOV R4,#0FFH
  242.        SETB P1.0             ;灯1亮2s,灯2灭
  243.        POP ACC
  244.        RET
  245. NEXT1:          ;读取时间t2,与现在时间比较
  246.        MOV A,#03H ;若相等,置报警位,输出报警信号
  247.        MOV DPTR,#TIMETABLE  ;不等,跳转---比较表中的下一个时间
  248.        MOVC A,@A+DPTR
  249.        CJNE A,30H,NEXT2
  250.        MOV A,#04H
  251.        MOV DPTR,#TIMETABLE
  252.        MOVC A,@A+DPTR
  253.        CJNE A,31H,NEXT2
  254.        MOV A,#05H
  255.        MOV DPTR,#TIMETABLE
  256.        MOVC A,@A+DPTR
  257.        CJNE A,32H,NEXT2
  258.        MOV R4,#0FFH
  259.        SETB P1.0         ;灯1亮2s,灯2亮
  260.        SETB P1.1
  261.        POP ACC
  262.        RET
  263. NEXT2:        ;;读取时间t3,与现在时间比较
  264.        MOV A,#06H
  265.        MOV DPTR,#TIMETABLE
  266.        MOVC A,@A+DPTR
  267.        CJNE A,30H,NEXT3
  268.        MOV A,#07H
  269.        MOV DPTR,#TIMETABLE
  270.        MOVC A,@A+DPTR
  271.        CJNE A,31H,NEXT3
  272.        MOV A,#08H
  273.        MOV DPTR,#TIMETABLE
  274.        MOVC A,@A+DPTR
  275.        CJNE A,32H,NEXT3
  276.        MOV R4,#0FFH
  277.        SETB P1.0     ;灯1亮2s,灯2灭
  278.        CLR P1.1
  279.        POP ACC
  280.        RET
  281.       
  282. NEXT3:   ;读取时间t4,与现在时间比较
  283.        MOV A,#09H ;若相等,置报警位,输出报警信号
  284.        MOV DPTR,#TIMETABLE   ;不等,跳转---比较表中的下一个时间
  285.        MOVC A,@A+DPTR
  286.        CJNE A,30H,NEXT4
  287.        MOV A,#0AH
  288.        MOV DPTR,#TIMETABLE
  289.        MOVC A,@A+DPTR
  290.        CJNE A,31H,NEXT4
  291.        MOV A,#0BH
  292.        MOV DPTR,#TIMETABLE
  293.        MOVC A,@A+DPTR
  294.        CJNE A,32H,NEXT4
  295.        MOV R4,#0FFH                     
  296.        SETB P1.0     ;灯1亮2s,灯2亮
  297.        SETB P1.1
  298.        POP ACC
  299.        RET
  300. NEXT4:   ;;读取时间t3,与现在时间比较
  301.        MOV A,#0CH
  302.        MOV DPTR,#TIMETABLE
  303.        MOVC A,@A+DPTR
  304.        CJNE A,30H,NEXT5
  305.        MOV A,#0DH
  306.        MOV DPTR,#TIMETABLE
  307.        MOVC A,@A+DPTR
  308.        CJNE A,31H,NEXT5
  309.        MOV A,#0EH
  310.        MOV DPTR,#TIMETABLE
  311.        MOVC A,@A+DPTR
  312.        CJNE A,32H,NEXT5
  313.        MOV R4,#0FFH                     
  314.        SETB P1.0
  315.        CLR P1.1     ;灯1亮2s,灯2灭
  316. NEXT5:
  317.        POP ACC
  318.        RET   
  319.             
  320. INIT8279:
  321.           PUSH ACC
  322.           PUSH R2
  323.           PUSH R1         
  324.           MOV R1,#20H
  325.           MOV R2,#08H
  326.           MOV DPTR,#Z8279
  327.           MOV A,#LEDWRO
  328.           MOVX @DPTR,A
  329.           MOV DPTR,#D8279
  330. LOOP33: MOV A,@R1
  331.         MOVX @DPTR,A
  332.         INC R1
  333.         DJNZ R2,LOOP33
  334.         POP R1
  335.         POP R2
  336.         POP ACC        
  337.         RET
  338.         
  339. DELAY: PUSH 00H
  340.        PUSH 01H
  341.        MOV R0,#00H
  342. DELAY1:MOV R1,#00H
  343.        DJNZ R1,$
  344.        DJNZ R0,DELAY1
  345.        POP 01H
  346.        POP 00H
  347.        RET
  348.       
  349. TORAM:   PUSH ACC
  350.          PUSH R3
  351.          PUSH R4
  352.          MOV A,R7
  353.          MOV R3,A
  354.          MOV R4,A
  355.          MOV A,#0FH
  356.          ANL A,R3
  357.          MOV DPTR,#LEDSEG
  358.          MOVC A,@A+DPTR
  359.          MOV @R1,A
  360.          INC R1
  361.          MOV A,#0F0H
  362.          ANL A,R4
  363.          SWAP A
  364.          MOV DPTR,#LEDSEG
  365.          MOVC A,@A+DPTR
  366.          MOV @R1,A
  367.          POP R4
  368.          POP R3
  369.          POP ACC
  370.          RET
  371. ;---------------------------------中断服务程序----------
  372. T0INT:
  373.        MOV TH0,#4BH
  374.        MOV TL0,#0FCH
  375.        DJNZ R2,LOOP4
  376.        MOV R2,#14H
  377.        MOV A,32H        ;加一
  378.        ADD A,#01H
  379.        DA A
  380.        MOV 32H,A
  381.        CJNE A,#60H,TRANS
  382.        MOV 32H,#00H
  383.        MOV A,31H
  384.        ADD A,#01H
  385.        DA A
  386.        MOV 31H,A
  387.        CJNE A,#60H,TRANS
  388.        MOV 31H,#00H
  389.        MOV A,30H
  390.        ADD A,#01H
  391.        DA A
  392.        MOV 30H,A
  393.        CJNE A,#24H,TRANS
  394.        MOV 30H,#00H
  395.       
  396. TRANS:            ;拆分送入20H开始的数据段
  397.        MOV R1,#20H
  398.        MOV R7,32H
  399.        LCALL TORAM
  400.        MOV R1,#23H
  401.        MOV R7,31H
  402.        LCALL TORAM      
  403.        MOV R1,#26H
  404.        MOV R7,30H
  405.        LCALL TORAM
  406.        ;CJNE R6,#00H,LOOP4
  407.        LCALL INIT8279   ;显示
  408.       
  409.        CJNE R4,#00H,PPP     ;如果无报警,灯灭           
  410.        CLR P1.0
  411.        SJMP LOOP4
  412. PPP:       INC R4       ;有报警,r4加一,计时
  413. LOOP4:     RETI

  414. LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
  415.         DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
  416. TIMETABLE: DB  08H,00H,00H
  417.            DB  11H,30H,00H
  418.            DB  12H,30H,00H         
  419.            DB  17H,00H,00H
  420.            DB  17H,10H,00H
  421.         END
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表