1. Trang chủ
  2. » Công Nghệ Thông Tin

đồ án vi xử lý 8051 LCD

77 1,4K 13

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đồ án vi xử lý 8051 LCD
Người hướng dẫn GVHD: Trương Minh Huy
Trường học Trường Đại Học Kỹ Thuật
Chuyên ngành Kỹ Thuật Vi Xử Lý
Thể loại Đồ án
Định dạng
Số trang 77
Dung lượng 1,29 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

đồ án vi xử lý 8051 LCD

Trang 1

M c l c ục lục ục lục

Lời nói đầu 3

Chương 1: CƠ SỞ LÝ THUYẾT 4

I Vi điều khiển 89C51: 4

1 Cấu tạo: 4

2 Cấu trúc bộ nhớ: 4

3 Cấu trúc các Port: 4

4 Các ngõ tín hiệu: 5

5 Lập trình xử lý ngắt: 6

a Ngắt timer/couter: 6

b Ngắt của bộ định thời: 7

II LCD: 8

1 Ghép nối vi điều khiển với LCD 16x2: 8

2 Nguyên lí hoạt động của LCD: 9

3 Bảng mã lệnh LCD: 9

Chương 2:THIẾT KẾ MẠCH VÀ THUẬT TOÁN 11

I Danh sách biến: 11

II Các chương trình con: 14

1 Hàm running(): 14

2 Menu: 17

3 Hẹn giờ: 20

4 Cài đặt: 23

Trang 2

Chương 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 77

I Ưu nhược điểm của chương trình 77

II Hướng phát triển 77

Trang 3

Lời nói đầu

Ngày nay, các bộ vi điều khiển đang có những ứng dụng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh vực đời sống và xã hội Hầu hết, các thiết bị kỹ thuật từ phức tạp cho đến đơn giản như thiết bị điều khiển tự động, thiết bị văn phòng cho đến các thiết bị trong gia đình đều có dùng các bộ vi điều khiển

Xuất phát từ thực tế đó, môn học kỹ thuật vi điều khiển là môn học khôngthể thiếu đối với bất kỳ sinh viên trường kỹ thuật nào nhất là các sinh viên cáckhoa Điện tử viễn thông, Công nghệ thông tin… Không chỉ cung cấp cho sinhviên kiến thức về vi điều khiển để xây dựng nên những hệ thống thiết bị kỹ thuậthiện đại Mà nó còn là môn học căn bản để chúng ta hiểu rõ bản chất của việc xử

lý các số liệu tính toán đang tồn tại từng giây, từng phút trong hàng triệu triệu con

vi xử lý, vi điều khiển trên khắp thế giới này Đem đến cái nhìn sâu sắc và hiểubiết sâu rộng về thế giới tin học, góp phần tạo nên sự say mê sáng tạo cho mỗi sinhviên yêu thích bộ môn khoa học kỹ thuật này

Đồ án môn học Kỹ thuật vi xử lý dựa trên việc sử dụng vi điều khiển 8051cũng không nằm ngoài mục đích nâng cao sự hiểu biết, củng cố lý thuyết cho mỗisinh viên Tạo cho sinh viên tinh thần làm việc nhóm để đạt được một mục đíchchung: Làm một đồ án hiệu quả, chất lượng!

Nhóm thực hiện

Trần Anh TuấnLương Văn BìnhDương Hữu Đức

Trang 4

Chương 1: CƠ SỞ LÝ THUYẾT.

o Có 128 byte RAM nôi

o 4 Port xuất/ nhập 8 bit

o Có khả năng giao tiếp truyền dữ liệu nối tiếp

o Có khả năng giao tiếp truyền dữ liệu nối tiếp

o Có thể giao tiếp 64Kb bộ nhớ bên ngoài dùng để lưu chương trình điều khiển

o Có thể giao tiếp với 64KB bộ nhớ bên ngoài dùng để lưu trữ dữ liệu

o Có 210bit có thể truy xuất từng bit Có các lệnh xử lý bit

3 Cấu trúc các Port:

