CHƯƠNG TRÌNH ĐÈN GIAO THÔNG

Một phần của tài liệu Đề tài Kit thực tập PIC 16F877A (Trang 131 - 180)

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);

} } }

Một phần của tài liệu Đề tài Kit thực tập PIC 16F877A (Trang 131 - 180)

Tải bản đầy đủ (PDF)

(180 trang)