Traffic Light Project using PIC16F628
โครงงานไฟจราจรโดยใช้ไมโครคอนโทรลเลอร์ PIC16F628 ทำง่ายไม่ซับซ้อนเหมาะสำหรับผู้เริ่มต้น สามารถหาซื้ออุปกรณ์การทดลองได้ง่ายในท้องตลาดทั่วไป PIC16F628 เป็นไมโครคอนโทรลเลอร์ขนาดเล็ก 18 ขา สามารถใช้เป็น output ได้ถึง 13 ขา แต่เราจะใช้ทำโครงงานนี้เพียง 12 ขา ซึ่งเพียงพอในการใช้งานโดยไม่จำเป็นต้องซื้อไมโครคอนโทรลเลอร์ที่ราคาสูงกว่านี้
Port A มี 8 ขา เราจะเลือกใช้ตั้งแต่ RA0-RA3 และ Port B มี 8 ขา เราใช้ทั้งหมด 8 ขา รวมกันทั้งหมด 12 ขา สำหรับขับหลอด LED จำนวน 12 หลอด
วิธีการทำ ต่อขา RA0-RA3 และ RB0-RB7 ไปที่หลอด LED โดยผ่านตัวต้านทาน 470Ω ต่อขา OSC1,OSC2 ด้วยคริสตัส 4 MHz แต่ละขาต่อด้วย C 22pF ลง GND สวิตซ์รีเซ็ตจะต่อหรือไม่ก็ได้ถ้าต้องการต่อใช้ R 4.7kΩ ต่อเข้าขา MCLR และอีกทางหนึ่งต่อใส่ปุ่มกดลง GND สุดท้ายต่อ Vss ลง GND และ VDD ใส่แหล่งจ่ายไฟ 5V. DC จะเหลือขา RA4 ที่เราไม่ได้ใช้ก็ลอยไว้อย่างนั้นก็ได้
ขั้นตอนการเขียนโปรแกรม เริ่มต้น ให้ไฟจราจรทิศที่ 1 เป็นไฟเขียวเป็นเวลา Wait1 มิลลิวินาที จากนั้นกระพริบ Wait2 มิลลิวินาที ตามด้วยไฟเหลืองติดค้างเป็นเวลา Wait3 มิลลิวินาที สุดท้ายกลับเป็นไฟแดงทุกทิศ ทำแบบนี้ให้ครบทุกทิศและกลับมาเริ่มต้นใหม่
ตัวแปร Wait1, Wait2, Wait3 สามารถแก้ไขได้ในโปรแกรม
define OSC 4
TRISA=%00000000
PORTA=%00000000
TRISB=%00000000
PORTB=%00000000Rl1 VAR PORTA.0
Yl1 VAR PORTA.1
Gl1 VAR PORTA.2
Rl2 VAR PORTA.3
Yl2 VAR PORTB.0
Gl2 VAR PORTB.1
Rl3 VAR PORTB.2
Yl3 VAR PORTB.3
Gl3 VAR PORTB.4
Rl4 VAR PORTB.5
Yl4 VAR PORTB.6
Gl4 VAR PORTB.7
Wait1 var word
Wait2 var word
Wait3 var wordWait1=400
Wait2=40
Wait3=200main:
gosub Go1
gosub Go2
gosub Go3
gosub Go4
goto mainGo1:
PORTA=%00000000
PORTB=%00000000
HIGH Gl1
HIGH Rl2
HIGH Rl3
HIGH Rl4
pause Wait1
Low Gl1
pause Wait2
High Gl1
pause Wait2
Low Gl1
pause Wait2
High Gl1
pause Wait2
Low Gl1
pause Wait2
High Gl1
pause Wait2
Low Gl1
High Yl1
pause Wait3
Low Yl1
High Rl1
pause Wait3
ReturnGo2:
PORTA=%00000000
PORTB=%00000000
HIGH Rl1
HIGH Gl2
HIGH Rl3
HIGH Rl4
pause Wait1
Low Gl2
pause Wait2
High Gl2
pause Wait2
Low Gl2
pause Wait2
High Gl2
pause Wait2
Low Gl2
pause Wait2
High Gl2
pause Wait2
Low Gl2
High Yl2
pause Wait3
Low Yl2
High Rl2
pause Wait3
ReturnGo3:
PORTA=%00000000
PORTB=%00000000
HIGH Rl1
HIGH Rl2
HIGH Gl3
HIGH Rl4
pause Wait1
Low Gl3
pause Wait2
High Gl3
pause Wait2
Low Gl3
pause Wait2
High Gl3
pause Wait2
Low Gl3
pause Wait2
High Gl3
pause Wait2
Low Gl3
High Yl3
pause Wait3
Low Yl3
High Rl3
pause Wait3
ReturnGo4:
PORTA=%00000000
PORTB=%00000000
HIGH Rl1
HIGH Rl2
HIGH Rl3
HIGH Gl4
pause Wait1
Low Gl4
pause Wait2
High Gl4
pause Wait2
Low Gl4
pause Wait2
High Gl4
pause Wait2
Low Gl4
pause Wait2
High Gl4
pause Wait2
Low Gl4
High Yl4
pause Wait3
Low Yl4
High Rl4
pause Wait3
Return
ตัวอย่าง