单片机交流
直播中

王雪

7年用户 968经验值
私信 关注
[问答]

如何用AT89S52单片机控制彩灯图形及继电器?

如何用AT89S52单片机控制彩灯图形及继电器?

回帖(1)

张早

2021-10-8 15:21:50
任务要求

用 AT89S52 单片机控制彩灯(流水灯)图形及继电器。即:
①AT89S52 单片机上电时控制由发光二极管组成的图形有规律地不停闪烁(亮、灭的时间不能为 5 秒!);
②当按下按钮(任什么时候候)时彩灯图形全灭,而继电器工做吸合(控制~220V 30W灯泡亮)5 秒,5 秒后返回彩灯闪烁。编程

思路

中断可采起外部中断INT0方式,定时器可采用模式一(一次定时50ms,循环100次即为5s);
流水灯部分,咱们的想法是作一个“CXK”运球的动做,顺序为左——中——右——中——左,并经过换位实现流水灯的变化,具体代码实现以下:ide

汇编代码

                ORG 0000H                         ;单片机上电后从0000H地址执行                AJMP START                        ;跳转到主程序存放地址处                ORG 0003H                        ;设置主程序开始地址            AJMP INSER                        ;设置中断入口地址                ORG 0030H                 MOV SP,#60H                ;设置堆栈起始地址为60H  START:                SETB TR0                        ;容许启动定时器                SETB EX0                        ;中断设置优先级                SETB IT0                MOV R3,#32H                 ;R3初值                SETB EA                        ;字卸宪开关                        MOV A,#0FFH            ;灯全灭              MOV P1,A              MOV A,#0FEH             ;1灯亮              MOV P1,A              MOV R2,#08H   LOOP1:RL A                          ;左移,向右流水灯亮(向右流水灯)               MOV P1,A               ACALL DELAY1               DJNZ R2,LOOP1               MOV R2,#05H  LOOP2:MOV A,#0FFH            ;灯全灭(外圈灯闪烁5次)               MOV P1,A               ACALL DELAY1               MOV A,#00H              ;灯全亮               MOV P1,A               ACALL DELAY1               DJNZ R2,LOOP2              MOV A,#0FFH       ;灯全灭              MOV P1,A              ACALL DELAY1              MOV A,#0EEH      ;0和4灯亮              MOV P1,A              MOV R2,#10H LOOP3:RL A                     ;(流水灯)               MOV P1,A           ;右移,0和4,1和5,2和6,3和7灯亮                 ACALL DELAY1               DJNZ R2,LOOP3               MOV A,#0FFH                        MOV P1,A           ;灯灭               MOV R2,#10H               MOV A,#0EEH               MOV P1,A               ACALL DELAY1               MOV A,#77H LOOP4:RR A              ;左移,(流水灯)               MOV P1,A               ACALL DELAY1               DJNZ R2,LOOP4               MOV R2,#08H               MOV A,#0FEH LOOP5:RR A                     ;左移,向右流水灯亮(向左流水灯)               MOV P1,A               ACALL DELAY1               DJNZ R2,LOOP5               MOV A,#0FFH               MOV P1,A               MOV R2,#05H   LOOP6:MOV A,#0FFH     ;灯全灭(外圈灯闪烁5次)               MOV P1,A               ACALL DELAY1               MOV A,#00H        ;灯全亮               MOV P1,A               ACALL DELAY1               DJNZ R2,LOOP6               MOV R0,#05H        MOV A,#0F0H       ;(运球)        MOV P0,A                  ;身体部位亮        SETB P2.0        SETB P2.1        SETB P2.2                      ;三个球都灭        CLR P2.3        CLR P2.4        CLR P2.5                       ;CXK亮  LOOP7:CLR P2.0                       ;左球亮        CLR P2.3                       ;C亮        SETB P2.4        SETB P2.5                      ;XK不亮        ACALL DELAY1        SETB P2.0                      ;左球灭        SETB P2.3               ;C灭        CLR P2.1                       ;中间球亮        CLR P2.4                       ;X亮        ACALL DELAY1        SETB P2.1                     ;中间球灭        SETB P2.4                     ;X灭        CLR P2.2                       ;右球亮        CLR P2.5                       ;K亮        ACALL DELAY1        SETB P2.2                      ;右球灭        SETB P2.5                      ;K灭        CLR P2.1                       ;中间球亮        CLR P2.3        CLR P2.4        CLR P2.5                       ;CXK全亮               ACALL DELAY1        SETB P2.1                      ;中间球灭        SETB P2.3        SETB P2.4        SETB P2.5                      ;CXK全灭        CLR P2.0                       ;左球亮        ACALL DELAY1        DJNZ R0,LOOP7             ;循环5次        MOV R1,#0AH                LOOP8:MOV A,0FFH             ;(人亮,球不亮,且人闪烁)        MOV P0,A           ;身体不亮          SETB P2.0        SETB P2.1        SETB P2.2               ;三个球都要不亮         ACALL DELAY1             MOV A,#0F0H             MOV P0,A           ;身体亮             CLR P2.3             CLR P2.4             CLR P2.5                   ;CXK亮             ACALL DELAY1             CPL A             MOV P0,A                ;身体灭            SETB P2.3             SETB P2.4             SETB P2.5               ;CX灭             ACALL DELAY1             DJNZ R1,LOOP8             MOV R1,#0AH             AJMP START  HERE:SJMP HERE                         ;查询中断                   ORG 0200H  INSER:SJMP MIE                        ;跳转中断服务程序            MIE:MOV P0,#0FFH         ;灯灭                MOV P1,#0FFH                 ;灯灭                MOV P2,#0FFH                 ;灯灭                CLR P3.7                ACALL DELAY                ;调用定时器                MOV R3,#32H                 ;循环100次                SETB P3.7                RETI                                 ;中断子程序返回 DELAY:MOV TMOD,#01H        ;定时器基础设计,模式1,查询方式                MOV TL0,#0B0H                ;每隔50ms定时一次                MOV TH0,#3CH                ;同上                JNB TF0,$                        ;查询判断TF0的溢出                CLR TF0                        ;清0                DJNZ R3,DELAY                ;循环        RETDELAY1:MOV R6,#200                   ;50ms延时子程序     L1:MOV R7,#200     L2:NOP        DJNZ R7,L2        DJNZ R6,L1        RET                           ;子程序返回        END仿真电路

举报

更多回帖

发帖
×
20
完善资料,
赚取积分