o Port 0:

 Port 0 là port có 2 chứ năng với số thứ tự chân 32-39

 Trong các hệ thống điều khiển đơn giản sử dụng bộ nhớ bên trongkhông dùng bộ nhớ mở rộng bên ngoài thì port 0 được dùng làm cácđiều khiển IO(Input-Output)

Trang 5

 Trong các hệ thống điều khiển lớn sử dụng bộ nhớ mở rộng bênngoài thì port 0 có chứ năng địa chỉ và bú dữ liệu AD7- AD0(Addresss: địa chỉ, Data: dữ liệu).

o Port 1:

 Port 1 với số thứ tụ chân 1-8 Port 1 chỉ có chức năng dùng làmđường điều khiển xuất nhập IO, port 1 kkhoong chỉ có chứ năngkhác

o Port 2:

 Port là port có 2 chức năng với số thứ tự chân 21-28

 Trong các hệ thống điệu khiển đơn giản sử dụng bộ nhớ bên trongkhông dùng bộ nhớ mở rộng bên ngoài thì port 2 được dùng làm cácđiều khiển IO Trong các hệ thông điều khiển lớn sử dụng bộ nhớ

mở rộng bên ngoài thì port 2 chứ năng là địa chỉ cao A8-A15

o Port3:

 Port 3 là port có 2 chú năng với số thứ tự 10-17 Các chân của port này có nhiều chức năng , các công dụng chuyển đổi có lien hệ với các đặc tính đặc biệt của 89C51

Ngõ vào nhận dữ liệu nối tiếp

Ngõ xuất dữ liệu nối tiếp

Ngõ vào ngắt cứng thứ 0

Ngõ vào ngắt cứng thứ 1

Ngõ vào của timer/counter thứ 0

Ngõ vào của timer/counter thứ 1

4 Các ngõ tín hiệu:

o PSEN ngõ tín hiệu(Program store enable):

 PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớchương trình mở rộng thường nối ñến chân OE (output enable hoặc RD)của Eprom cho phép ñọc các byte mã lệnh

 Khi có giao tiếp với bộ nhớ chương trình bên ngoài thì mới dùng đếnPSEN, nếu không có giao tiếp thì chân PSEN bỏ trống

o Ngõ tín hiệu điều khiển ALE(Address Latch Enable):

 Khi vi điều khiển 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chứcnăng là bus tải ñịa chỉ và bus dữ liệu [AD7 – AD0] do đó phải tách cácđường dữ liệu và ñịa chỉ Tín hiệu ra ALE ở chân thứ 30 dùng làm tínhiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nốichúng với IC chốt

o Ngõ tín hiệu EA(External Access):

 Tín hiệu vào EA ở chân 31 thường nói lên mức 1 hoặc mức 0

Trang 6

Nếu nối EA lên mức logic 1 (+5v) thì vi ñiều khiển sẽ thi hànhchương trình từ bộ nhớ nội.

 Nếu nối EA với mức logic 0(0V) thì vi điều khiển sẽ thi hànhchương trình từ bộ nhớ ngoại

o Ngõ tín hiệu RST(Reset):

 Ngõ vào RST ở chân 9 là ngõ vào Reset của 89C51 Khi cấp điệncho hệ thống hoặc khi nhấn nút reset vi điều khiển Khi reset thì tínhiệu reset phải ở mức cao ít nhất là 2 chu kỳ máy, khi đó các thanhghi bên trong được nạp những giá trị thích hợp để khởi động hệthống

 Sau khi TH, TL được nạp giá trị ban đầu 16 bit thì bộ định thời phảiđược khởi động với lệnh TR0=1 với timer0 và TR1=1 với timer1,khi này bộ định thời bắt đầu đếm tăng theo xung clock từ giá trị banđầu cho tới giá trị đỉnh là FFFF Khi đó bộ định thời sẽ quay vòng từFFFF về 0000 và bật cờ báo tràn TF0 với timer0 và TF1 với timer1(ban đầu TFx=0) khi đó cần phải có thao tác xoá cờ để lần sau cònbiết được khi nào bộ đếm tràn

 Khi bộ đếm tràn thì TH voà TL của bộ định thời sẽ mang giá trị 0 do

