Chia sẻ đèn giao thông ngã tư PIC16F877A CCS

Chia sẻ đèn giao thông ngã tư PIC16F877A CCS


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.

// Được viết bằng ngôn ngữ : CCS
// Phần mềm mô phỏng Protues 8

#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 ----------------------

   }

 }  

 

Download chương trình và mô phỏng : (File đính kèm) 

Bình Luận
Tinhvu21 - 22/03/2021 - 03:38:44

 tuyet voi 

 


Cùng danh mục: Vi điều khiển - Lập trình

Cơ sở công suất và năng lượng tiêu thụ trên MCU

29/07/2023 21:21:12 / Lượt xem: 414 / Người đăng: biendt

Công suất và năng lượng tiêu thụ của MCU ảnh hưởng đến các quyết định thiết kế về nguồn, thời gian sử dụng pin, và kể cả nhiệt độ hoạt động trong các ứng dụng nhúng. Nhất là khi đối mặt với các ứng dụng được cung cấp năng lượng từ nguồn pin,

Giải thích cơ chế các lệnh SET BIT, CLEAR BIT và TOGGLE trong lập trình vi điều khiển

15/09/2022 08:10:32 / Lượt xem: 995 / Người đăng: biendt

Giải thích các lệnh SET BIT, CLEAR BIT và TOGGLE thường được dùng trong lập trình vi điều khiển. Lệnh SET BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó có giá trị logic 1 và không làm thay đổi giá trị các bit còn lại của thanh ghi đó. Lệnh CLEAR BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó giá trị logic 0 và không làm thay đổi giá trị các bit còn lại của thanh ghi đó. Lệnh TOGGLE BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó giá trị logic 0 nếu trước đó nó có giá trị logic 1 và ngược lại, đồng thời không làm thay đổi giá trị các bit còn lại của thanh ghi đó.

Chia sẻ chương trình đọc ghi thẻ SD bằng MSP430 G2553 phục vụ lưu trữ

17/08/2022 06:20:30 / Lượt xem: 738 / Người đăng: biendt

Chương trình sử dụng vi điều khiển chính là MSP430G2553 (có thể sử dụng vi điều khiển khác cùng họ MSP430) kết nối với module đọc/ghi thẻ nhớ SD card là MODULE MICRO SD CARD để lưu trữ dữ liệu, đọc dữ liệu…Chuẩn bị : 1 KIT MSP430G2553, 1 Module SD Card, 1 Thẻ nhớ SD card : Micro SD <= 2GB hoặc Micro SDHC <= 32GB

Hướng dẫn thiết kế mạch vi điều khiển đơn giản

07/06/2022 06:18:47 / Lượt xem: 813 / Người đăng: biendt

Thiết kế mạch cho vi điều khiển là một việc làm không hề đơn giản đối với những người mới bắt đầu. Có thể bạn phải đọc hàng trăm trang datasheet và tài liệu thiết kế tham khảo, các sơ đồ mạch thiết kế mẫu, các chỉ dẫn layout để có thể hoàn thiện được thiết kế của mình một cách tốt nhất. Hướng dẫn này sẽ chỉ ra những điểm chung mà các bạn cần lưu ý khi thiết kế mạch vi điều khiển

Thiết kế mạch chống nhiễu cho Vi điều khiển (Chíp lập trình hoặc IC)

05/05/2022 06:05:35 / Lượt xem: 2058 / Người đăng: biendt

Có mấy phương pháp cho mạch chống nhiễu vi điều khiển : .Sử dụng cách ly quang: để cách ly giữa tín hiệu điều khiển từ VĐK xuất ra và mạch công suất 220v.Sử dụng mạch snubber khi điều khiển tải bằng relay.Sử dụng linh kiện điện tử chính hãng...Sử dụng mạch lọc nguồn AC 220v trước khi cấp cho bộ nguồn 5V nuôi VĐK...Chống nhiễu khi viết code