Skip to main content

Posts

Using 16F887 microcontroller to count external pulses using T0, the counting results are displayed on 3 leds directly connected to 3 ports

Requirements: Using microcontroller 16F887 to count external pulses using T0, counting results displayed on 3 leds directly connected to 3 ports, counting limit from 000 to 255, when equal to 255, return to 0  Circuit diagram on Proteus simulation software: Figure 1. Counting external pulses using counter T0 Main program : Use PIC16F887 to count external pulses using T0.c ________________ #INCLUDE<TV_16F887.C> UNSIGNED INT8 T0, MATRAM, MACHUC; VOID MAIN() {    SET_TRIS_B(0x00); SET_TRIS_C(0x00); SET_TRIS_D(0x00);    SETUP_TIMER_0(T0_EXT_L_TO_H | T0_DIV_1);    SET_TIMER0(0);    WHILE(TRUE)    {       T0=GET_TIMER0();       MATRAM=MA7DOAN[T0/100]; MACHUC=MA7DOAN[T0/10%10];       IF (MATRAM==0XC0)       {          MATRAM=0XFF;          IF (MACHUC==0XC0) MACHUC=0XFF;       }       OUTPUT_B(MA7DOAN[T0%10]);       OUTPUT_D(MACHUC);       OUTPUT_C(MATRAM);    } } ________________ TV_16F887.c Library: TV_16F887.c ________________ #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NO

Using microcontroller PIC 16F887 to control 8 single leds on and off using timer T1 with period delay is 2s, 1 second on, 1 second off

Circuit diagram Interface PIC16F887 microcontroller with LED on Proteus software:  Figure 1. PIC16F887 microcontroller interface with LED Main program : Control 8 single leds on and off using timer T1.c __________________ #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20M) #BIT TMR1IF = 0x0C.0 UNSIGNED INT8 X, BDT; VOID MAIN() {    SET_TRIS_D(0x00); X=0; BDT=0; OUTPUT_D(X);    SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);    SET_TIMER1(3036);    WHILE(TRUE)    {       IF (TMR1IF==1)       {          TMR1IF=0; SET_TIMER1(3036); BDT++;          IF (BDT ==10)          {             OUTPUT_D(X); X=~X; BDT = 0;          }       }    } } __________________ Link download:  https://drive.google.com/file/d/1PUnAsc0963tt-ZWX7K2UIK_FQ0DcIKay/view

Program to display 2 rows of information using PIC16F887 microcontroller interface with LCD 16x2

Circuit diagram Interface PIC16F887 microcontroller with LCD on Proteus software : Figure 1. PIC16F887 microcontroller interface with LCD

Bài 6: Dùng vi điều khiển 16F887 giao tiếp với 8 led đơn và 2 nút nhấn ON, OFF. Khi cấp điện thì 8 led tắt, khi nhấn ON thì 8 led sáng, khi nhấn OFF thì 8 led tắt.

  Hình 1: Sơ đồ mạch dùng vi điều khiển 16F887 giao tiếp với 8 led đơn và 2 nút nhấn ON, OFF Chương trình:                                                                    #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20M) #DEFINE ON PIN_E0 #DEFINE OFF PIN_E1 VOID MAIN() {     SET_TRIS_E(0xFF);    SET_TRIS_D(0x00); OUTPUT_D(0X00);    WHILE(TRUE)    {       WHILE (INPUT(ON));          OUTPUT_D(0XFF);       WHILE (INPUT(OFF));          OUTPUT_D(0X00);    } }                                                                   Link download chương trình mô phỏng (Code và Proteus):  https://drive.google.com/file/d/1Kp0JGWJOhViTGf8IJe-GYCa4lt03naBi/view

