Bài 1 : Mô phỏng chớp tắt LED đơn với PIC16F877A XC8

Bài 1 : Mô phỏng chớp tắt LED đơn với PIC16F877A XC8

Tác giả: Huỳnh Ngọc Lâm
Nguồn: Programming PIC


Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn về I/O của PIC16F877A cụ thể là mô phỏng chớp tắt led. Nhưng trước khi vào nội dung bài mình sẽ giới thiệu với các bạn sơ lượt qua các phần mềm sử dụng trong bài này :

1. Phần mềm MPLAB X IDE và XC8 các bạn có thể download tại website chính thức của Microchip hoặc Tại đây 

2. Phần mềm Protues 8.1 các bạn xem cách hướng dẫn download và cài đặt Tại đây

Ok như vậy chúng ta đã chuẩn bị xong các phần mềm hỗ trợ chúng ta đi vào phần chính của bài. Trong bài này thì mình sẽ hướng dẫn các bạn mắc led theo 2 kiểu đó là Anode chung theo hình bên dưới.

Nếu nối led theo kiểu này thì muốn led sáng ta phải xuất ra mức 0 thì led mới sáng được.

Còn đây là cách nối led theo kiểu Cathode chung.

Nếu nối led theo kiểu này thì muốn led sáng ta phải xuất ra mức 1 thì led mới sáng được.

Chú ý : Để nâng công suất đầu ra cho LED ta phải dùng bộ đệm như transitor, các IC đếm dòng...Trên chỉ mô phòng với những LED công suất thấp và dòng lớn nhất vi xử lý chịu được.

- Dưới đây là ảnh mô phỏng Protues.

Đây là code chương trình. 

#include <stdio.h>

#include <stdlib.h>

#define _XTAL_FREQ 4000000

#include <xc.h>

// CONFIG

#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)

#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)

#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)

#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)

#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)

#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)

#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)

#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

void GPIO_init (void);

void Anode (void);

void Cathode (void);

void main (void)

{

    GPIO_init();

    while(1)

    {

        __delay_ms(100);

        Anode();

        Cathode();

        __delay_ms(100);

    }

}

void GPIO_init(void)

{

    TRISBbits.TRISB0 = 0; // RB0 LÀ OUTPUT

    TRISBbits.TRISB7 = 0; // RB7 LÀ OUTPUT

    PORTBbits.RB0 = 1; // OFF LED RB0

    PORTBbits.RB7 = 0; // OFF LED RB7

}

void Anode (void)

{

    PORTBbits.RB0 = 0;  

    __delay_ms(500);

    PORTBbits.RB0 = 1;

}

void Cathode (void)

{

    PORTBbits.RB7 = 1;

    __delay_ms(500);

    PORTBbits.RB7 = 0;

}

- Giải thích đoạn code trên như sau :

+ void GPIO_init(void)

{

    TRISBbits.TRISB0 = 0; // RB0 LÀ OUTPUT

    TRISBbits.TRISB7 = 0; // RB7 LÀ OUTPUT

    PORTBbits.RB0 = 1; // OFF LED RB0

    PORTBbits.RB7 = 0; // OFF LED RB7

}

Trong Vi Điều Khiển PIC16F877A thì PORTB có 8 chân từ RB0 - RB7 và TRISB thì cũng tương tự từ TRISB0 - TRISB7. Trên hình mình sử dụng 2 chân là RB0 và RB7 nên mình sẽ khai báo như đoạn code trên TRIS là dùng để khai báo I/O còn PORT dùng để điều khiển. TRISBbits.RB0 = 0 thì chân RB0 là output ngược lại nếu = 1 là input, PORTBbits.RB0 = 1 là để tắt LED ở chân này vì LED nối Anode chung.

+ void Anode (void)

{

    PORTBbits.RB0 = 0;  

    __delay_ms(500);

    PORTBbits.RB0 = 1;

}

Cho LED ở chân RB0 sáng thì RB0 phải = 0 vì LED mắc kiểu Anode chung chờ 500ms LED ở RB0 tắt RB0 = 1. tương tự với void Cathode (void).

Video mô phỏng

Bình Luận
Cùng danh mục: Cơ bản Vi điều khiển

Ứng dụng vi điều khiển AT89S52 đếm và đặt trước vòng quay từ 0-99 cho máy quấn băng keo máy biến áp xung

21/02/2018 21:32:46 / Lượt xem: 775 / Người đăng: Nguyễn Thế Trọng Nhân

Đây là bài mô phỏng vi điều khiển AT89S52 đếm và cài đặt vòng quay cho mô tơ hiển thị trên 2 led 7 vach từ 00-99. Áp dụng cho máy quấn keo biến áp xung

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

24/09/2016 16:09:11 / Lượt xem: 3462 / Người đăng: lam3ngon

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 !

BÀI 4 : Mô phỏng PIC16F877A (XC8) giao tiếp với nút nhấn

25/05/2016 20:50:22 / Lượt xem: 3374 / Người đăng: lam3ngon

Nói về nút nhấn (button) thì có lẽ chúng ta đã quá quen với nó rồi thậm chí chúng ta chúng ta còn tiếp xúc với nó hằng ngày nữa, ví dụ như : bàn phím máy tính, các thiết bị điều khiển tivi, máy điều hòa…..

Mô phỏng hiệu ứng 8 LED đơn với PIC16F877A XC8 (P2)

18/05/2016 15:37:21 / Lượt xem: 2919 / Người đăng: lam3ngon

Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn tăng mức độ khó của PORJECT lên khó hơn 1 tý so với bài đăng trước nếu như bài đăng trước chúng ta chỉ dùng lại ở việc chớp tắt LED và sáng xen kẻ thì trong bài đăng này mình sẽ giới thiệu với các bạn về Đuổi LED (Chaser LED), sáng dồn, dịch trái, dịch phải, sáng dần, tắt dần…

Giao tiếp SPI và mô phỏng trên AVR

18/05/2016 13:20:22 / Lượt xem: 3216 / Người đăng: biendt

Bài này giúp các bạn biết cách sử dụng cách truyền thông nối tiếp đồng bộ SPI. Công cụ chính cũng là 2 bộ phần mềm AVRStudio (+gcc-avr) và Proteus. Thực chất ngôn ngữ lập trình vẫn là gcc-avr nhưng tôi không dùng Programmer Notepad để biết code như thông thường, thay vào đó tôi dùng AVRStudio làm trình biên tập,

Quảng cáo - Tài trợ

 -----------------------------

Hỗ trợ trực tuyến