PHẦN III CÁC BÀI TẬP THỰC HÀNH
BÀI 5 CHƯƠNG TRÌNH ĐÈN GIAO THÔNG
Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện :
ĐÁNH GIÁ - ĐIỂM
ắ Kỹ thuật
ắ Thao tỏc
ắ Tổ chức
NHẬN XÉT
MỤC ĐÍCH:
• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các Port của VĐK.
• Điều khiển việc hiển thị bằng cách sử dụng LED đơn và LED 7 đoạn.
YÊU CẨU:
• Nắm vững các tập lệnh của VĐK PIC16F877A.
• Nắm được sơ đồ và nguyên lý hoạt động của khối mạch đèn giao thông trên mô hình thí nghiệm.
• Nắm được nguyên lý điều khiển mạch đèn giao thông.
TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 6 nối PortA với các LED đơn.
• Dùng dây bus 8 nối PortB với LED 7 đoạn phía dưới.
• Dùng dây bus 8 nối PortD với LED 7 đoạn phía trên.
ỨNG DỤNG:
Viết chương trình điều khiển mạch đèn giao thông có đếm ngược.
SƠ ĐỒ MẠCH :
H G F E D C B
VCC A
VCC
PORTD 1 2 3 4 5 6 7 8 D1
PORTB
1 2 3 4 5 6 7 8
330
X2 V1
330
4R2 330
1 23456789
D2
PORTA
123456
X1 V2
A B C D E F G H
VCC
BÀI 6 : CHẠY CHỮ TRÊN LED MA TRẬN
Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện :
ĐÁNH GIÁ - ĐIỂM
ắ Kỹ thuật
ắ Thao tỏc
ắ Tổ chức
NHẬN XÉT
MỤC ĐÍCH:
• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các Port của VĐK.
• Điều khiển việc hiển thị bằng cách sử dụng LED ma trận.
• Ứng dụng thực hiện việc hiển thị các thông tin tĩnh và động trên LED ma trận dạng quang báo.
YÊU CẨU:
• Nắm vững các tập lệnh của VĐK PIC16F877A.
• Biết cách viết các chương trình điều khiển LED ma trận ở các chế độ khác nhau.
• Nắm được sơ đồ và nguyên lý hoạt động của khối LED ma trận trên mô hình thí nghiệm.
• Nắm được nguyên lý điều khiển LED ma trận ở các chế độ khác nhau.
• Biết cách viết chương trình quang báo để hiển thị các thông tin được yêu cầu (thông tin dạng tĩnh và dạng động).
TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 8 nối PortB với hàng của Led Ma Trận.
• Dùng dây bus 8 nối PortC với cột của Led Ma Trận 1.
• Dùng dây bus 8 nối PortD với cột Led Ma Trận 2.
ỨNG DỤNG:
Viết chương trình chạy chữ “ KIT THUC TAP PIC KHOA DIEN TU – TIN HOC ”.
SƠ ĐỒ MẠCH :
h1 h3
b14
h5
c6
c16
b2 h6
c1
Q5 A1015 c2
h7
c6
MTRAN2
16 15
14
13
12
11 10
9
8
7
6
5
4 3
2 1
b8
Q14 A1015 b3
b12
c11
c11 9RN3
330 1 2 3 4 5 6 7 8 910111213141516 b4
h3 90PC
1 2 3 4 5 6 7 8
Q6 A1015
Q11 A1015
90PB
1 2 3 4 5 6 7 8
c16 b10
h2 Q12
A1015
c2
h1 Q9
A1015
c15
h6
b16
VCC c5
c10
c12
h1 h4 b13
c7
Q13 A1015 b4
c8
b11 Q10 A1015
b1
h7 Q15 A1015
b6
h8 c3
Q16 A1015 b11
h4 b3
h2 b9
b15
c9
c13
MTRAN1
16 15
14
13
12
11 10
9
8
7
6
5
4 3
2 1
c14 b15
c8 b5
9RN2
4k7 1 2 3 4 5 6 7 8 910111213141516
Q3 A1015
b10
h8 h6 b1
b12
c1 c4
Q4 A1015
h4 c4
90PD
1 2 3 4 5 6 7 8
b14
b7 b16
Q2 A1015
c7 Q7
A1015 Q8
A1015
c13 b6
c9 Q1
A1015
c14
h2 h5
h3 b9
c5 b8
h5 9RN
4k7 1 2 3 4 5 6 7 8 910111213141516
h8
b13 b2
c3
VCC
c15
b5
b7
c12
c10
h7
BÀI 7: HIỂN THỊ KÍ TỰ TRÊN LCD
Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện :
ĐÁNH GIÁ - ĐIỂM
ắ Kỹ thuật
ắ Thao tỏc
ắ Tổ chức
NHẬN XÉT
MỤC ĐÍCH:
• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các Port của VĐK.
• Khảo sát nguyên lý hoạt động và nguyên lý điều khiển LCD.
• Điều khiển để hiển thị các thông tin trên màn hình tinh thể lỏng LCD ( loại 2 hàng x 16 ký tự).
YÊU CẨU:
• Nắm vững các tập lệnh của VĐK PIC16F877A.
• Biết cách viết các chương trình điều khiển LCD.
• Nắm được sơ đồ và nguyên lý hoạt động của khối LCD trên mô hình thí nghiệm.
• Nắm được nguyên lý và các kỹ thuật điều khiển để hiển thị các thông tin trên LCD.
• Biết cách viết các chương trình ứng dụng để hiển thị các dạng thông tin khác nhau trên LCD tùy theo nhu cầu sử dụng.
TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 3 nối PortE với RS,RW,E ( RS = RE0, RW = RE1, E = RE2 )
• Dùng dây bus 8 nối PortB với D0 đến D7.
ỨNG DỤNG:
Viết chương trình xuất dữ liệu lên LCD Line 1 : “ DO AN TOT NGHIEP “
Line 2 : “ KIT THUC TAP PIC 16F877A”
SƠ ĐỒ MẠCH :
J3
CON8 12 3 45 6 78
J4
CON5 1 23 4 5
3VR 10K
13
2
VSS VDD
V0
RS R/W E A K D0
D1 D2 D3 D4 D5 D6 D7
LCD
LCD
12
3
4 56 78
9 1011 12 1314
15 16 VCC
BÀI 8: GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD
Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện :
ĐÁNH GIÁ - ĐIỂM
ắ Kỹ thuật
ắ Thao tỏc
ắ Tổ chức
NHẬN XÉT
MỤC ĐÍCH:
• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các Port của VĐK.
• Điều khiển thiết bị ngoại vi bằng bàn phím (bàn phím thiết kế theo kiểu ma trận).
• Trình bày kỹ thuật quét phím cho dạng bàn phím ma trận 16 phím ( 4 hàng x 4 cột).
• Trình bày một số ứng dụng trong kỹ thuật điều khiển bàn phím.
YÊU CẨU:
• Nắm vững các tập lệnh của VĐK PIC16F877A.
• Biết cách viết các chương trình điều khiển bàn phím ma trận.
• Nắm được sơ đồ và nguyên lý hoạt động của khối bàn phím ma trận trên mô hình thí nghiệm.
• Nắm được nguyên lý và kỹ thuật quét phím cho các dạng bàn phím ma trận.
• Biết cách viết các chương trình ứng dụng có sử dụng bàn phím ma trận để điều khiển các thiết bị ngoại vi khác nhau.
TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 3 nối PortE với RS, RW, E ( RS = RE0, RW = RE1, E = RE2 )
• Dùng dây bus 8 nối PortB với D0 đến D7
• Dùng dây bus 8 nối PortD với bàn phím số hex ỨNG DỤNG:
Viết chương trình mỗi khi có phím nhấn thì hiển thị số đó lên LCD.
SƠ ĐỒ MẠCH :
SW2
VCC R4
R VCC
SW4 1R47
100
R5
R R6
R
SW3
SW10
SW13 1DX
1Y1 VCC
1C8 33p
1C9 33p 1RS
1C7 104
SW14 R7
10k
SW8
SW15 R6
R
SW1
U1
lcd 1 2 3 4 5 67 8 9 10 11 12 1314 1R46
10K
SW6 SW1
SW5 SW7
1U1
PIC16F877A 15
16 17 18 23
24 2526
31 12
1
13 11
32 2
3 4 5 6 7
33 34 35 3637 38 39 40
19 20 21 22 2728 29 30 8
9 10
14
RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA
RC5/SDO RC7/RX/DTRC6/TX/CK GND GND
MCLR/VPP
OSC1/CLKI VDD
VDD RA0/AN0
RA1/AN1
RA2/AN2/VRef -/CVRef RA3/AN3/VRef + RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT
RB0/INTRB1RB2 RB3/PGMRB4RB5 RB6/PGC RB7/PGD
RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 RE0/RD/AN5
RE1/WR/AN6 RE2/CSAN7
OSC2/CLKO
SW11
SW12 VCC
SW9 VCC
BÀI 9: ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN
Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện :
ĐÁNH GIÁ - ĐIỂM
ắ Kỹ thuật
ắ Thao tỏc
ắ Tổ chức
NHẬN XÉT
MỤC ĐÍCH:
• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các Port của VĐK.
• Giả lập tín hiệu tương tự cung cấp cho khối ADC.
YÊU CẨU:
• Nắm vững các tập lệnh của VĐK PIC16F877A.
• Biết cách viết các chương trình điều khiển ADC.
• Nắm được sơ đồ và nguyên lý hoạt động của khối ADC trên mô hình thí nghiệm.
TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM:
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 2 nối khối ADC với PortA.0 (chân AN0).
• Dùng dây bus 8 nối PortB với LED đơn.
ỨNG DỤNG:
Tạo mức điện áp thay đổi liên tục từ 0V đến 5V cho VĐK xử lý sau đó hiển thị ra LED đơn.
SƠ ĐỒ MẠCH :
1R47
100 1C7
104
1C9 33p 1Y1
1C8 33p
VR 10K
L5 1 2
VCC
1U1
PIC16F877A 15
16 17
18 2324
25 26 31 12
1
13 11
32 2
3 4 5 6 7
33 34 35 36 37 38 39 40
19
20 2122
27 28 29 30 8
9 10
14
RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1
RC3/SCK/SCL RC4/SDI/SDARC7/RX/DTRC6/TX/CKRC5/SDO GND GND
MCLR/VPP
OSC1/CLKI VDD
VDD RA0/AN0
RA1/AN1
RA2/AN2/VRef-/CVRef RA3/AN3/VRef+
RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT
RB0/INTRB1RB2 RB3/PGMRB4RB5 RB6/PGC RB7/PGD
RD0/PSP0
RD1/PSP1 RD2/PSP2RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 RE0/RD/AN5
RE1/WR/AN6 RE2/CSAN7
OSC2/CLKO L7
1 2
L0 1 2
L4 1 2
L2 1 2
1RS
1R46 10K 1DX VCC
4R2
330 1
2 3 4 5 6 7 8 9
L6 1 2
VCC VCC
L1 1 2
L3 1 2
BÀI 10: ĐO NHIỆT ĐỘ DÙNG LM35
Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện :
ĐÁNH GIÁ - ĐIỂM
ắ Kỹ thuật
ắ Thao tỏc
ắ Tổ chức
NHẬN XÉT
MỤC ĐÍCH:
• Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng.
• Điều khiển thiết bị ngoại vi bằng các Port của VĐK.
• Đo nhiệt độ môi trương và khống chế nhiệt độ bằng VĐK.
YÊU CẨU:
• Nắm vững các tập lệnh của VĐK PIC16F877A.
• Biết cách viết các chương trình ứng dụng có sử dụng LM35 để điều khiển các thiết bị ngoại vi khác nhau.
• Nắm được sơ đồ và nguyên lý hoạt động của khối đo nhiệt độ trên mô hình thí nghiệm.
• Nắm được nguyên lý nguyên lý hoạt động của LM35.
TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM
• Tắt nguồn cấp cho mô hình thí nghiệm.
• Dùng dây bus 2 nối chân 2 của LM35 với PortA.0 (chân AN0).
• Dùng dây bus 3 nối PortE với RS,RW,E ( RS = RE0, RW = RE1, E = RE2 )
• Dùng dây bus 8 nối PortB với D0 đến D7.
ỨNG DỤNG:
Viết chương trình hiển thị nhiệt độ trên LCD.
SƠ ĐỒ MẠCH:
VCC
J2
CON1 1
U1403
LM35
1 2 3 VDD VOUT GND
PHẦN IV
GIẢI CÁC BÀI TẬP THỰC HÀNH
ắ BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRấN LED ĐƠN.
ắ BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRấN LED VÀ THAY ĐỔI THỜI GIAN DELAY
ắ BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRấN LED 7
ắ BÀI 4: HIỂN THỊ ĐỒNG HỒ TRấN LED 7
ắ BÀI 5 : CHƯƠNG TRèNH ĐẩN GIAO THễNG
ắ BÀI 6: CHẠY CHỮ TRấN LED MA TRẬN
ắ BÀI 7 : HIỂN THỊ KÍ TỰ TRấN LCD
ắ BÀI 8 : GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD
ắ BÀI 9 : ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN
ắ BÀI 10: ĐỘ NHIỆT ĐỘ DÙNG LM35
BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN
//***********CHUONG TRINH LED DON **********
//***************XUAT RA PORTB ***************
//***********************************************
#include <16f877A.h>
#fuses nowdt,noprotect,nolvp,xt,put
#use delay(clock=4000000)
#use fast_io(b) void main() {
set_tris_b(0);
output_b(0);
while(true) {
output_b(0b11111110);
delay_ms(250);
output_b(0b11111101);
delay_ms(250);
output_b(0b11111011);
delay_ms(250);
output_b(0b11110111);
delay_ms(250);
output_b(0b11101111);
delay_ms(250);
output_b(0b11011111);
delay_ms(250);
output_b(0b10111111);
delay_ms(250);
output_b(0b01111111);
delay_ms(250);
output_b(0b10111111);
delay_ms(250);
output_b(0b11011111);
delay_ms(250);
output_b(0b11101111);
delay_ms(250);
output_b(0b11110111);
delay_ms(250);
output_b(0b11110111);
delay_ms(250);
output_b(0b11111011);
delay_ms(250);
output_b(0b11111101);
delay_ms(250);
output_b(0b11111110);
delay_ms(250);
output_b(0b01111110);
delay_ms(250);
output_b(0b10111101);
delay_ms(250);
output_b(0b11011011);
delay_ms(250);
output_b(0b11100111);
delay_ms(250);
output_b(0b11011011);
delay_ms(250);
output_b(0b10111101);
delay_ms(250);
output_b(0b01111110);
delay_ms(250);
output_b(0b11111111);
output_b(0b00000000);
} }
BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED VÀ THAY ĐỔI THỜI GIAN DELAY
//********CHUONG TRINH LED DON******
//**********CO THAY DOI DELAY*********
//*********XUAT DU LIEU RA PORTC*****
//***************************************
#include <16f877a.h>
#fuses XT,NOWDT
#use delay(clock = 4000000)
#use fast_io(c) int a=300;
int i;
void main() {
set_tris_c(0);
output_c(255);
while (true) {
for(i=10;i>=1;i--) {
output_c(0b11111110);
delay_ms(a);
output_c(0b11111100);
delay_ms(a);
output_c(0b11111000);
delay_ms(a);
output_c(0b11110000);
delay_ms(a);
output_c(0b11100000);
delay_ms(a);
output_c(0b11000000);
delay_ms(a);
output_c(0b10000000);
delay_ms(a);
output_c(0x00);
delay_ms(a);
a=a-30;
} a=300;
for(i=10;i>=1;i--) {
output_c(0b01111111);
delay_ms(a);
output_c(0b00111111);
delay_ms(a);
output_c(0b00011111);
delay_ms(a);
output_c(0b00001111);
delay_ms(a);
output_c(0b00000111);
delay_ms(a);
output_c(0b00000011);
delay_ms(a);
output_c(0b00000001);
delay_ms(a);
output_c(0x00);
delay_ms(a);
a=a-30;
} a=300;
for(i=10;i>=1;i--) {
output_c(0b01010101);
delay_ms(a);
output_c(0b10101010);
delay_ms(a);
a=a-30;
} } }
BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7
//********CHUONG TRINH LED 7***********
//*****PORTA QUET, PORTB DU LIEU*******
//*************************************
#include<16f877.h>
#fuses xt,nowdt
#use delay (clock =4000000)
#use fast_io(a)
#use fast_io(b) int so[] =
{255,255,255,255,255,255,192,144,249,192,192,128,255,255,255,255,255, 255};
int a,b,c,d=1,e,f;
void main() {
set_tris_b(0);
set_tris_a(0);
while (true) {
a=0;
//*****kieu_1, nhap nhay 5 lan*****
while(a<5) {
for (b=0;b<=150;b++) {
d=1;
for (c=0;c<=5;c++) {
e=63-d;
output_b(so[c+6]);
output_a(e);
delay_us(500);
output_b(255);
d=d*2;
} }
output_b(255);
delay_ms(300);
a++;
}
//*****kieu_2; dich so sang trai*****
a=0;
f=0;
while(a<13) {
for (b=0;b<=200;b++) {
d=1;
for (c=0;c<=5;c++) {
e=63-d;
output_b(so[c+f]);
output_a(e);
delay_us(500);
output_b(255);
d=d*2;
} } a++;
f++;
}
output_b(255);
delay_ms(300);
//*****kieu_3; nhap nhay 3 lan*****
a=0;
while(a<5) {
for (b=0;b<=150;b++) {
d=1;
for (c=0;c<=5;c++) {
e=63-d;
output_b(so[c+6]);
output_a(e);
delay_us(500);
output_b(255);
d=d*2;
} }
output_b(255);
delay_ms(300);
a++;
}
//******kieu_3; dich so sang phai*****
a=0;
f=12;
while(a<13)
{
for (b=0;b<=200;b++) {
d=1;
for (c=0;c<=5;c++) {
e=63-d;
output_b(so[c+f]);
output_a(e);
delay_us(500);
output_b(255);
d=d*2;
} } a++;
f--;
} } }
BÀI 4: HIỂN THỊ ĐỒNG HỒ TRÊN LED 7
//***********CHUONG TRINH DONG HO**********
//*************HIEN THI TREN LED 7*************
//*********QUET PORTA, DU LIEU PORTC*********
//***********************************************
#include <16f877A.h>
#use delay (clock=4000000)
#fuses xt,nowdt
#use fast_io(a)
#use fast_io( b) int a,b,c,d,e,f,g,h;
int const so[]={64,121,36,48,25,18,2,120,0,16};
void main () {set_tris_b(0);
set_tris_a(0);
while(true) {
for (a=0;a<=2;a++)//h {
for (b=0;b<=h;b++)//h {
for (c=0;c<=5;c++)//m {
for (d=0;d<=9;d++)//m {
for (e=0;e<=5;e++)//s {
for (f=0;f<=9;f++)//s {
for (g=0;g<=100;g++) {
output_b(so[f]);
output_a(0b011111);
delay_us(1500);
output_b(255);
output_b(so[e]);
output_a(0b101111);
delay_us(1500);
output_b(255);
output_b(so[d]);
output_a(0b110111);
delay_us(1500);
output_b(255);
output_b(so[c]);
output_a(0b111011);
delay_us(1500);
output_b(255);
output_b(so[b]);
output_a(0b111101);
delay_us(1500);
output_b(255);
output_b(so[a]);
output_a(0b111110);
delay_us(1500);
output_b(255);
if (a==2) h=3;
else h=9;
} } } } } } } } }
BÀI 5 : CHƯƠNG TRÌNH ĐÈN GIAO THÔNG
//******CHUONG TRINH DEN GIAO THONG ********
//******QUET PORTA, DU LIEU RTB,PORTD********
//*************************************************
#include <16f877.h>
#fuses NOWDT,XT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(A)
#use fast_io(d) int8 i;
int const led_tren[]={0b00001001,0b10011111,0b00110001, 0b00010101,0b10000111 ,0b01000101,0b01000001,
0b00011111,0b00000001,0b00000101};
int const led_duoi[]={0b00001100,0b11001111,0b10011000, 0b10001010,0b01001011,0b00101010,0b00101000, 0b10001111,0b00001000,0b00001010};
void main ()
{ set_tris_A(0);output_A(255);
set_tris_b(0);output_b(255);
set_tris_d(0);output_d(255);
while(true) {
output_a(0b11011011);
for (i=9;i>=3;i--) {
output_b(led_duoi[i-3]);
output_d(led_tren[i]);
delay_ms(1500);
output_b(255);
output_d(255);
} //xanh1 + do2 output_a(0b11011101);
for (i=3;i>=1;i--) {
output_b(led_duoi[i-1]);
output_d(led_tren[i-1]);
delay_ms(1500);
output_b(255);
output_d(255);
} //vang1 + do2
if (i=0) { i=9;
}
output_a(0b11110110);
for (i=9;i>=3;i--) {
output_b(led_duoi[i]);
output_d(led_tren[i-3]);
delay_ms(1500);
output_b(255);
output_d(255);
} //xanh2 + do1 output_a(0b11101110);
for (i=3;i>=1;i--) {
output_b(led_duoi[i-1]);
output_d(led_tren[i-1]);
delay_ms(1500);
output_b(255);
output_d(255);
} //vang2 + do1 }
}
BÀI 6: CHẠY CHỮ TRÊN LED MA TRẬN
//******CHAY CHU TREN LED MA TRAN*******
//***************PORTB DU LIEU**************
//************PORTD,PORTC QUET*************
#include <16f877.h>
#fuses xt,nowdt
#use delay(clock = 4000000)
#use fast_io(c)
#use fast_io(b)
#use fast_io(d)
int16 i,j,a=0,b=0,c=1,d=0,e=1,f=0;
int8 const kytu[] = {
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XE1,0XDE,0XDE,0XED,0XFF, //CHU C 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XE1,0XDE,0XDE,0XE1,0XFF //CHU O 0XFF,0XFF,0XFF,0XFF
0XDF,0XDF,0XC0,0XDF,0XDF,0XFF //CHU T 0XC0,0XF7,0XF7,0XC0,0XFF //CHU H 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XE1,0XDE,0XDA,0XC8,0XFB,0XFF //CHU G 0XFF,0XFF,0XFF,0XFF
0XC0,0XD6,0XD6,0XE9,0XFF //CHU B 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XFF,0XFF,0XFF,0XFF
0XC0,0XF7,0XF7,0XC0,0XFF //CHU H 0XC1,0XFE,0XFE,0XC1,0XFF // CHU U 0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XE1,0XDE,0XDA,0XC8,0XFB,0XFF // CHU G 0XFF,0XFF,0XFF,0XFF
0XE1,0XDE,0XDE,0XED,0XFF, //CHU C 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XFF,0XFF,0XFF,0XFF
0XC0,0XEF,0XF7,0XEF,0XC0,0XFF //CHU M 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XC1,0XFE,0XFE,0XC1,0XFF //CHU U 0XFF,0XFF,0XFF,0XFF
0XCE,0XF5,0XFB,0XF5,0XCE,0XFF //CHU X 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A
0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XC0,0XF7,0XF7,0XC0,0XFF //CHU H 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
void hienthi();
void main() {
set_tris_b(0); output_b(0);
set_tris_d(0);output_d(0);
set_tris_c(0);output_c(0);
while (true) {
for (i =0;i<17*10;i++) {hienthi();}
if (b==170) b=0;
else b++;
} }
void hienthi() { e=255-c;
f=255-d;
output_b(kytu[a]);
output_d(e);
output_c(f);
c=c*2;
d=d*2;
if (c>=1) d=0;
if (c==256) {
c=0;
d=1;
}
if (d>=1) c=0;
if (d==256) {
d=0;
c=1;
a=b;
}
if (a==170) a=0;
else
a++;
delay_us(1500);
output_d(255);
output_c(255);
}
BÀI 7 : HIỂN THỊ KÍ TỰ TRÊN LCD
//*********CHUONG TRINH CHAY CHU TREN LCD*********
//*******PORTB XUAT DU LIEU, PORTD,PORTC QUET******
//********************************************************
#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#define RS RE0
#define RW RE1
#define E RE2
#define LCD PORTB
const unsigned char line1[]={'D','O',' ','A','N' ,' ','T','O','T',' ', 'N','G','H','I','E','P','#'};
const unsigned char line2[]={'K','I','T',' ','T','H','U','C' ,' ','T','A','P', ' ','P','I','C',' ', '1','6','F','8','7','7','A','#'};
const unsigned char line3[]={' ',' ','K','H','O','A' ,' ','D','T',' ','-',' ','T','H','#'};
const unsigned char line4[]={' ',' ','G','V','H','D',':'
,' ','L','E',' ','D','I','N','H',' ','K','H','A','#'} ; const unsigned char line5[]={ 'S','V',' ','T','H','U','C'
,' ','H','I','E','N','#'};
const unsigned char line6[]={'H','A',' ','X','U','A','N' ,' ','B','I','N','H',' ','&'} ;
const unsigned char line7[]={'V','U',' ,'T','H','A','N','H' ,' ','H','U','N','G','#'};
/**************************/
void command(void) {
RS = 0; // GHI LENH RW = 0;
E = 1;
E = 0;
delay_ms(6);
}
/**************************/
void send(void) {
RS = 1;// GHI DU LIEU RW = 0;
E = 1;
E = 0;
delay_ms(6);
}
/*************************/
void main(void) {
while(true)
{ int i = 0,y=0,k=0,z=0,a=0,b=0,c=0,d=0,e=0,f=0;
set_tris_B(0);
set_tris_E(0);
delay_ms(100);
LCD = 0x38;
command();
LCD = 0x0C;
command();
LCD = 0x80;
command();
while (line1[y]!='#') {
LCD=line1[y];
send();
delay_ms(100);
y++;
} lcd=0xC0;
command();
while(i<16) {
lcd=line2[i];
send();
i++;
delay_ms(200);
} i=2;
while (line2[z]!='#') {
LCD = 0x38;
command();
LCD = 0x0C;
command();
LCD = 0x80;
command();
y=0;
while (line1[y]!='#') {
lcd=line1[y];
send();
y++;
}
lcd=0xc0;
command();
k=i+16;
for(z=i;z<k;z++) {
lcd=line2[z];
send();
}
delay_ms(100);
i++;
delay_ms(500);
lcd=0x01;
command();
LCD = 0x82;
command();
}
while (line3[d]!='#') {
LCD=line3[d];
send();
delay_ms(100);
d++;
} i=0;
while (line4[e]!='#') {
LCD = 0x80;
command();
a=0;
while (line3[d]!='#') {
lcd=line3[d];
send();
d++;
}
lcd=0xc0;
command();
k=i+16;
for(e=i;e<k;e++) {
lcd=line4[e];
send();}
delay_ms(100);
i++;
delay_ms(500);
}
lcd=0x01;
command();
lcd=0x0e;
command();
LCD = 0x82;
command();
while (line5[a]!='#') {
LCD=line5[a];
send();
delay_ms(100);
a++;
}
lcd=0xC2;
command();
while(b<12) {
lcd=line6[b];
send();
b++;
delay_ms(100);
} lcd=0x01;
command();
lcd=0x38;
command();
LCD = 0x0C;
command();
LCD = 0x88;
command();
lcd=line6[b+1];
send();
delay_ms(200);
lcd=0x38;
command();
LCD = 0x0C;
command();
lcd=0xc2;
command();
while (line7[c]!='#') {
LCD=line7[c];
send();
delay_ms(200);
c++;
}
delay_ms(500);
lcd=0x01;
command();
} }
BÀI 8 : GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD
// ******GIAO TIEP BAN PHIM VOI LCD******
// *********RS,RW,E POTRE*****************
// ***********LCD PORT B******************
// **********KEYPAD PORT D***************
//*****************************************
#include "16F877A.h"
#include <DEFS_16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#byte portD=0x08
#byte portB=0x06
#byte portE=0x09
const unsigned char dig[]= {'X','I','N',' ','N','H','A','P',' ','S','O','#'};
int8 i,j,a=0;
void lenh(void) {
output_low(pin_e0);
output_low(pin_e1);
output_high(pin_e2);
output_low(pin_e2);
delay_ms(6);
}
void du_lieu(void) {
output_high(pin_e0);
output_low(pin_e1);
output_high(pin_e2);
output_low(pin_e2);
delay_ms(6);
}
void main(void) {
output_b(0x38);
lenh();
output_b(0x0E);
lenh();
output_b(0x80);
lenh();
While (dig[a]!='#') {
portb=dig[a];
du_lieu();
delay_ms(100);
a++;
}
output_b(0XC0);
lenh();
delay_ms(100);
output_d(0b11111111);
while(1) {
//****************************************************
output_d(0b11111110);
delay_ms(10);
if( input(pin_D4)==0 ) {
output_b(0x37); //ghi 7 du_lieu();
delay_ms(150);
}
if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 {
output_b(0x38); //ghi 8 du_lieu();
delay_ms(150);
}
if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 {
output_b(0x39); //ghi 9 du_lieu();
delay_ms(150);
}
if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 {
output_b('A'); // ghi a du_lieu();
delay_ms(150);
}
//****************************************************
output_D(0b11111101);
delay_ms(10);
if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 {
output_b(0x34); //ghi 4 du_lieu();
delay_ms(150);
}
if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 {
output_b(0x35); //ghi 5 du_lieu();
delay_ms(150);
}
if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 {
output_b(0x36); //ghi 6 du_lieu();
delay_ms(150);
}
if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 {
output_b('B'); //ghi b du_lieu();
delay_ms(150);
}
//****************************************************
output_D(0b11111011);
delay_ms(10);
if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 {
output_b(0x31); //ghi 1 du_lieu();
delay_ms(150);
}
if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 {
output_b(0x32); //ghi 2 du_lieu();
delay_ms(150);
}
if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 {
output_b(0x33); //ghi 3 du_lieu();
delay_ms(150);
}
if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 {
output_b('C'); //ghi c du_lieu();
delay_ms(150);
}
//****************************************************
output_D(0b11110111);
delay_ms(10);
if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 {
output_b('*'); //ghi * du_lieu();
delay_ms(150);
}
if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 {
output_b(0x30); //ghi 0 du_lieu();
delay_ms(150);
}
if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 {
output_b(0X01); //CLEAR lenh();
delay_ms(150);
}
if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 {
portb='D'; //ghi d du_lieu();
delay_ms(150);
} } }