BÀI 44 : ĐÈN GIAO THÔNG NGÃ TƯ PIC16F877A CCS FULL

1:59:00 AM
Chào các bạn trong bài đăng trước mình đã hướng dẫn các bạn về đèn giao thông ngã tư nhưng là chạy 1 cách tư động nên trong bài này hướng dẫn các bạn điều khiển bằng nút nhấn nha !
Ảnh mô phỏng protues.
đèn giao thông ngã tư pic16f877a
Đây là code chương trình.
#include <16f877a.h>
#use delay (clock=4000000)
#use fast_io(d)
#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#byte portd=0x08
#bit ra0=0x05.0 // Binh thuong
#bit ra1=0x05.1 // Gio cao diem
#bit ra2=0x05.2 // Ban dem
#bit ra3=0x05.3 // Nut chuyen che do
#bit rb0=0x06.0 // led1
#bit rb1=0x06.1 // led2
#bit rb2=0x06.2 // led3
#bit rb3=0x06.3 // led4
#bit rc0=0x07.0 // x1
#bit rc1=0x07.1 // v1
#bit rc2=0x07.2 // d1
#bit rc3=0x07.3 // x2
#bit rc4=0x07.4 // v2
#bit rc5=0x07.5 // d2
#define bat 1
#define tat 0
//--------------------------------
int m[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int num1,donvi1,chuc1;
int num2,donvi2,chuc2;
//---------------------delay-------------
void delay(int ms)
 {
  int a,b;
  for(a=0;a<ms;a++)
   for(b=0;b<50;b++)
    {
    }
 }
//-------------hien thi---------------------
void ht1(void)
 {
  int c;
  for(c=0;c<50;c++)
   {
   chuc1=num1/10;
   donvi1=num1%10;
   output_d(m[chuc1]);
   rb2=bat;
   delay(10);
   rb2=tat;
   output_d(m[donvi1]);
   rb3=bat;
   delay(10);
   rb3=tat;
   chuc2=num2/10;
   donvi2=num2%10;
   output_d(m[chuc2]);
   rb0=bat;
   delay(10);
   rb0=tat;
   output_d(m[donvi2]);
   rb1=bat;
   delay(10);
   rb1=tat;
   }
 }

void main(void)

 {
 set_tris_d(0x00);
 set_tris_b(0xff);
 set_tris_c(0x00);
 set_tris_a(0xff);
 output_d(0xFF);
 rc0=tat;
 rc5=tat;
 rc1=tat;
 rc2=tat;
 rc3=tat;
 rc4=tat;
  while(true)
   {
///--------------che do binh thuong -----------------   
   if(!ra0)
   {
   delay_ms(100);
   while(!ra0)
   {
   binhthuong:
    num1=35;
    num2=30;
    do
    { 
     set_tris_b(0x00);
     rc0=bat;
     rc5=bat;
     rc1=tat;
     rc2=tat;
     rc3=tat;
     rc4=tat;
     ht1();
     num1--;
     num2--;
    }
                  while(num2!=0);
                  num2=num1=5;
                  do
                   {
                   set_tris_b(0x00);
                   rc1=bat;
                   rc5=bat;
                   rc0=tat;
                   rc2=tat;
                   rc3=tat;
                   rc4=tat;
                   ht1();
                   num1--;
                   num2--;
                   }
     while(num2!=0);
     num1=30;
     num2=35;
     do
     {
     set_tris_b(0x00);
     rc2=bat; 
     rc3=bat;
     rc0=tat;
     rc1=tat;
     rc4=tat;
     rc5=tat;
     ht1();
     num1--;
     num2--;
     }
                   while(num1!=0);
                   num1=num2=5;
                    do
                     {
                   set_tris_b(0x00);
                   rc2=bat;
                   rc4=bat;
                   rc0=tat;
                   rc1=tat;
                   rc3=tat;
                   rc5=tat;
                   ht1();
                   num1--;
                   num2--;
                      }
                  while(num1!=0);
                  goto binhthuong;
    }
    }
//---------------gio cao diem--------------------------    
   if(!ra1)
   {
   delay_ms(100);
   while(!ra1)
   {
    caodiem:
    num1=60;
    num2=55;
    do
    { 
     set_tris_b(0x00);
     rc0=bat;
     rc5=bat;
     rc1=tat;
     rc2=tat;
     rc3=tat;
     rc4=tat;
     ht1();
     num1--;
     num2--;
    }
                  while(num2!=0);
                  num2=num1=5;
                  do
                   {
                   set_tris_b(0x00);
                   rc1=bat;
                   rc5=bat;
                   rc0=tat;
                   rc2=tat;
                   rc3=tat;
                   rc4=tat;
                   ht1();
                   num1--;
                   num2--;
                   }
     while(num2!=0);
     num1=55;
     num2=60;
     do
     {
     set_tris_b(0x00);
     rc2=bat; 
     rc3=bat;
     rc0=tat;
     rc1=tat;
     rc4=tat;
     rc5=tat;
     ht1();
     num1--;
     num2--;
     }
                   while(num1!=0);
                   num1=num2=5;
                    do
                     {
                   set_tris_b(0x00);
                   rc2=bat;
                   rc4=bat;
                   rc0=tat;
                   rc1=tat;
                   rc3=tat;
                   rc5=tat;
                   ht1();
                   num1--;
                   num2--;
                      }
                  while(num1!=0);
                  goto caodiem;
    }
    }
    
//-------------------ban dem---------------
   if(!ra2)
   {
   delay_ms(100);
   while(!ra2)
   {
                   dem:
                   rc4=bat;
                   rc1=bat;
                   delay_ms(1000);
                   rc4=tat;
                   rc1=tat;
                   goto dem;
   }
   }
//---------------------- ket thuc chuong trinh ----------------------
   }
 }  
Link download project : Click here

Share this

Related Posts

Previous
Next Post »

17 nhận xét

Write nhận xét
April 22, 2017 at 11:34 PM delete

lam thế nào để nap code vào cho mạch vậy ạ

Reply
avatar
April 23, 2017 at 12:39 AM delete

Làm mạch xong rồi nạp code thôi chứ sao !

Reply
avatar
April 23, 2017 at 4:27 AM delete

sử dụng Pickit 2 hoặc burn để nạp !

Reply
avatar
April 24, 2017 at 7:34 AM delete

bạn ơi, lúc làm mạch thật thì nối thẳng chân led với chân chip à, hay phải qua 1 mạch nào khác nữa?

Reply
avatar
April 25, 2017 at 5:01 AM delete

Đây chỉ là mạch mô phỏng thôi mạch thật khác xa cái mạch này nên nếu làm mạch thật thì phải thêm nhiều thứ !

Reply
avatar
November 11, 2018 at 9:03 PM delete

anh ơi,em làm mạch thật lại không chạy ạ??
nguồn vẫn có, nhưng khi gắn nạp code xog thì nhấn nút ko chạy, anh hướng dẫn giúp em với!

Reply
avatar
November 12, 2018 at 8:36 PM delete

Cái này mô phỏng ok nhưng làm mạch thật phải vẽ mạch đúng thì mới chạy, giờ viết code riêng để test nút nhấn xem có ok không rồi mới test code này nhé !

Reply
avatar
November 24, 2018 at 5:15 PM delete

Em lắp theo mạch code như trên mà vẫn k hoạt động

Reply
avatar
November 24, 2018 at 5:16 PM delete

A cho em xin gmail để giúp em với ạ

Reply
avatar
May 7, 2019 at 5:56 AM delete

Mạch này có chế độ auto,dieu khien bang tay zs che do ban dem k ạ

Reply
avatar
October 4, 2019 at 1:28 AM delete

anh gửi em project được ko ạ??? Em tải ko được

Reply
avatar
June 13, 2020 at 6:59 AM delete

chào ad ạ. e làm mạch thật theo mô phỏng và có thêm thạch anh và cấp nguồn và đất cho các chân 11 12 và chân 32 31 rồi nhưng mạch vẫn không chạy. a có thể hỗ trợ giúp e được k ạ??

Reply
avatar
July 4, 2020 at 9:02 PM delete

Phần cứng khác so với mô phỏng nhé bạn làm phần cứng cho chuẩn rồi xem lại code nhé !

Reply
avatar
March 30, 2021 at 9:10 AM delete

Chào ad ..hiện tại em đang làm đề tài về project như trên ạ . rất mong ad cho gửi cho e xin file project để tham khảo với ạ .link trên die hay sao ý ạ .E cảm ơn ạ . gmail :hung18101998@gmail.com

Reply
avatar
October 26, 2021 at 7:06 PM delete

làm mạch in theo hình thì có cần thêm linh kiện gì không ạ ? em cảm ơn !

Reply
avatar
October 22, 2024 at 10:04 AM delete

#bit ra0=0x05.0. DẠ cho em hỏi dòng này nghĩa là như nào vậy ạ

Reply
avatar
October 25, 2024 at 12:02 AM delete

Mình gắn biến cho địa chỉ chân của Vi Xử Lý á em.

Reply
avatar