đó phải có thao tác nạp lại giá trị ban đầu cho chúng và xoá cờ TF để

bộ đếm được lặp lại

 Như vạy khoảng thời gian mà bộ định thời toạ trễ chính là khoảngthời gian nó đếm tăng từ giá trị ban đầu được nạp cho tới giá trị đỉnhFFFF

 Tính toán giá trị nạp vào thanh ghi chứa của bộ định thời từ thời gianmuốn tạo trễ (t): gọi N =65536-t/chu kì máy Sau khi chuyển sang

mã HEX được 1 số có 4 chữ số có dạng : x1x2y1y2 Khi đó giá trịnạo cho thanh ghi chứa như sau: TH=x1x2, TL=y1y2

- Các bướclập trình cho bộ định thời để tạo thời để tạo trể ở chế độ 1:

 B1: chọn chế độ 1 cho bộ định thời cần dùng, từ đó xác định giá trịnạp cho thanh ghi TMOD

 B2: tính toán giá trị ban đầu cần nạp cho TH và TL từ thời gian trễmong muốn

 B3: khởi động bộ định thời

 B4 : kiểm tra trạng thái bật của cờ TF

Trang 7

 B5:dung bộ định thời.

 B6 : xoá cờ TF cho vòng lặp kế tiếp

 B7:quay trở về B2 để nạp lại giá trị cho TH và TL

o Chế độ 2:

 Ở chế độ này bộ định thời là 8bit, do vậy chỉ cho phép các giá trị từ

00 đến FF được nạp vào thanh ghi TH của bộ định thời Sau khi nạpgiá trị 8 bit thì vi điều khiển sẽ sao nội dung của TH sang TL và bộđịnh thời được khởi động bằng lệnh TRx=1

 Sau khi được khởi động thì bộ đinh thời bắt đầu đếm tăng trongthanh ghi TL từ giá trị ban đầu đến giá trị đỉnh FF và khi quay vòngtừ FF về 00 thì cờ TFx được bật lên 1, khi này thanh ghi TL manggiá trị 0 nhưng TL sẽ ngay lậ tức được tự động nạp lại với giá trị banđầu được lưu trong thanh ghi Th

 Như vậy trong chế độ này mỗi khi bộ đếm tràn thì thanh ghi chứa sẽđược vi điều khiển nạp lại giá trị ban đầu, do đó chế độ này được gọi

là chế độ tự động nạp lại

 Tính giá trị nạp vào thanh ghi chứa của bộ định thời từ thời giantrễ(t):

Gọi N = 256-t/chu kì máy Sau khi chuyển sang mã HEX được 1 số,

ta nạp số này vào thanh ghi TH và cả TL(nạp vào TL giá trị đếm lần

1 và nạp vào TH cho những lần sau để khi bộ đếm tràn thì phần cứngcủa vi điều khiển sẽ tự động sao Th sang TL)

- Các bước lập trình cho bộ định thời để tạo trể ở chế độ 2

 B1: nạp giá trị cho thanh ghi thiêt lập chế độ TMOD vớitimer muốn sử dụng

 B2: nạp vào TH giá trị đếm ban đầu

 B3: khởi động bộ định thời

 B4: kiểm tra cờ báo tràn TFx

 B5: xoá cờ tràn TFx, quay về B4

2 chế dộ khác của bộ định thời là chế độ 0(chế độ bộ định thời 13 bit, bộđịnh thời/bộ đếm 8 bit, định tỷ lệ truớc 5 bit ) và chế độ 3(chế độ bộ địnhthời chia tách)

b Ngắt của bộ định thời:

o Nguyên tắc sử dụng bộ định thời ở chế độ ngắt:

 khai báo ngắt của bộ định thời muốn sử dụng

 Nguồn gây ngắt

 Chương trình chính và chương trình phục vụ ngắt

