Tải bản đầy đủ (.docx) (27 trang)

đề tài :Thiết kế lcd bàn phím điện thoại

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (941.12 KB, 27 trang )

BT Vi xử lí

LCD Bàn phím điện thoại

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI
KHOA ĐIỆN – ĐIỆN TỬ

Bài tập lớn mơn Vi xử lí
Giảng viên : Ngơ Thanh
Nhóm
:3
Thành viên : Nhóm 1(LCD 4 bit)
1. Lại Văn Hồn
2. Thng Trung
3. Nguyễn Văn Mạnh
5. Phạm Mạnh Linh

Lớp KTVT 1

Hà Nội, Năm 2022
I.

Yêu cầu:

Nhóm 3 Lớp KTVT 1 – K61

1

Giảng viên: Ngơ Thanh Bình



BT Vi xử lí

LCD Bàn phím điện thoại

Thiết kế LCD bàn phím điện thoại
II.

Nội dung báo cáo
A. PHẦN 1

• Lời mở đầu ……………………………………………………………………….
…..3

Tìm
hiểu
về
vi
điều
khiển
PIC16F877A
……………………………………………...4

Giới
thiệu
về
LCD
…………………………………………………………………....6
B. PHẦN 2
• Linh kiện chuẩn bị ……………………………………………………………………8
• Lưu đồ giải thuật. ………………………………………………………....…….

…….8

Viết
chương
trình
cho
vi
điều
khiển
…………………………………………………..9

Mạch

phỏng
Proteus
……………………………………………………………..13
C. PHẦN 3
• Linh kiện chuẩn bị …………………………………………………………………..
16
• Lưu đồ giải thuật. ………………………………………………………....…….
…...16

Viết
chương
trình
cho
vi
điều
khiển
………………………………………………....17


Mạch

phỏng
Proteus
……………………………………………………………..23
D. PHẦN 4
• Nhận xét của giảng viên ............................................................................................
26

Nhóm 3 Lớp KTVT 1 – K61

2

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

LỜI NĨI ĐẦU
Trong một xã hội hiện đại, sự phát triển của ngành điện tử viễn thông là một
yêu cầu không thể thiếu để thúc đẩy nền kinh tế phát triển và góp phần nâng cao đời
sống xã hội.
Ngày nay, trên thế giới, điện tử viễn thông vẫn không ngừng phát triển với tốc
độ rất cao và thâm nhập ngày càng sâu vào tất cả các lĩnh vực của đời sống xã hội.
Cùng với sự phát triển như vũ bão đó, ngành điện tử viễn thông Việt Nam cũng đang
nỗ lực hết sức lực trên con đường tìm chỗ đứng cho mình. Do đó sự ra đời của các
dịch vụ điện thoại mà cụ thể mà cụ thể là điện thoại di động với ưu thế dễ dàng hoạt

động khi di chuyển mọi lúc mọi nơi. Nhưng để mà hoàn thiện được một sản phẩm như
thế, chúng ta mới đặt ra được vấn đề làm sao để hình dung ra được các chức năng cơ
bản để sau này nó là nguồn gốc chính để phát triển ra nhiều thứ mới mẻ. Từ yêu cầu
trên và những kiến thức tiếp thu ở trường, nhóm em đã lựa chọn đề tài: “ Thiết kế LCD
bàn phím điện thoại. ”
Trong đề tài này, nhóm em sẽ tập trung giải quyết các vấn đề chính:





Thiết kế phần cứng điều khiển thiết bị thông qua PIC16F877A.
Điều khiển bật/tắt thiết bị
Bấm phím
Hiển thị trên LCD mã điều khiển để kiểm tra.

Trong quá trình thực hiện đề tài, tuy đã rất cố gắng xong do những hạn chế về
thời gian tìm hiểu, kiến thức cũng như kinh nghiệm thực tế nên chúng em khơng tránh
khỏi nhiều thiết xót. Chúng em rất mong nhận được những ý kiến đóng góp của thầy

Nhóm 3 Lớp KTVT 1 – K61

3

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại


