Site icon Tài liệu miễn phí cho Giáo viên, học sinh.

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:

   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: 

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();
                 }
     }
Exit mobile version