o Với ngắt định thời việc khai báo nguồn ngắt bao gồm việc khai báo ngắttoàn cục là EA = 1 và khai báo ngắt cho từng bộ định thời muốn dùngET0= 1 (timer0) và ET1 = 1(timer1)

o Nguồn báo ngắt định thời(với cả 2 chế độ) đều là khi bộ đếm tràn(khi cờ

Trang 8

chươnng trình chính và chuyển vào chương trình phục vụ ngắt căn cứ theođịa chỉ của chương trình phục vụ ngắt Khi thực hiện xong chương trìnhphục vụ ngắt vi điều khiển quay trở về chương trình tại nơi bị gián đoạn khitruớc.

o Tóm lại ngắt định thời là việc ta sử dụng bộ định thời tạo trễ một khoảngthời gian được tính toán trước, sau khoảng thời gian này 1 công việc tamong muốn sẽ được thực hiện ở chương trình phục vụ ngắt công việc đó

có thể coi là độc lập với công việc ở chương trình chính

o Các công việc lập trình sử dụng ngắt định thời :

 Tính toán thời gian trễ mong muốn và công việc muốn thực hiện saukhoảng thời gian đó

 Khai báo ngắt định thời trong chương trình chính (EA=1, ETX=1)

 Lựa chọn bộ định thời và chế độ của nó trong thanh ghi TMOD

 Khởi động bộ định thời

 Xây dựng chương trình chính và các chương trình con cần thiết

 Xây dựng chương trình phục vụ ngắt thực hiện 1 công việc mongmuốn (xác định rõ địa chỉ ngắt theo thứ tự ngắt trong bảng vectorngắt)

II LCD:

1 Ghép nối vi điều khiển với LCD 16x2:

Trang 9

Màn hình LCD

2 Nguyên lí hoạt động của LCD:

 Chân VCC, Vss, và VEE: các chân VCC và VSS cáp dương nguồn 5v và masstương ứng Chân VEE được dùng để điều khiển độ tương phản

 Chân chọn thanh ghi RS(Register Select): có 2 thanh ghi trong LCD chân

RS được dùng để chọn thanh ghi nếu RS=0 thì thanh ghi mã lệnh đượcchọn để cho phép người dùng gửi 1 lệnh lên chẳng hạn như xoá màn hình,đưa con trỏ về đầu dòng… Nếu RS=1 thì thanh ghi dữ liệu được chọn chophép người dùng gửi dữ liệu cần hiển thị lên LCD

 Chân đọc/ghi (R/W): đầu vào đọc/ghi cho phép người dùng đọc thông tin từLCD khi R/W=1 hoặc ghi thông tin lên LCD

 Chân cho phép E(Enable): chân cho phép được sử dụng bởi LCD để chốt dữliệu của nó Khi dữ liệu được cấp đế chân dữ liệu thì 1 xung mức cao xuốngthấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu.Xung này có độ rộng tối thiểu 450ms

 Chân DB0-DB7: đây là đường dữ liệu 8bit, dùng để gửi thông tin lên LCD

3 Bảng mã lệnh LCD:

04 Giảm con trỏ(dịch con trỏ sang trái )

06 Tăng con trỏ(dịch con trỏ sang phải)

Trang 10

14 Dịch vị trí con trỏ sang phải

Trang 11

Chương 2:THIẾT KẾ MẠCH VÀ THUẬT TOÁN.

I Danh sách biến:

DANH SÁCH CÁC BIẾN

1 unsigned char startclock = 1 Biến kiểm tra ( = 1 ) bật giao diện chính đồng hồ

nghĩa là hiện thị ngày giờ hệ thống trên LCD ( =

0 ) tắt nó đi Mặc định nó được bật

Ngoài ra nó còn ràng buộc các chức năng củaphím bấm khi đc bật

2 unsigned char startmenu = 0 Biến kiểm tra ( = 1 ) bật giao hiện Menu ( = 0 )

tắt nó đi Ngoài ra nó cũng có ràng buộc khi được bật

3 unsigned char starthengio=0 Biến kiểm tra ( = 1 ) bật giao hiện hẹn giờ ( = 0 )

tắt nó đi Ngoài ra nó còn ràng buộc các chức năng của phím bấm khi đc bật

4 unsigned char startcaidat = 0 Biến kiểm tra ( = 1 ) bật giao hiện Cài đặt ngày

giờ ( = 0 ) tắt nó đi Ngoài ra nó còn ràng buộc các chức năng của phím bấm khi đc bật

5 unsigned char startSport=0 Biến kiểm tra ( = 1 ) bật giao hiện Đồng hồ thể

thao ( = 0 ) tắt nó đi Ngoài ra nó còn ràng buộc các chức năng của phím bấm khi đc bật

6 unsigned char startDialog=0 Biến kiểm tra ( = 1 ) bật giao hiện Thông báo

( = 0 ) tắt nó đi Ngoài ra nó còn ràng buộc các chức năng của phím bấm khi đc bật

7 unsigned char typetime = 0 Biến để quy định hiện thị kiểu giờ 24 hoặc 12

Trang 12

8 unsigned char hengio = 0 Biến để kiểm tra có hoặc chưa hẹn giờ Nếu có thì

11 unsigned int day , month ,

year Biến ngày tháng năm.

12 unsigned char data thu = 2 Biến để xác định thứ ( mặc định nó là thứ 2 khi

Mảng chứa số ngày tối đa của tháng

15 unsigned char data cursor = 0 Biến con trỏ Là chỉ số của mảng tọa độ Tại vị trí

toado[ cursor ] , mục đích cho nhấp nháy chổ đó

16 unsigned char data k=7; Chỉ số tối đa của mảng Time[8], và mảng D[7]

Mục đích để thay đổi và điều chỉnh Time[k] và D[k]

17 unsigned char data

Time [ 8 ] Lưu giá trị giờ, phút, giây hiện tại và dùng để xuấtra LCD

18 unsigned char data T [ 8 ] Lưu giá trị thời gian cần hẹn

19 unsigned char data Tsport

[ 6 ] Lưu giá trị thời gian thể thao

20 unsigned char toadoTime[] =

{ 5 , 6 , 8 , 9 }

Cùng với hàm di chuyển con trỏ để cài giờ hẹn

00 : 00 Dùng khi hẹn giờ để trỏ đến mún trỏ đến vị trí hẹn giờ trong LCD

toadoSetTime[] = { 4 , 5 , 7 ,

Cùng với hàm di chuyển con trỏ để cài đặt giờ và ngày cho đồng hồ điện tử Dùng khi cài đặt để trỏ

Trang 13

8 , 10 , 11 ,2 , 5 , 6 , 7 , 8 , 10

, 11 , 13 , 14 } đến vị trí cần cài đặt sửa lại

22 unsigned char data hour ,

minute , second

Biến giờ phút giây

23 unsigned char data count = 0 Biến dùng để đếm trong timer để định giá trị la

Trang 14

II Các chương trình con:

1 Hàm running():

Trang 15

//=================== Ham de tao thoi gian ================// sau 0.01 giay thi duoc goi lai trong ham ngat

Time[1]=0;

if(Time[2]==9){

Time[2]=0;

if(Time[3]==5){

Time[3]=0;

if(Time[4]==9){

Time[4]=0;

if(Time[5]==5){

Trang 16

if(Time[6]==9&&Time[7]<2){

Trang 18

if(phimnhan==4) //doc exit chuyen doi kieu gio he thong 24 <-> 12

// - Trong giao dien man hình menu -// -if(startmenu)

// -{

if(phimnhan==1) //thoat ra{

reset();

startclock=1;

}if(phimnhan==2) // nham phim tang de chon hen gio{

cursor=0;

k=7;

reset();

Trang 19

Viewhengio();

}if(phimnhan==3) // nham phim giam de chon cai dat{

Trang 20

ViewSport();

}}

3 Hẹn giờ:

void baothuc()

{

if(phimnhan==1)

Trang 21

// nhan phim menu de dich chuyen con tro nhap nhay

{

cursor++; k ;// moi lan bam thi dich con tro qua phai 1 don vi dong thoi T[k]->T[k-1]

if(cursor==4){

{

settime_tang(T);

Viewhengio();

}if(phimnhan==3) // nhan phim giam de giam don vi trong hen gio

{

settime_giam(T);

Viewhengio();

}

Trang 22

if(phimnhan==4) // nhan exit de thoat va hien thong bao{

Trang 23

4 Cài đặt:

Trang 27

cursor=0;

k=7;

}}

f(phimnhan==2)// nhan phim tang de tang

Trang 29

D[3]=0;

month= D[2]+D[3]*10;

}IsLeapYear(year);

Trang 31

month= D[2]+D[3]*10;

if ((month>12)||(month==0)){

D[2]=1;

D[3]=0;

month= D[2]+D[3]*10;

}// - Ngay

Trang 32

D[0]=ngay[month]%10;D[1]=ngay[month]/10;

}reset();

startclock=1;

}}

