Skip to main content

Posts

Use the ADC of the PIC 16F887 microcontroller and the LM35 sensor to measure the temperature and display it on 3 led 7 segments common anode

Requirements: Use the ADC of the PIC16F887 microcontroller and the LM35 sensor to measure the temperature displayed on 3 led 7 segments common anode using 3 ports, only displaying units, tens and hundreds. Use a reference voltage source VREF+ connected to VDD with 5V and VREF- connected to a VSS source of 0V  Circuit diagram on Proteus simulation software Figure 1. Circuit diagram for measuring temperature using PIC16F887 displayed on 3 leds directly Main program : File: main.c ___________________ #INCLUDE<TV_16F887.C> UNSIGNED INT16 KQADC; UNSIGNED INT J,MATRAM; VOID HIEN_THI() {    MATRAM = MA7DOAN[KQADC/100];    IF (MATRAM == 0XC0) MATRAM=0XFF;    OUTPUT_B(MA7DOAN[KQADC%10]);    OUTPUT_D(MA7DOAN[KQADC/10%10]);    OUTPUT_C(MATRAM); } VOID MAIN() {    SET_TRIS_B(0x00); SET_TRIS_D(0x00);    SET_TRIS_C(0x00); SET_TRIS_A(0xFF);    SETUP_ADC(ADC_CLOCK_DIV_2);    SETUP_ADC_PORTS(SAN0);    SET_ADC_CHANNEL(0);    WHILE(TRUE)    {       KQADC=0;       FOR (J=0; J<200; J++)       {  

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_