Bài 5: Dùng vi điều khiển 16F887 kết nối với 2 led 7 đoạn anode chung theo phương pháp quét và viết chương trình đếm từ 00 đến 99 hiển thị trên 2 led 7 đoạn quét, thời gian trễ tuỳ chọn.

  Hình 1: Sơ đồ kết nối 2 port C và D điều khiển 2 led 7 đoạn quét. Chương trình:                                                                  #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=16M) CONST UNSIGNED CHAR MA7DOAN [10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; UNSIGNED INT8 DEM, I; VOID HIENTHI_DELAY() {    FOR (I=0;I<200;I++)    {        OUTPUT_C(MA7DOAN[DEM %10]); OUTPUT_HIGH(PIN_D0);       DELAY_MS(1); OUTPUT_LOW(PIN_D0);       OUTPUT_C(MA7DOAN[DEM /10]); OUTPUT_HIGH(PIN_D1);       DELAY_MS(1); OUTPUT_LOW(PIN_D1);    } } VOID MAIN() {     SET_TRIS_C(0x00); SET_TRIS_D(0x00); OUTPUT_D(0X00);    WHILE(TRUE)    {       FOR(DEM=0;DEM<100;DEM++)       {          HIENTHI_DELAY();       }    } }                                                                  Link download chương trình mô phỏng (Code và Proteus):  https://drive.google.com/file/d/1TVc6fisZ6At9eUhEa1_w0OtASSUqHd58/view

Bài 4: Dùng vi điều khiển 16F887 kết nối với 8 led 7 đoạn anode chung theo phương pháp quét và viết chương trình hiển thị 8 số từ số 0 đến số 7 trên 8 led mô phỏng trên Proteus

Sơ đồ mạch: Hình 1: Sơ đồ kết nối 2 port C và D điều khiển 8 led 7 đoạn quét Chương trình:                                                                     #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=16M) CONST UNSIGNED CHAR MA7DOAN [10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; VOID MAIN() {     SET_TRIS_C(0x00); SET_TRIS_D(0x00);    WHILE(TRUE)    {       OUTPUT_C(0xC0); OUTPUT_HIGH(PIN_D0); DELAY_MS(1); OUTPUT_LOW(PIN_D0);       OUTPUT_C(0XF9); OUTPUT_HIGH(PIN_D1); DELAY_MS(1); OUTPUT_LOW(PIN_D1);       OUTPUT_C(0XA4); OUTPUT_HIGH(PIN_D2); DELAY_MS(1); OUTPUT_LOW(PIN_D2);       OUTPUT_C(0XB0); OUTPUT_HIGH(PIN_D3); DELAY_MS(1); OUTPUT_LOW(PIN_D3);       OUTPUT_C(0x99); OUTPUT_HIGH(PIN_D4); DELAY_MS(1); OUTPUT_LOW(PIN_D4);       OUTPUT_C(0X92); OUTPUT_HIGH(PIN_D5); DELAY_MS(1); OUTPUT_LOW(PIN_D5);       OUTPUT_C(0X82); OUTPUT_HIGH(PIN_D6); DELAY_MS(1); OUTPUT_LOW(PIN_D6);       OUTPUT_C(0XF8); OUTPUT_HIGH(PIN_D7); DELAY_MS(1); OUTPUT_

Bài 3: Dùng vi điều khiển 16F887 kết nối với 1 led 7 đoạn anode chung và viết chương trình đếm từ 0 đến 9 với thời gian trễ tuỳ chọn mô phỏng trên Proteus

Sơ đồ mạch: dùng portD kết nối với 1 led 7 đoạn anode chung. Mức logic 1 làm led tắt, mức logic 0 làm led sáng, điện trở hạn dòng cho led là 330Ω. Hình 1. Sơ đồ mạch đếm từ 0 đến 9 dùng led 7 đoạn anode chung Chương trình: #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20M) CONST UNSIGNED CHAR MA7DOAN [10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; SIGNED INT DEM; UNSIGNED INT MA_DEM; VOID MAIN() {     SET_TRIS_D(0x00);    WHILE(TRUE)    {        FOR (DEM=0;DEM<10;DEM++)       {          MA_DEM = MA7DOAN[DEM];          OUTPUT_D(MA_DEM);          DELAY_MS(1000);       }    } } Giải thích chương trình: Sau các lệnh khai báo thư viện, cấu hình và khai báo tần số sử dụng là khai báo mảng chứa mã 7 đoạn và các biến đếm, biến chứa mã. Chương trình chính khởi tạo các portB là xuất, cho vòng lặp for với biến “DEM” chạy từ 0 đến 9, tiến hành giải mã và gởi mã led 7 đoạn tương ứng với biến DEM ra port để hiển thị, delay và lặp lại. Tài liệu tham khảo: