Home >> TL CHUYÊN NGÀNH >> Vi điều khiển >> Button >> Red light – mô phỏng hệ thống đèn giao thông

Red light – mô phỏng hệ thống đèn giao thông

Red light, hệ thống đèn giao thông đơn giản

   Red light mô phỏng hệ thống đèn giao thông gồm 3 led tương ứng với 3 màu – led màu đỏ, led màu vàng và led màu xanh. Về sự hoạt động, chúng tôi lập trình mô phỏng để 3 led này có thời gian on/off và sự chuyển đổi giữa các led giống như hệ thống đèn giao thông trong thực tế, cụ thể  như sau:

  • Led xanh, thời gian sáng 20s
  • Led vàng, thời gian sáng 3s
  • Led đỏ, thời gian sáng 30s

   Sự hoạt động sẽ được lặp lại mãi mãi. Thời gian sáng của các led sẽ được đếm ngược và hiển thị trên 2 digit led 7 đoạn, bạn có thể xem lại “project Quét 2 led 7 đoạn trên pic 16f877A” để hiểu hơn cách quét led 7 đoạn.

Sơ lượt qua phần kết nối của project Traffic light: 

  • CMU: vi điều khiển pic 16f877A, 8 Mhz
  • Led 7 đoạn: PORTD và PORTE điều khiển led 2 led 7 đoạn; RD0…RD1 kết nối A, B…DP của led 7 đoạn; RE0, RE1 điều khiển 2 led 7 đoạn.
  • 3 Led đỏ, xanh, vàng: kết nối đến RC1, RC2, RC3.

Về phần code lập trình, bạn nên tìm hiểu 3 đoạn code hiển thị của 3 led như sau:

Code điều khiển led màu đỏ:

void dendo(){
             for(i=1;i<=30;i++){
                 PORTC.F1=1;
                 PORTC.F2=0;
                 PORTC.F3=0;
                 for(j=0;j<=50;j++){
                    PORTD=mask(i%10);
                    PORTE.F0=1;
                    delay_ms(10);
                    PORTE.F0=0;
                    PORTD=mask(i/10);
                    PORTE.F1=1;
                    delay_ms(10);
                    PORTE.F1=0;
                     }
                 }
              }

Code điều khiển led màu vàng:

void denvang(){
             for(i=1;i<=3;i++){
                 PORTC.F1=0;
                 PORTC.F2=1;
                 PORTC.F3=0;
                 for(j=0;j<=50;j++){
                    PORTD=mask(i%10);
                    PORTE.F0=1;
                    delay_ms(10);
                    PORTE.F0=0;
                    PORTD=mask(i/10);
                    PORTE.F1=1;
                    delay_ms(10);
                    PORTE.F1=0;
                     }
                 }
              }

Code điều khiển led màu xanh:

void denxanh(){
             for(i=1;i<=20;i++){
                 PORTC.F1=0;
                 PORTC.F2=0;
                 PORTC.F3=1;
                 for(j=0;j<=50;j++){
                    PORTD=mask(i%10);
                    PORTE.F0=1;
                    delay_ms(10);
                    PORTE.F0=0;
                    PORTD=mask(i/10);
                    PORTE.F1=1;
                    delay_ms(10);
                    PORTE.F1=0;
                     }
                 }
              }

Sau khi bạn đã hiểu rõ các đoạn code trên, bạn có thể xem tiếp phần code hoàn chỉnh của project và sau đó bạn tự tạo cho mình một project với trình biên dịch mikroC compiler để thực hành nhé.

/*Traffic light
  Date: 16/12/2010
  Author: Huynh Minh Trung
  Website: http:giaoan.link
*/

unsigned short i,j,num,dk; // Khai bao bien

//Chuong trinh chuyen doi so thap phan sang led 7 doan
unsigned short mask(unsigned short num){
                                       switch (num){
                                 case 0: return 0xc0;
                                 case 1: return 0xf9;
                                 case 2: return 0xa4;
                                 case 3: return 0xb0;
                                 case 4: return 0x99;
                                 case 5: return 0x92;
                                 case 6: return 0x82;
                                 case 7: return 0xf8;
                                 case 8: return 0x80;
                                 case 9: return 0x90;
                                                   }
                                      }

///////Chuong trinh led 2 digit 7seg///////////////////////
void dendo(){
             for(i=1;i<=30;i++){
                 PORTC.F1=1;
                 PORTC.F2=0;
                 PORTC.F3=0;
                 for(j=0;j<=50;j++){
                    PORTD=mask(i%10);
                    PORTE.F0=1;
                    delay_ms(10);
                    PORTE.F0=0;
                    PORTD=mask(i/10);
                    PORTE.F1=1;
                    delay_ms(10);
                    PORTE.F1=0;
                     }
                 }
              }
void denvang(){
             for(i=1;i<=3;i++){
                 PORTC.F1=0;
                 PORTC.F2=1;
                 PORTC.F3=0;
                 for(j=0;j<=50;j++){
                    PORTD=mask(i%10);
                    PORTE.F0=1;
                    delay_ms(10);
                    PORTE.F0=0;
                    PORTD=mask(i/10);
                    PORTE.F1=1;
                    delay_ms(10);
                    PORTE.F1=0;
                     }
                 }
              }
void denxanh(){
             for(i=1;i<=20;i++){
                 PORTC.F1=0;
                 PORTC.F2=0;
                 PORTC.F3=1;
                 for(j=0;j<=50;j++){
                    PORTD=mask(i%10);
                    PORTE.F0=1;
                    delay_ms(10);
                    PORTE.F0=0;
                    PORTD=mask(i/10);
                    PORTE.F1=1;
                    delay_ms(10);
                    PORTE.F1=0;
                     }
                 }
              }

void main(){
///////////Khai bao bien///////////////////////
            TRISA=0X00;
            TRISB=0xFF;
            TRISD=0x00;
            PORTD=0X00;
            TRISC=0X00;
            TRISE=0X00;
            PORTE=0X00;
          while(1){
                  denxanh();
                  denvang();
                  dendo();
                 }
     }

Bài ngẫu nhiên

Led đơn-led 7 đoạn- button-interrupt

Sử dụng button và ngắt interrupt để điều khiển led đơn và led 7 đoạn …

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.