và các bạn để đề tài của chúng em ngày càng được hoàn thiện hơn, với nhiều chức
năng hơn.
Nhóm em xin chân thành cảm ơn.

A. PHẦN 1.
I.

Tìm hiểu về vi điều khiển PIC16F877A.
1. Khái quát về PIC16F877A.
1.1. Sơ đồ nguyên lí và mạch thực tế của PIC16F877A.

Sơ đồ chân PIC16F877A

Mạch thực tế PIC16F877A

1.2. Nhận xét
Từ sơ đồ chân và mạch thực tế, ta rút ra các nhận xét ban đầu như sau:
PIC16F877A là một Vi điều khiển PIC 40 chân và được sử dụng hầu hết trong
các dự án và ứng dụng nhúng. Nó có năm cổng bắt đầu từ cổng A đến cổng E. Nó
có ba bộ định thời trong đó có 2 bộ định thời 8 bit và 1 bộ định thời là 16 Bit. Nó
hỗ trợ nhiều giao thức giao tiếp như giao thức nối tiếp, giao thức song song, giao
thức I2C. PIC16F877A hỗ trợ cả ngắt chân phần cứng và ngắt bộ định thời.

-

40 chân trên được chia thành 5 PORT, 2 chân cấp nguồn, 2 chân
GND, 2 chân thạch anh và một chân dùng để RESET vi điều khiển.
5 PORT của PIC16f877A bao gồm:
+ PORTB: 8 chân


Nhóm 3 Lớp KTVT 1 – K61

4

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại
+ PORTD: 8 chân
+ PORTC: 8 chân
+ PORTA: 6 chân
+ PORTE: 3 chân

1.3. Khái quát về chức năng của các PORT trong vi xử lí PIC16F877A.
PORTA
PORTA gồm có 6 chân. Các chân của PortA, ta lập trình để có thể thực hiện được
chức năng “hai chiều”: xuất dữ liệu từ vi điều khiển ra ngoại vi và nhập dữ liệu từ
ngoại vi vào vị điều khiển.
Việc xuất nhập dữ liệu ở PIC16F877A khác với họ 8051, ở tất cả các PORT của
PIC16F877A, ở mỗi thời điểm chỉ thực hiện được một chức năng xuất hoặc nhập. Để
chuyển từ chức năng này nhập qua chức năng xuất hay ngược lại, ta phải xử lý bằng
phần mềm, không như 8051 tự hiểu lúc nào là chức năng nhập, lúc nào là chức năng
xuất.
Trong kiến trúc phần cứng của PIC16F877A, người ta sử dụng thanh ghi TRISA Ở
địa chỉ 85H để điều khiển chức năng IO trên. Muốn xác lập các chân nào của PORTA
là nhập (input) thì ta set bit tương ứng chân đó trong thanh ghi TRISA Ngược lại,
muốn chân nào là output thì ta clear bit tương ứng chân đó trong thanh ghi TRISA.

Điều này hoàn toàn tương tự đối với các PORT cịn lại
Ngồi ra, PORTA cịn có các chức năng quan trọng sau :
- Ngõ vào Analog của bộ ADC : thực hiện chức năng chuyển từ Analog sang
Digital
PORTB
PORTB có 8 chân. Cũng như PORTA, các chân PORTB cũng thực hiện được 2
chức năng: input và output. Hai chức năng trên được điều khiển bởi thanh ghi TRISB.
Khi muốn chân nào của PORTB là input thì ta set bit tương ứng trong thanh ghi
TRISB, ngược lại muốn chân nào là output thì ta clear bit tương ứng trong TRISB.
Thanh ghi TRISB cịn được tích hợp bộ điện trở kéo lên có thể điều khiển được
bằng chương trình.
PORTC
Nhóm 3 Lớp KTVT 1 – K61

5

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

PORTC có 8 chân và cũng thực hiện được chức năng input và output dưới sự điều
khiển của thanh ghi TRISC tương tự như hai thanh ghi trên.
Ngồi ra PORTC cịn có các chức năng quan trọng sau:
- Ngõ vào xung clock cho Timer1 trong kiến trúc phần cứng
- Bộ PWM thực hiện chức năng điều xung lập trình được tần số, duty cycle: sử dụng
trong điều khiển tốc độ và vị trí của động cơ v,v..,
- Tích hợp các bộ giao tiếp nối tiếp I2C, SPI, SSP, USART