Trang 33

Chương 3: CODE HOÀN CHỈNH .

/*================THU VIEN KHAI_BAO.H ================*/

unsigned char data D[8];

unsigned int day, month,year;

unsigned char data thu=2;

unsigned char hengio=0;

Trang 34

unsigned char run=0;

unsigned char data ngay[]

={0,31,28,31,30,31,30,31,31,30,31,30,31};

unsigned char data cursor=0;

unsigned char data k=7;

unsigned char phimnhan=0;

unsigned char startclock=1;

unsigned char startmenu=0;

unsigned char starthengio=0;

unsigned char startcaidat=0;

unsigned char startDialog=0;

unsigned char startSport=0 ;

unsigned char data Time[8]; //Time he thong

unsigned char data T[8]; //Time Hen gio

unsigned char data Tsport[6]; //Time Hen gio

unsigned char typetime=0;

unsigned char data toadoTime[]={5,6,8,9,11,12};

unsigned char data toadoSetTime[]={4,5,7,8,10,11,2,5,6,7,8,10,11 ,13, 14};

unsigned char data hour,minute,second;

unsigned char data count=0; // Bien dung de dem cho loa keuunsigned char nhayled[20]

Trang 35

LCDdata=0xff; //gia tri 0xff

while(BF) //kiem tra co ban

