Skip to main content

Posts

Showing posts from October, 2021

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:

Bài 2: Dùng vi điều khiển 16F887 điều khiển 8 led đơn sáng dần tắt dần từ phải sang trái mô phỏng trên Proteus

Sơ đồ mạch:   Hình 1.  Sơ đồ mạch  điều khiển 8 led đơn sáng dần tắt dần từ phải sang trái Chương trình: #INCLUDE <16F887.H> #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY(CLOCK=20M) UNSIGNED INT8 I, X; VOID MAIN() {      SET_TRIS_D(0x00); X=0X00; OUTPUT_D(X); DELAY_MS(500);      WHILE(TRUE)      {            FOR (I=0;I<8;I++)           {                 X = (X<<1)+0X01; OUTPUT_D(X); DELAY_MS(500);           }           FOR (I=0;I<8;I++)           {                 X = (X<<1); OUTPUT_D(X); DELAY_MS(500);           }      } } Giải thích chương trình: Khởi tạo portD là xuất dữ liệu, gán biến X bằng 0x00, xuất giá trị của X ra portD làm 8 led tắt, delay. Vòng lặp for thứ nhất thực hiện 8 lần: tiến hành xoay trái dữ liệu của X và cộng với 0x01. Khi xoay trái dữ liệu thì số 0 được đẩy vào, cộng với 0x01 là để đẩy số 1 vào X. Dữ liệu biến X được xuất ra portD điều khiển led sáng dần, sau 8 lần thì X sẽ bằng 1111_1111 – 8 led sáng hết. Vòng lặp for thứ hai thực hiện

Bài 1: Dùng vi điều khiển 16F887 điều khiển 8 led đơn sáng tắt mô phỏng trên Proteus

Sơ đồ mạch: Hình 1. Sơ đồ điểu khiển led đơn mô phỏng trên Proteus Mạch dùng portD kết nối với 8 led đơn. Mức logic 0 làm led tắt, mức logic 1 làm led sáng.  Chương trình: #INCLUDE <16F887.H> #FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP #USE DELAY(CLOCK=20M) VOID MAIN() {    SET_TRIS_D(0x00);    WHILE(TRUE)    {         OUTPUT_D(0xFF);   DELAY_MS(1000);       OUTPUT_D(0x00); DELAY_MS(1000);    } } Giải thích ý nghĩa chương trình: Hàng thứ nhất “ #INCLUDE <16F887.H> ” là khai báo thư viện đang sử dụng là PIC 16F887. Hàng thứ hai “ #FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP ” là khai báo cấu hình cho PIC. Hàng thứ ba “ #USE DELAY(CLOCK=20M) ” khai báo tần số tụ thạch anh mà vi điều khiển sử dụng, với khai báo trên thì tần số sử dụng là 20MHz. Các hàm định thời là: o DELAY_MS(VALUE) - Thời gian định thời là mili giây. o DELAY_US(VALUE) - Thời gian định thời là µS. Chương trình chính gồm:  Lệnh “ SET_TRIS_D(0x00); ” có chức năng khởi tạo portD là port xuất. Lệnh “ OUTPUT_D(0xFF); ” c