PORTD
PORTD có 8 chân, Thanh ghi TRISD điều khiển 2 chức năng input và output của
PORTD tương tự như trên. PORTD cũng là cổng xuất dữ liệu của chuẩn giao tiếp song
song PSP (Parallel Slave Port).
PORTE
PORTE có 3 chân, Thanh ghi điều khiển xuất nhập tương ứng là TRISE. Các chân
của PORTE có ngỏ vào analog. Bên cạnh đó PORTE cịn là các chân điều khiển của
chuẩn giao tiếp PSP.
II.

Tìm hiểu về LCD
1.1. Khái quát.

Màn hình LCD có rất đa dạng và được ứng dụng trong nhiều lĩnh vực khác nhau từ
công nghiệp cho đến dân dụng. Các LCD cấp thấp đơn sắc (có màu xám, xanh lá vàng,
xanh dương, ...), trung và cao cấp thì có các loại màn hình LCD theo các chuẩn
VGA, ... với độ phân giải điểm ảnh cũng như độ phân giải màu cao, ... ngồi ra cịn có
nhiều loại LCD được ứng dụng làm các màn hình cảm ứng rất hay.
Các loại LCD đơn sắc có thể tìm hiểu để ứng dụng nghiên cứu dưới đây được thiết
kế dưới dạng các mơ-đun. Các mơ-đun gồm phần màn hình LCD, chip điều khiển quy
định các tập lệnh tác động lên LCD (mã lệnh dưới dạng các tín hiệu bịt qua các chân
điều khiển và chân dữ liệu của LCD), quy định quá trình khởi động LCD hoặc thiết lập
liên kết các vùng màn hình LCD khác nhau, ... Việc cịn lại vẫn địi hỏi cần có một
mạch điều khiển ngồi dùng vi xử lý để lập trình hiển thị và giao tiếp của LCD với các

Nhóm 3 Lớp KTVT 1 – K61

6


Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

phần cứng khác (như đọc tín hiệu từ bàn phím, ma trận phím, ADC, tính tốn, rồi hiển
thị lên LCD, hoặc giao tiếp máy tính hiển thị lên LCD,...
 LCD 7 đoạn, LCD nền xám sáng, được thiết kế từng khu vực riêng, ...
thường được dùng trong các máy tính (Calculator), các đồng hồ đeo tay, treo
tường, ...Chúng hiển thị theo các khu vực segment đã được thiết lập trước,
hoặc hiển thị như LED 7 đoạn với 7 segment mỗi khu vực. Thường khơng
có mơ-đun
 LCD hiển thị ký tự theo dịng hay đồ họa ký tự, ... chúng hiển thị bằng cách
chia màn hình ra làm nhiều ơ, thể hiện được các ký tự chỉ đọc (ROM
character - lưu trong DDRAM) hoặc các biểu tượng (thiết kế trong
CGRAM) trên mỗi ô, độ phân giải của từng ơ tùy kích thước do nhà thiết kế
quy định. Riêng LCD đồ họa ký tự thì có khác đơi chút, như kích thước màn
hình lớn hơn, các ơ liền nhau như là ma trận điểm tồn màn hình, các ký tự
thường có 2 bảng mã ASCII và 1 bảng mã chữ riêng (có kích thước ơ lớn
hơn, như tiếng Hoa, tiếng Nhật, ...); ngồi ra nó được mở rộng để hiện thị đồ
họa (chế độ mở rộng - thiết kế hiển thị qua GDRAM)
 LCD đồ họa điểm ảnh (ma trận điểm tồn màn hình) thì hồn tồn khơng có
bảng mã nào trong bộ nhớ, cũng khơng có tập lệnh cụ thể để thao tác cho
các mục đích truy cập mà hình LCD, nhưng có quy định các mã cơ bản để
thiết lập các trạng thái tín hiệu cho các điểm ảnh, và có quy định quá trình
khởi động cho LCD – đây là điều quan trọng đầu tiên khi điều khiển LCD.
Từ những điều đó, mà lập ra các tổ hợp lệnh hay chương trình để kích hoạt
các điểm ảnh tương ứng nhãm hiển thị đúng như mong muốn của chương

trình.

Nhóm 3 Lớp KTVT 1 – K61

7

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

B. PHẦN 2 (LCD 4 Bits)
I.

Linh kiện chuẩn bị.
- 1 vi điều khiển PIC16F877A
- Thạch anh 20MHz
- 2 nút bấm button
- 2 tụ điện 1 nF
- 1 tụ hóa
- 1 Bàn phím KEYPAD-PHONE
- 1 màn LCD LM016L
- 1 biến trở 5k
- 2 điện trở 10k
- 1 power
- 2 ground

II.


Lưu đồ thuật tốn

Nhóm 3 Lớp KTVT 1 – K61

8

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

III.

LCD Bàn phím điện thoại

Viết chương trình vi điều khiển PIC.

#include
__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF &
BOREN_ON & LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);
#define rs RD2
#define en RD3
#define R1 RB0
#define R2 RB1
#define R3 RB2
#define R4 RB3
#define C1 RB4
#define C2 RB5
#define C3 RB6

