workshop 16f877 6sx
DESCRIPTION
เอกสารใบงานการทดลอง PIC BASIC PRO COMPILERTRANSCRIPT
46
Assignment 39 Traffic Light Control Systemwith Count down Display
จุดประสงค เพื่อสามารถออกแบบระบบการควบคุมไฟสัญญาณจราจรแบบที่มีตัวเลขนับถอยหลัง กอนการเปลี่ยนสัญญาณไฟดวยระบบไมโครคอนโทรลเลอร
ทฤษฎีพ้ืนฐาน ปจจุบันระบบไฟสัญญาณจราจรมีการนํ าเอาระบบแสดงผลตัวเลขนับถอยหลังเพื่อบอกระยะเวลารอการเปลี่ยนสัญญาณไฟ โดยเฉพาะตามสี่แยกซึ่งจะตองมีระบบการนับถอยหลังเพื่อรอเวลาการเปลี่ยนสัญญาณไฟอยางนอย 2 ชุด ชุดของถนน A และชุดของถนน B ตามรูปที่ 1
รูปที่ 1 แสดงผังการติดตั้งระบบไฟสัญญาณจราจร
รูปที่ 2 แสดงวงจรระบบควบคุมไฟสัญญาณจราจรดวยไมโครคอนโทรลเลอรการทํ างานของโปรแกรม
47
เริ่มแรก เมื่อกดสวิทช SW1 ระบบจะเริ่มทํ างานโดยหลอดไฟ RED1 กับ GREEN2 จะติดเพื่อใหรถบนถนน A-A วิ่งผานสี่แยกไปไดกอน เริ่มนับถอยหลัง 100 วินาที เมื่อนับครบถึง 0 ระบบจะเขาสูการกระพริบเตือนเปลี่ยนสัญญาณไฟ 5 ครั้ง จากนั้นจะเปลี่ยนเปนหลอด RED2 กับ GREEN1 ติดเพื่อใหรถบนถนนB-B วิ่งผานสี่แยกโดยเริ่มนับเวลาถอยหลัง 60 วินาที เมื่อนับครบจะกลับไปเริ่มทํ างานใหม
มีตอหนาถัดไป
'sw1 = start traffic light''RB5 = RED1, RB4 = YELLOW1, RB3 = GREEN1'RB2 = RED2, RB1 = YELLOW2, RB0 = GREEN2'sw1 VAR PORTA.3RED1 VAR PORTB.5YELLOW1 VAR PORTB.4GREEN1 VAR PORTB.3RED2 VAR PORTB.2YELLOW2 VAR PORTB.1GREEN2 VAR PORTB.0t VAR BYTE'TRISC = %00000000TRISD = %00000000PORTC = 255PORTD = 255digit VAR BYTEnum VAR WORDmax_count VAR WORDdisp VAR BYTEi VAR BYTEj VAR BYTE'''initialTRISB = 0TRISA = 255adcon1 = 7PORTB = 0'start:
IF sw1 = 1 Then startHigh RED1High GREEN2loop1:
max_count = 100GoSub countdownFor t = 1 TO 5
Toggle GREEN2Pause 300Toggle GREEN2Pause 300
Next t
48
Low GREEN2Pause 200High YELLOW2Pause 2000Low YELLOW2Low GREEN2Pause 200High RED2Pause 1000Low RED1Pause 200High GREEN1max_count = 60GoSub countdownFor t = 1 TO 5
Toggle GREEN1Pause 300Toggle GREEN1Pause 300
Next tLow GREEN1Pause 200High YELLOW1Pause 2000Low YELLOW1Low GREEN1Pause 200High RED1Pause 1000Low RED2High GREEN2GoTo loop1End
‘------------ End of Main Program ---------------‘‘ ------------ Subroutine Program -------------------------------‘countdown:
For num = max_count TO 0 STEP -1For i = 0 TO 20
For j = 0 TO 2digit = num DIG jLookUp digit,[$c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90],dispPORTC = dispLookUp j,[$fe,$fd,$fb,$f7],PORTDPause 5PORTD = $ff
Next jNext i
Next numReturn
‘‘ ------------- End of Subroutine -------------------------------