仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (129.63 KB, 下載次數: 77)
下載附件
2021-7-20 04:13 上傳
1. 設計一個智能十字路口交通燈控制器。
2.用單片機控制控制LED紅、黃、綠指示燈,模擬指示十字路口通行狀態。
3.控制東西、南北方向的十字路口交通信號燈。
4.東西向通行時間為80s,南北向通行時間為60s,緩沖時間為3s。
5.東西方向紅燈時間=南北方向綠燈時間+黃燈緩沖時間,反之亦然。
6.鼓勵新創意,增加新功能。
第二章 系統設計方案2.1設計思路
1.采用AT89S52單片機作為主控芯片及外圍控制芯片,設計十字路口交通燈控制器的硬件電路。
2.采用AT89S52單片機匯編語言,完成十字路口交通燈控制器的軟件編程。
3.采用LED顯示和中斷定時電路,利用定時器T0產生每10ms一次的中斷,每100次中斷為1s。對兩個方向分別顯示紅、綠、黃燈,以及相應的剩余時間(倒計時)。
4.用獨立式按鍵實現特殊車輛(消防車、救護車、警車)通行的控制功能。
5.設置闖紅燈報警功能
2.2方案設計
利用AT89S52單片機完成交通信號燈控制器的設計,該交通信號燈控制器由一條主干道和一條支干道匯合成十字路口,在每個入口處設置紅、綠、黃三色信號燈,數碼管顯示剩余時間
。紅燈亮禁止通行,綠燈亮允許通行,黃燈亮則給行駛中的車輛有時間停在禁行線外。用紅、綠、黃發光二極管作信號燈,8個共陰極數碼管顯示剩余時間,
單片機源程序如下:
- ;***********************************************
- ;***********************************************
- ;*********內存、IO口分配************************
- SHANSHUO EQU 20H ;閃爍標志
- JISHU1 EQU 30H ;計數變量
- JISHU2 EQU 31H
- TIME_0 EQU 32H ;中斷變量
- TIME_1 EQU 33H ;
- SHUCHU EQU P0 ;數碼管段輸出
- G_1 BIT P1.0 ;定義LED
- Y_1 BIT P1.1
- R_1 BIT P1.2
- G_2 BIT P1.3
- Y_2 BIT P1.4
- R_2 BIT P1.5
- WEI1 BIT P2.0 ;數碼管片選
- WEI2 BIT P2.1
- WEI3 BIT P2.2
- WEI4 BIT P2.3
- K1 BIT P3.0 ;緊急按鍵
- ;********************************************
- ORG 0000H
- SJMP START
- ORG 000BH ;定時器0中斷入口
- LJMP T0_0
- ORG 0030H
- START:
- MOV P1,#0 ;LED高電平有效,清零
- MOV P2,#0 ;數碼管片選高電平有效,清零
- CLR SHANSHUO ;閃爍標志清零
- CLR JISHU1 ;計數變量清零
- CLR JISHU2 ;
- CLR TIME_0 ;中斷變量清零
- CLR TIME_1 ;
- MOV TMOD,#01H ;定時器0方式1
- MOV TH0,#3CH ;裝初值,50MS
- MOV TL0,#0B0H ;
- SETB EA ;開總中斷
- SETB ET0 ;開定時器中斷
- SETB TR0 ;啟動定時器
- ;***************狀態1*************************
- ZT1:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#83 ;計數裝初值
- MOV JISHU2,#80 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB G_1 ;東西綠燈亮
- SETB R_2 ;南北紅燈亮
- AA: CALL DISPLAY ;顯示
- MOV A,R7 ;
- CJNE A,#0,AA ;判斷時間是否已到
- ;*************狀態2***************************
- ZT2:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#3 ;計數器重裝初值
- MOV JISHU2,#3 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB Y_1 ;東西黃燈點亮
- SETB R_2 ;南北紅燈繼續亮
- BB: JNB SHANSHUO,CC ;判斷閃爍標志位
- SETB Y_1 ;是一則點亮黃燈
- AJMP QW ;跳到顯示
- CC: CLR Y_1 ;是零則熄滅黃燈,達到閃爍的效果
- QW: CALL DISPLAY ;顯示
- MOV A,R6 ;
- CJNE A,#0,BB ;判斷是否到了三秒
- CLR SHANSHUO ;清閃爍
- ;*************狀態3***************************
- ZT3:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#60 ;計數器重新裝初值
- MOV JISHU2,#63 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB R_1 ;東西紅燈點亮
- SETB G_2 ;南北綠燈點亮
- EE: CALL DISPLAY ;顯示
- MOV A,R6 ;
- CJNE A,#0,EE ;判斷時間是否到了
- ;*************狀態4***************************
- ZT4:
- MOV P1,#0 ;LED清零
- MOV JISHU1,#3 ;計數器重新裝初值
- MOV JISHU2,#3 ;
- MOV R6,JISHU1 ;
- MOV R7,JISHU2 ;
- SETB R_1 ;東西紅燈點亮
- SETB Y_2 ;南北黃燈點亮
- FF: JNB SHANSHUO,QR ;判斷閃爍位是1/0
- SETB Y_2 ;1則點亮黃燈
- SJMP QE ;顯示
- QR: CLR Y_2 ;0則熄滅黃燈
- QE: CALL DISPLAY ;顯示
- MOV A,R6 ;
- CJNE A,#0,FF ;判斷時間到沒
- CLR SHANSHUO ;閃爍清零
- LJMP START ;跳 循環
- ;**************中斷子程序*********************
- T0_0:
- CLR EA ;關總中斷
- MOV TH0,#3CH ;重新裝初值
- MOV TL0,#0B0H ;
- INC TIME_0 ;定時器變量加1
- INC TIME_1 ;
- MOV A,TIME_0 ;
- CJNE A,#0AH,NEXT ;判斷是否到了500MS
- MOV TIME_0,#0 ;到則清變量
- CPL SHANSHUO ;給閃爍位取反
- JB K1,NEXT ; 按鍵K1處理,緊急處理
- MOV A,P1 ;讀取當前LED顯示
- MOV P1,#0 ;LED清零
- MOV P0,#0 ;P0口輸出0
- MOV P2,#0 ;P2口輸出0,不顯示
- SETB R_1 ;點亮紅色指示燈
- SETB R_2 ;點亮紅色指示燈
- JNB K1,$ ;等待按鍵松開
- MOV P1,A ;P1口LED還原
- NEXT: MOV A,TIME_1 ;
- CJNE A,#20,QUIT ;判斷是否到了1S,沒到則退出
- MOV TIME_1,#0 ;到則清變量
- DEC R7 ;寄存器自減一
- DEC R6 ;寄存器自減一
- QUIT: SETB EA ;開總中斷
- RETI ;中斷返回
- ;**************顯示子程序*********************
- DISPLAY:
- PUSH ACC ;進堆棧
- MOV A,R7 ;裝載東西方向顯示緩存值到寄存器A
- MOV B,#0AH ;寄存器B裝載10
- DIV AB ;進制轉換
- MOV DPTR,#TAB ;十位
- MOVC A,@A+DPTR ;查表,獲得東西方向10位上的顯示段碼
- MOV SHUCHU,A ; 顯示段碼輸出到顯示端口
- SETB WEI1 ; 10位的數碼管位選信號設置為1,點亮數碼管
- CALL DELAY1MS ; 延時1ms
- CLR WEI1 ; 10位的數碼管位選信號設置為0,熄滅數碼管
- MOV A,B ;個位
- MOV DPTR,#TAB ;查表,獲得東西方向個位上的顯示段碼
- MOVC A,@A+DPTR ;
- MOV SHUCHU,A ;顯示段碼輸出到顯示端口
- SETB WEI2 ;個位的數碼管位選信號設置為1,點亮數碼管
- CALL DELAY1MS ;延時1ms
- CLR WEI2 ;個位的數碼管位選信號設置為0,熄滅數碼管
- MOV A,R6 ;裝載東西方向顯示緩存值到寄存器A
- MOV B,#0AH ;寄存器B裝載10
- DIV AB ;進制轉換
- MOV DPTR,#TAB ;十位
- MOVC A,@A+DPTR ;查表,獲得南北方向10位上的顯示段碼
- MOV SHUCHU,A ;顯示段碼輸出到顯示端口
- SETB WEI3 ;10位的數碼管位選信號設置為1,點亮數碼管
- CALL DELAY1MS ;延時1ms
- CLR WEI3 ;10位的數碼管位選信號設置為0,熄滅數碼管
- MOV A,B ;個位
- MOV DPTR,#TAB ;查表,獲得東西方向個位上的顯示段碼
- MOVC A,@A+DPTR ;
- MOV SHUCHU,A ;顯示段碼輸出到顯示端口
- SETB WEI4 ;個位的數碼管位選信號設置為1,點亮數碼管
- CALL DELAY1MS ;延時1ms
- CLR WEI4 ;個位的數碼管位選信號設置為0,熄滅數碼管
- POP ACC ;退出堆棧
- RET ;返回
- ;**************** 延時 ***********************
- DELAY1MS: ;延時1ms子函數
- MOV R1,#01H
- MOV R2,#0FFH
- DD: DJNZ R2,DD
- DJNZ R1,DD
- RET
- ;****************共陽數碼管字符表******************************
- TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- END
復制代碼
所有資料51hei附件下載:
Keil和Proteus源程序.zip
(139.59 KB, 下載次數: 96)
2021-7-19 22:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
十字路口交通燈.docx
(609.41 KB, 下載次數: 67)
2021-7-19 22:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|