编程语言
首页 > 编程语言> > AT89C52流水灯+外部中断INT0+定时器(汇编语言)

AT89C52流水灯+外部中断INT0+定时器(汇编语言)

作者:互联网

AT89C52流水灯+外部中断INT0+定时器(汇编语言)

任务要求

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

思路

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

汇编代码

		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		;循环
        RET
DELAY1:MOV R6,#200   		;50ms延时子程序
     L1:MOV R7,#200
     L2:NOP
        DJNZ R7,L2
        DJNZ R6,L1
        RET           		;子程序返回
        END

仿真电路

仿真电路图

硬件电路

一共用了67个灯,大部分灯为并联接到一个口
在这里插入图片描述

实际效果

<iframe allowfullscreen="true" data-mediaembed="youku" id="vWf0CAwI-1608609323831" src="https://player.youku.com/embed/XNTAyMDAxMjg4NA=="></iframe>

新能源1第一组流水灯

后言

汇编程序不难,难的是焊接工作和排线,焊接大概花费了3-4天的时间,希望这篇文章能给以后学习相关综合实验的师弟师妹一个参考,非专业非科班某单片机课设留。

标签:定时器,ACALL,SETB,DELAY1,MOV,P1,INT0,CLR,AT89C52
来源: https://blog.csdn.net/m0_52814892/article/details/111519759