{

EN=0; //dua xung cao xuong thap de chot

EN=1; //dua chan cho phep len cao

}

}

//=======================================================

Trang 36

//================== Cac lenh dieu khien LCD=================void LCDcontrol(unsigned char x)

{

RS=0;//chon thanh ghi lenh

RW=0;//ghi len LCD

LCDdata=x ;// gia tri x

EN=1;//cho phep muc cao

EN=0;//xung cao xuong thap

wait();//doi LCD san sang

}

//=======================================================

//==================== Khoi dong LCD=======================void LCDinit(void)

{

LCDcontrol(0x38);//2 dong va ma tran 5x7

LCDcontrol(0x0e);//bat man hinh, bat con tro

LCDcontrol(0x01);//xoa man hinh

}

//=======================================================

Trang 37

//================== Hien thi 1 ky tu len LCD ==================void LCDwrite(unsigned char c)

{

RS=1;//ghi du lieu

RW=0;//ghi du lieu len LCD

LCDdata=c;//gia tri C

EN=1;//cho phep muc cao

EN=0;//xung cao xuong thap

Trang 38

LCDcontrol(0x80);//ep con tro ve dau dong

}

//======================================================

//======================= Xuat 2 dong ======================void LCD_2line(unsigned char *x1,unsigned char *x2)

unsigned char cursor;

cursor = 64*(line-1) + col-1;

Ngày đăng: 25/12/2013, 10:35

HÌNH ẢNH LIÊN QUAN

3. Bảng mã lệnh LCD: - đồ án vi xử lý 8051 LCD
3. Bảng mã lệnh LCD: (Trang 9)
Bảng mã để nhấp nháy led - đồ án vi xử lý 8051 LCD
Bảng m ã để nhấp nháy led (Trang 13)

TỪ KHÓA LIÊN QUAN

w