#define sw RB7
void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);
void lcd_delay();
unsigned int i=0;
unsigned char key();
void keyinit();
unsigned char keypad[4][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'},{'*','0','#'}};
unsigned char rowloc,colloc;
void main()
{
TRISD=0;
TRISC=0xff;
Nhóm 3 Lớp KTVT 1 – K61

9

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

}

LCD Bàn phím điện thoại

lcd_init();
keyinit();

unsigned char b;
unsigned char c=0xc0;// dia chi o hang 2 cot 1 LCD
cmd(0x80);
show(" MOI BAN NHAP ");
while(1)
{
if(sw==0){
i++;
}
if(i==1){
cmd(c);
b=key();
dat(b);
c=c+1; // sau moi lan hien thi thi dich vi tri sang ben phai
if(c==0xCF)
c=0xc0;// khi dich het cua so cua lcd thi tro ve ban dau
}
PORTB=0;
if(i==2){
i==0;
}
}

void lcd_init()
{
cmd(0x02);
cmd(0x28);
cmd(0x0e);
cmd(0x06);
cmd(0x80);

}
void cmd(unsigned char a)
{
rs=0;
PORTD&=0x0F;
PORTD|=(a&0xf0);
en=1;
lcd_delay();
en=0;
Nhóm 3 Lớp KTVT 1 – K61

10

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

}

LCD Bàn phím điện thoại

lcd_delay();
PORTD&=0x0f;
PORTD|=(a<<4&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();


void dat(unsigned char b)
{
rs=1;
PORTD&=0x0F;
PORTD|=(b&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
PORTD&=0x0f;
PORTD|=(b<<4&0xf0);
en=1;
lcd_delay();
en=0;
lcd_delay();
}
void show(unsigned char *s)
{
while(*s) {
dat(*s++);
}
}
void lcd_delay()
{
unsigned int lcd_delay;
for(lcd_delay=0;lcd_delay<=1000;lcd_delay++);
}
void keyinit()
{
TRISB=0XF0;

OPTION_REG&=0X7F;
Nhóm 3 Lớp KTVT 1 – K61

//ENABLE PULL UP

11

Giảng viên: Ngô Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

}
unsigned char key()
{
PORTB=0X00;
while(C1&&C2&&C3);
while(!C1||!C2||!C3) {
R1=0;
R2=R3=R4=1;
if(!C1||!C2||!C3) {
rowloc=0;
break;
}
R2=0;R1=1;
if(!C1||!C2||!C3) {
rowloc=1;
break;


}
R3=0;R2=1;
if(!C1||!C2||!C3) {
rowloc=2;
break;
}
R4=0; R3=1;
if(!C1||!C2||!C3){
rowloc=3;
break;
}

}
if(C1==0&&C2!=0&&C3!=0){
colloc=0;
}
else if(C1!=0&&C2==0&&C3!=0){
colloc=1;
}
else if(C1!=0&&C2!=0&&C3==0){
colloc=2;
}
else if(C1!=0&&C2!=0&&C3!=0){
colloc=3;
}
Nhóm 3 Lớp KTVT 1 – K61

12


Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

while(C1==0||C2==0||C3==0);
return (keypad[rowloc][colloc]);

}
IV. Mạch mơ phỏng Proteus
Mạch khi hồn thiện:

Nhóm 3 Lớp KTVT 1 – K61

13

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

Khi chúng ta bấm

LCD Bàn phím điện thoại

để chạy chương trình:

- Khi đó màn hình LCD sẽ xuất hiện và hiện lên dòng chữ “ MOI BAN NHAP” .

- Muốn bấm được số thì phải bấm Button trước để hiện dịng chờ đợi chúng ta nhâp
bấm phím.
- Chúng ta nhập số mà ta muốn bấm, kết quả chúng ta bấm nó sẽ xuất hiện trên màn
hình LCD.

Nhóm 3 Lớp KTVT 1 – K61

14

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

Ví dụ ta nhập 0123456789 thì nó sẽ ngay kết quả trên màn hình LCD:

Nhóm 3 Lớp KTVT 1 – K61

15

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

C. PHẦN 3 ( LCD 8 Bits)

I. Chuẩn bị linh kiện
- 1 Vi điều khiển PIC16F877A
- 2 Tụ điện 1nF
- 2 Tụ điện 330 Ohm
- 1 Thạch anh 1MHz
- 1 Keypad- Phone
- 1 màn hình LCD LM016L
- 1 Motor
- 2 nút Button
- 1 tụ hóa
II. Lưu đồ thuật tốn

Nhóm 3 Lớp KTVT 1 – K61

16

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

III. Viết chương trình Vi xử lí PIC16F877A
#include<htc.h>
#define rs RD0
#define rw RD1
#define en RD2
#define delay for(i=0;i<1000;i++)


#define R1 RB4
#define R2 RB5
#define R3 RB6
#define R4 RB7
#define C1 RB0
#define C2 RB1
#define C3 RB2

#define sw RB3

unsigned int i=0;

void lcd_init();
void cmd(unsigned char a);
Nhóm 3 Lớp KTVT 1 – K61

17

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

void dat(unsigned char b);
void show(unsigned char *s);

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_OFF & CP_OFF & BOREN_ON
& LVP_OFF & CPD_OFF & WRT_OFF & DEBUG_OFF);


void keypad()
{
C1 = 1; C2 = 0; C3 = 0;
if(R1 == 1){
dat('1');
while(R1 == 1);
}
if(R2==1){
dat('4');
while(R2 == 1);
}
if(R3==1){
dat('7');
while(R3 == 1);
}

Nhóm 3 Lớp KTVT 1 – K61

18

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí

LCD Bàn phím điện thoại

if(R4==1){
dat('*');

while(R4 == 1);
}

C1 = 0; C2 = 1; C3 = 0;
if(R1 == 1)
{
dat('2');
while(R1 == 1);
}
if(R2==1){
dat('5');
while(R2 == 1);
}
if(R3 == 1){
dat('8');
while(R3 == 1);
}
if(R4==1){
dat('0');
while(R4 == 1);
}

Nhóm 3 Lớp KTVT 1 – K61

19

Giảng viên: Ngơ Thanh Bình


BT Vi xử lí


LCD Bàn phím điện thoại

C1 = 0; C2 = 0; C3 = 1;
if(R1 == 1){
dat('3');
while(R1 == 1);
}
if(R2==1){
dat('6');
while(R2 == 1);
}
if(R3 == 1){
dat('9');
while(R3 == 1);
}
if(R4==1){
dat('#');
while(R4 == 1);
}
}

void main()
{
TRISC = 0x00;
TRISD = 0x00;
TRISB = 0xF0;
Nhóm 3 Lớp KTVT 1 – K61

20


Giảng viên: Ngơ Thanh Bình



×