



















Preview text:
THỰC HÀNH VI ĐIỀU KHIỂN Họ và tên: MSSV: Lớp:
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN 1.1 Phần chuẩn bị
1. Sơ đồ mạch Led đơn tích cực mức 1:
2. Sơ đồ mạch Led đơn tích cực mức 0:
3. Câu lệnh xuất giá trị 0x80 ra port B: Output_b(0x80);
4. Tính mã cho led đơn sáng dần từ D1 – D8:
0x01; 0x03; 0x07; 0x0F; 0x1F; 0x3F; 0x7F; 0xFF
5. Tính mã cho led đơn sáng dần từ D8 – D1:
0x80; 0xC0; 0xE0; 0xF0; 0xF8; 0xFC; 0xFE; 0xFF
6. Tính mã cho Led 7 đoạn anode chung từ 0 – 9, t, A, r, P:
Led 7 đoạn anode chung: đèn sáng mức 0 Chữ/Số a b c d e f g dp 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 2 0 0 1 0 0 1 0 1 3 0 0 0 0 1 1 0 1 4 1 0 0 1 1 0 0 1 5 0 1 0 0 1 0 0 1 6 0 1 0 0 0 0 0 1 7 0 0 0 1 1 1 1 1 8 0 0 0 0 0 0 0 1 9 0 0 0 0 1 1 0 1 t 1 1 1 0 0 0 0 1 A 0 0 0 1 0 0 0 1 r 1 1 1 1 0 1 0 1 P 0 0 1 1 0 0 0 1 3 2
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
7. Sơ đồ mạch của công tắc nhấn:
8. Sơ đồ chân kết nối giữa LCD và PIC 16F877A.
9. Câu lệnh chuyển tọa độ và xuất chuỗi ra LCD: lcd_gotoxy(x,y); printf(lcd_putc,''noi dung'')
printf(led_putc,' %3u' ,sodem); For(int i=0, i<10, i++) { if(i=10); i=0; } 1.2 Led đơn Bài 1.1 – Bài 1.2 #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M) void main() { while (1) { output_c(0x01); delay_ms(400); output_c(0x00); delay_ms(400); } } 5 Bài 1.3
Sửa chương trình để nhấp nháy 4 Led D1 – D4 vô hạn, thời gian delay 1s. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M) void main() { while(1) { output_c(0x0F); delay_ms(1000); output_c(0x00); delay_ms(1000); } } Bài 1.4
Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại vô hạn lần. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char sangden[9]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; void main () { while(1) { for (int m=0; m<9; m++) { output_c(sangden[m]); delay_ms(300); } } } 7 Bài 1.5
Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại 30 lần. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char sangden[9]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; void main () {for (int i=0; i<30; i++) { for (int m=0; m<9; m++) { output_c(sangden[m]); delay_ms(300); } } } Bài 1.6
Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại 30 lần,
sau đó tắt dần từ D1 – D8, lặp lại 257 lần. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char sangden[9]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
char tatden[9]={0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00}; void main () { for (int i=0; i<30; i++) { for (int m=0; m<9; m++) { output_c(sangden[m]); delay_ms(300); } } for (int u=0; u<257; u++) { for (int n=0; n<9; n++) { output_c(tatden[n]); delay_ms(300); } } } Bài 1.7
Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại 30 lần,
sau đó tắt dần từ D1 – D8, lặp lại 257 lần. Lặp lại toàn bộ quá trình 40 lần. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char sangden[9]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
char tatden[9]={0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00}; void main () { for (int e=0; e<40; e++) { for (int i=0; i<30; i++) { for (int m=0; m<9; m++) { output_c(sangden[m]); delay_ms(300); } } for (int u=0; u<257; u++) { for (int n=0; n<9; n++) {output_c(tatden[n]); delay_ms(300); } 9 } } } Bài 1.8
Vẽ lại sơ đồ mạch trong đó D1, D3, D5, D7 tích cực mức 1, 4 Led còn lại tích cực
mức 0. Viết lại chương trình như bài 1.7. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char sangden[9]={0xAA,0xAB,0xA9,0xAD,0xA5,0xB5,0x95,0xD5,0x55};
char tatden[9]={0x55,0x54,0x56,0x52,0x5A,0x4A,0x6A,0x2A,0xAA}; void main() { for (int e=0; e<40; e++) { for (int i=0; i<30; i++) { for (int m=0; m<9; m++) { output_c(sangden[m]); delay_ms(300); } } for (int u=0; u<257; u++) { for (int n=0; n<9; n++) { output_c(tatden[n]); delay_ms(300); } } } } Bài 1.9
Vẽ lại sơ đồ mạch trong đó D1, D3, D5, D7 tích cực mức 1, 4 Led còn lại tích cực
mức 0, sơ đồ kết nối như bảng. Viết lại chương trình như bài 1.7. D1 D2 D3 D4 D5 D6 D7 D8 RC6 RC4 RC3 RC0 RC7 RC1 RC5 RC2 #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M) 11
Char sangden[9]={0x17,0x57,0x47,0x4F,0x4E,0xCE,0xCC,0xEC,0xC8};
char tatden[9]={0xC8,0xEC,0xCC,0xCE,0x4E,0x4F,0x47,0x57}; void main() { for (int8 e=0; e<40; e++) { for (int8 i=0; i<30; i++) { for (int8 m=0; m<9; m++) { output_c(sangden[m]); delay_ms(300); } } for (int8 u=0; u<257; u++) { for (int8 n=0; n<9; n++) { output_c(tatden[n]); delay_ms(300); } } } } 1.3 Led 7 đoạn Bài 1.10 13 #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M) void main() { output_d(0xFF); output_b(0x03); output_low(PIN_D3); while (1) ; } Bài 1.11
Viết chương trình hiện số từ 0 – 9 trên Led1, thời gian delay 400 ms. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char led7doan[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09}; void main() { while(TRUE) { for(int i=0; i<10; i++) { output_b(led7doan[i]); output_low(PIN_D3); delay_ms(400); } } } Bài 1.12
Viết chương trình hiện số 12.34 trên 4Led, thời gian quét led 3 ms. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char so[4]={0x9F,0x24,0x0D,0x99};
char densang[4]={0x07,0x0B,0x0D,0x0E}; void ham_so() { for (int m=0; m<4; m++) { output_d(0xFF); output_b(so[m]); output_d(densang[m]); delay_ms(3); } } void main() { 15 output_d(0xFF); while(TRUE) { ham_so(); } } Bài 1.13
Viết chương trình hiện chữ StOP trên 4Led, thời gian quét led 3 ms. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char so[4]={0x49,0xE1,0x03,0x31};
char densang[4]={0x07,0x0B,0x0D,0x0E}; void ham_so() { for (int m=0; m<4; m++) { output_d(0xFF); output_b(so[m]); output_d(densang[m]); delay_ms(3); } } void main() { output_d(0xFF); while(TRUE) { ham_so(); } } Bài 1.14
Viết chương trình hiện chữ StAr trên 4Led trong 5s, thời gian quét led 3 ms. Sau đó
hiện chữ StOP trên 4Led. 17 #include <16f877a.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char stop[4]={0x49,0xE1,0x03,0x31};
char star[4]={0x49,0xE1,0x11,0xF5};
char densang[4]={0x07,0x0B,0x0D,0x0E}; void sang_star() { for (int m=0; m<4; m++) { output_d(0xFF); output_b(star[m]); output_d(densang[m]); delay_ms(3); } } void sang_stop() { for (int n=0; n<4; n++) { output_d(0xFF); output_b(stop[n]); output_d(densang[n]); delay_ms(3); } } void main() { while(1) { for(int16 k=0; k<416; k++) { output_d(0xFF); sang_star(); } for(int16 p=0; p<416; p++) { output_d(0xFF); sang_stop(); } output_d(0xFF); } } Bài 1.15
Viết chương trình hiện các Led đơn sáng dần từ D1 – D8, thời gian delay 300ms, lặp
lại 8 lần đồng thời hiện số lần lặp trên Led7 đoạn 4. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char led7doan[9]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01};
char sangden[9]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; void main () { for (int i=0; i<9; i++) { for (int m=0; m<9; m++) { 19 output_c(sangden[m]); delay_ms(300); } output_low(PIN_D0); output_b(led7doan[i]); } } Bài 1.16
Viết chương trình hiện các Led đơn sáng dần từ D1 – D8, thời gian delay 300ms, lặp
lại 30 lần đồng thời hiện số lần lặp trên Led7 đoạn 3, 4. #include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP #use delay(clock=8M)
char led7doan[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
char sangden[9]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; int chuc, dvi; void main() { chuc=0; dvi=0; output_c(0x00); for (int i=0; i<30; i++) { chuc=i/10; dvi=i%10; for (int m=0; m<9; m++) for (int n=9; n<15; n++) { output_c(sangden[m]); delay_ms(10);