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個燈,大部分燈為并聯接到一個口

實際效果
新能源1第一組流水燈
后言
匯編程式不難,難的是焊接作業和排線,焊接大概花費了3-4天的時間,希望這篇文章能給以后學習相關綜合實驗的師弟師妹一個參考,非專業非科班某單片機課設留,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/239045.html
標籤:其他
上一篇:大三上學期就要結束了,為下學期找實習,立個Flag!
下一篇:軟考網路工程師備考經驗
