這是我上個月做的單片機交通燈設計,用了一個星期的時間,
附件里面包含交通燈的單片機源代碼,
和proteus(proteus)仿真工程文件以及設計的文檔都是自己原創的,
請大家多多指教
最終呈現的結果是:通行時間30s,間隔時間 3s,在間隔時間里黃燈閃爍3次每0.5s閃爍一次
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei截圖_20250109023638.png (607.77 KB, 下載次數: 0)
下載附件
proteus原理圖
2025-1-9 02:36 上傳
單片機源程序如下:- ;8255的地址
- PA EQU 08H
- PB EQU 0AH
- PC EQU 0CH
- CONW EQU 0EH
- ;8253的地址
- AD82530 EQU 10H
- AD82531 EQU 12H
- AD82532 EQU 14H
- AD8253CONW EQU 16H
- ;============================
- STACK SEGMENT STACK
- DB 200 DUP(0)
- STACK ENDS
- ;============================
- DATA SEGMENT
- ;延時
- ONE DB 6 ;燈組1延時
- TWO_1 DB 1 ;燈組2亮延時
- TWO_2 DB 1 ;燈組2滅延時
- THREE DB 6 ;燈組3延時
- FOUR_1 DB 1 ;燈組4亮延時
- FOUR_2 DB 1 ;燈組4滅延時
- ;閃爍次數
- C2 DB 2 ;閃爍3次
- C4 DB 2
- ;燈組定義
- TF1 BYTE 081h ;第一組燈
- TF2 BYTE 082h ;第二組燈亮(黃燈亮)
- TF3 BYTE 080h ;第二組燈滅(黃燈滅)
- TF4 BYTE 024h ;第三組燈
- TF5 BYTE 044h ;第四組燈亮(黃燈亮)
- TF6 BYTE 004h ;第四組燈滅(黃燈滅)
- DATA ENDS
- ;=============================
- CODE SEGMENT
- ASSUME CS:CODE, DS:DATA
- START:
- PUSH DS
- MOV AX, DATA
- MOV DS, AX
- ;=================
- ;設置中斷向量8253
- CLI
- MOV AX, 0
- MOV ES, AX
- MOV SI, 08H
- MOV AX, OFFSET TIME_INT
- MOV ES:[SI], AX
- MOV AX, CS
- MOV ES:[SI+2], AX
- ;=================
- ;初始化8255A
- MOV AL, 80H
- OUT CONW, AL
- ;初始化8253
- MOV AL, 36H
- OUT AD8253CONW, AL
- MOV AX, 32500 ;計數初值,0.5s
- OUT AD82530, AL
- MOV AL, AH
- OUT AD82530, AL
- ;===============
- W:
- JMP W ;循環等待中斷
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;第一組燈判斷
- DENG1: MOV AL, ONE
- CMP AL, 0 ;中斷判斷
- JNE DENG1ON ;跳轉第一組燈
- JE DENG2 ;跳轉第二組燈判斷
- DENG1ON:
- DEC ONE ;定時減1
- MOV DX,PC
- MOV AL,TF1 ;第一組燈亮
- OUT DX,AL
- RET
- ;第二組燈判斷
- DENG2:
- ;第二組燈亮判斷
- DENG2_1:
- MOV AL, TWO_1
- CMP AL, 0 ;中斷判斷
- JNE DENG2ON ;跳轉第二組燈亮
- JE DENG2_2 ;跳轉第二組燈滅判斷
-
- DENG2ON:
- DEC TWO_1 ;定時減1
- MOV DX,PC
- MOV AL,TF2 ;第二組燈亮
- OUT DX,AL
- RET
-
- ;第二組燈暗判斷
- DENG2_2:
- MOV AL, TWO_2
- CMP AL, 0 ;中斷判斷
- JNE DENG2OFF ;跳轉第二組燈滅
- CMP C2,0 ;判斷閃爍次數
- JE DENG3 ;跳轉第三組燈判斷
-
- DENG2OFF:
- DEC TWO_2
- MOV DX,PC
- MOV AL,TF3 ;第二組燈滅
- OUT DX,AL
- CMP C2,0 ;閃爍次數未到
- JNE RE_DENG2 ;重置第二組燈
- RET
- ;第二組燈重置
- RE_DENG2:
- DEC C2
- MOV AL,1
- MOV TWO_1,AL
- MOV TWO_2,AL
- RET
- ;第三組燈判斷
- DENG3: MOV AL, THREE
- CMP AL, 0 ;中斷判斷
- JNE DENG3ON ;跳轉第三組燈
- JE DENG4 ;跳轉第四組燈
- DENG3ON:
- DEC THREE
- MOV DX,PC
- MOV AL,TF4 ;第三組燈亮
- OUT DX,AL
- RET
- ;第四組燈判斷
- DENG4:
- DENG4_1:
- MOV AL, FOUR_1
- CMP AL, 0 ;中斷判斷
- JNE DENG4ON ;跳轉第四組燈亮
- JE DENG4_2 ;跳轉第四組燈滅判斷
-
- DENG4ON:
- DEC FOUR_1
- MOV DX,PC
- MOV AL,TF5 ;第四組燈亮
- OUT DX,AL
- RET
-
- DENG4_2:
- MOV AL, FOUR_2
- CMP AL, 0 ;中斷判斷
- JNE DENG4OFF ;跳轉第四組燈滅
- CMP C4,0 ;判斷閃爍次數
- JE RE_ALL ;重置所有燈組
-
- DENG4OFF:
- DEC FOUR_2
- MOV DX,PC
- MOV AL,TF6 ;第四組燈滅
- OUT DX,AL
- CMP C4,0 ;閃爍次數未到
- JNE RE_DENG4 ;重置第四組燈
- RET
- ;重置第四組燈
- RE_DENG4:
- DEC C4
- MOV AL,1
- MOV FOUR_1,AL
- MOV FOUR_2,AL
- RET
- ;重置所有燈組
- RE_ALL:
- MOV AL,6
- MOV ONE,AL
- MOV THREE,AL
- MOV AL,2
- MOV C2,AL
- MOV C4,AL
- MOV AL,1
- MOV TWO_1,AL
- MOV TWO_2,AL
- MOV FOUR_1,AL
- MOV FOUR_2,AL
- RET
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- TIME_INT: ;定時器中斷處理函數
- CALL DENG1
- IRET
- CODE ENDS
- END START
復制代碼 仿真工程:
交通燈控制系統.rar
(26.93 KB, 下載次數: 0)
2025-1-9 02:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|