Tìm tài liệu

Thiet ke mach LCD hien thi chuoi ky tu

Thiết kế mạch LCD hiển thị chuỗi ký tự

Upload bởi: hung20091978

Mã tài liệu: 250586

Số trang: 11

Định dạng: doc

Dung lượng file: 91 Kb

Chuyên mục: Kỹ thuật điện - điện tử

Info

Lời nói đầu

1. Giới thiệu IC 8051:

1.1Giới thiệu họ MSC-51:

MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM nội.

AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit, vecto ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON-CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống.

1.2 Sơ đồ khối của AT89C51 :

http://photo.zing.vn/photo/gallery/detail.5387929.html

1. 3 Sơ đồ chân của AT89C51

http://photo.zing.vn/photo/gallery/detail.5387932.html

1.4Chức năng các chân của AT89C51

-89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ.

a/.Các port:

Port 0:

Port 0 là port có hai chức năng ở các chân 32-39 của 89C51. trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.

b/.Port 1:

-port 1 là port IO trên các chân 1-8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.

c/.Port 2:

-port 2 là 1 port có tác dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.

d/.Port 3:

Port 3 là port có tác dụng kép trên các chân 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ó liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:

http://photo.zing.vn/photo/gallery/detail.5387937.html

* Các ngõ tín hiệu điều khiển:

Ngõ tín hiệu PSEN:

- 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 được nói đén chân OE của Eprom cho phép đọc các byte mở rộng .

- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.

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

- Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu 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ín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.

- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.

- Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là 12Mhz.

- Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 89C51.

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

- Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89c51.

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

- Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi cấp điện mạch tự động Reset.

Các ngõ vào bộ dao động X1, X2:nguồn 5V .

3. Mô tả về LCD

Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.

Mô tả các chân, loại 14 chân.

-VCC: cấp nguồn dương

-VSS: cấp nguồn âm

-VEE: điều khiển độ tương phản của LCD

-Chân chọn thanh ghi RS( Register Select)

Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.

-Chân đọc/ghi (R/W)

Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1

-Chân cho phép E (Enable)

Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấ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 phải rộng tối thiểu là 450 ns.

-Chân D0~D7:

Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.

Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1

Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD

Chân

Kí hiệu

I/O

Mô tả

1

VSS

-

Đất

2

VCC

-

Dương 5V

3

VEE

-

Cấp nguồn điều khiển phản

4

RS

I

RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.

5

R/W

I

R/W=1 đọc dữ liệu. R/W=0 ghi

6

E

I/O

Cho phép

7

DB0

I/O

Các bit dữ liệu

8

DB1

I/O

Các bit dữ liệu

9

DB2

I/O

Các bit dữ liệu

10

DB3

I/O

Các bit dữ liệu

11

DB4

I/O

Các bit dữ liệu

12

DB5

I/O

Các bit dữ liệu

13

DB6

I/O

Các bit dữ liệu

14

DB7

I/O

Các bit dữ liệu

Các mã lệnh LCD

Mã Hex

Lệnh đến thanh ghi của LCD

1

Xóa màn hình hiển thị

2

Trở về đầu dòng

4

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

5

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

6

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F

Tắt hiển thị, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

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

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Ép con trỏ Vũ đầu dòng thứ nhất

C0

Ép con trỏ Vũ đầu dòng thứ hai

38

Hai dòng ma trận

4. Sơ đồ giao tiếp hoàn chỉnh

Được thiết kế trên phần mềm proteus

file:///C:/DOCUME~1/Admin/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

5.Chương trình mô phỏng

$mod51

; Chương trình hiển thị LCD

; Tần số thạch anh 12MHz

;Khái báo thanh ghi địa chỉ LCD

LCD_CMD_WR equ 0

LCD_DATA_WR equ 1

LCD_BUSY_RD equ 2

LCD_DATA_RD equ 3

;LCD Commands

LCD_CLS equ 1

LCD_HOME equ 2

LCD_SETMODE equ 4

LCD_SETVISIBLE equ 8

LCD_SHIFT equ 16

LCD_SETFUNCTION equ 32

LCD_SETCGADDR equ 64

LCD_SETDDADDR equ 128

;Vị trí chương trình nhảy đến khi reset

org 0000h

jmp start ;nhảy đến chương trình chính

;Bắt đầu chương trình chính

org 0100h

string1a:db ' !!XIN CHAO!! '

db 0

string1b:db '!! XIN CHAO !! '

db 0

string2:db ' tat ca cac ban . '

db 0

string3:db ' Day la tieu luan '

db 0

string4:db ' cua Ngoc Phuc !'

db 0

string5:db 'Em ten la:'

db 0

string6:db '*Le Ngoc Phuc*'

db 0

string7:db '*Ma So Sinh Vien*'

db 0

string8: db ' 0782743 '

db 0

string9: db ' Lop 5CDCQDT09'

db 0

string10: db 'Truong Cong Nghiep'

db 0

string11: db 'TP Ho Chi Minh.'

db 0

string12: db 'Em chan thanh'

db 0

string13: db 'cam on thay:'

db 0

string14: db '*TranNguyenBaoTran*'

db 0

string15: db 'da giup do em'

db 0

string16: db 'thuc hien tieu'

db 0

string17: db 'luan nay!!'

db 0

string18: db 'Cam on cac ban da'

db 0

string19: db 'quan tam theo doi'

db 0

string20: db ' $THE_END$ '

db 0

string22: db 'De tai: Chay chu ',0

string23: db 'Tren man hinh LCD'

db 0

string24: db ' ung dung IC 8051'

db 0

string25: db 'mo phong bang'

db 0

string26: db 'phan mem Proteus '

db 0

start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit

call wrcmd ;gọi chương trình con gửi lệnh

loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:

call wrcmd ;gọi chương trình con gửi lệnh

mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp

loop2:

mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ

call wrstr ;gọi chương trình con xuất dòng chữ tới LCD

mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS

call wtms ;Gọi chương trình con đợi 200mS

mov A,#LCD_CLS ;Xóa màn hình LCD

mov DPTR,#string1b

call wrstr

mov DPTR,#200

call wtms

mov A,#LCD_CLS ; Xóa màn hình LCD

call wrcmd

djnz R7,loop2 ; lặp lại 2 lần

mov DPTR,#string1a

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A

call wrcmd

mov DPTR,#string2

call wrslow

mov DPTR,#200

call wtms

mov A,#LCD_CLS ;Clear screen

mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A

call wrcmd

mov A,#LCD_CLS ;Clear screen

call wrcmd

mov DPTR,#string3

call wrslow

mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A

call wrcmd

mov DPTR,#string4

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string5

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string6

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string7

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string8

call wrslow

mov A,#LCD_CLS

mov A,LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string9

lcall delay1

mov DPTR,#string10

lcall delay1

mov DPTR,#string11

lcall delay1

mov DPTR,#string22

lcall delay1

mov DPTR,#string23

lcall delaylc

mov DPTR,#string24

lcall delay1

mov DPTR,#string25

lcall delaylc

mov DPTR,#string26

acall delay1

mov DPTR,#string12

lcall delay1

mov DPTR,#string13

lcall delaylc

mov DPTR,#string14

lcall delay1

mov DPTR,#string15

lcall delaylc

mov DPTR,#string16

lcall delay1

mov DPTR,#string17

lcall delaylc

mov DPTR,#string18

lcall delay1

mov DPTR,#string19

lcall delaylc

mov R7,#20

loop1:

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clearscreen

call rcmd

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

djnz R7,loop1

mov DPTR,#string20

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64

call wrcmd

;*******************************************

mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.

call wrcmd

mov DPTR,#2000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

jmp loop

;Chương trình con viết chuỗi ký tự trong DPTR

wrstr: mov R0,#LCD_DATA_WR

wrstr1: clr A

movc A,@A+DPTR

jz wrstr2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

pop DPH

pop DPL

jmp wrstr1

wrstr2: ret

;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra

wrslow: mov R0,#LCD_DATA_WR

wrslw1: clr A

movc A,@A+DPTR

jz wrslw2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

mov DPTR,#100

call wtms

pop DPH

pop DPL

jmp wrslw1

wrslw2: ret

;chương trình con gởi một lệnh trong thanh chứa A ra LCD:

wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0

movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD

jmp wtbusy ;Kiểm tra LCD bận

;chương trình con ghi một ký tự lên LCD:

wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0

movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD

;Chương trình con đợi LCD hết bận

wtbusy: mov R1,#LCD_BUSY_RD

movx A,@r1

jb ACC.7,wtbusy

ret

;Chương trình con đợi tổng số giây có trong thanh chúa A

wtsec: push ACC

call wtms

pop ACC

dec A

jnz wtsec

ret

;Chương trình con đợi tổng số mS có trong con trỏ DPTR

wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng

xrl DPH,#0FFh ;and incrementing instead.

inc DPTR

wtms1: mov TL0,#low(-1200) ;100 xung = 1ms ở tần số thạch anh 1.2MHz

mov TH0,#high(-1200)

mov TMOD,#1 ;Timer 0 mode 1

setb TCON.4 ;Timer 0 runs

wtms2: jnb TCON.5,wtms2

clr TCON.4 ;Timer 0 stops

clr TCON.5

inc DPTR

mov A,DPL

orl A,DPH

jnz wtms1

ret

delaylc:

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

ret

delay1:

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

ret

END

Lời nói đầu

1. Giới thiệu IC 8051:

1.1Giới thiệu họ MSC-51:

MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM nội.

AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit, vecto ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON-CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống.

1.2 Sơ đồ khối của AT89C51 :

http://photo.zing.vn/photo/gallery/detail.5387929.html

1. 3 Sơ đồ chân của AT89C51

http://photo.zing.vn/photo/gallery/detail.5387932.html

1.4Chức năng các chân của AT89C51

-89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ.

a/.Các port:

Port 0:

Port 0 là port có hai chức năng ở các chân 32-39 của 89C51. trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.

b/.Port 1:

-port 1 là port IO trên các chân 1-8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.

c/.Port 2:

-port 2 là 1 port có tác dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.

d/.Port 3:

Port 3 là port có tác dụng kép trên các chân 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ó liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:

http://photo.zing.vn/photo/gallery/detail.5387937.html

* Các ngõ tín hiệu điều khiển:

Ngõ tín hiệu PSEN:

- 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 được nói đén chân OE của Eprom cho phép đọc các byte mở rộng .

- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.

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

- Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu 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ín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.

- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.

- Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là 12Mhz.

- Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 89C51.

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

- Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89c51.

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

- Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi cấp điện mạch tự động Reset.

Các ngõ vào bộ dao động X1, X2:nguồn 5V .

3. Mô tả về LCD

Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.

Mô tả các chân, loại 14 chân.

-VCC: cấp nguồn dương

-VSS: cấp nguồn âm

-VEE: điều khiển độ tương phản của LCD

-Chân chọn thanh ghi RS( Register Select)

Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.

-Chân đọc/ghi (R/W)

Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1

-Chân cho phép E (Enable)

Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấ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 phải rộng tối thiểu là 450 ns.

-Chân D0~D7:

Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.

Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1

Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD

Chân

Kí hiệu

I/O

Mô tả

1

VSS

-

Đất

2

VCC

-

Dương 5V

3

VEE

-

Cấp nguồn điều khiển phản

4

RS

I

RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.

5

R/W

I

R/W=1 đọc dữ liệu. R/W=0 ghi

6

E

I/O

Cho phép

7

DB0

I/O

Các bit dữ liệu

8

DB1

I/O

Các bit dữ liệu

9

DB2

I/O

Các bit dữ liệu

10

DB3

I/O

Các bit dữ liệu

11

DB4

I/O

Các bit dữ liệu

12

DB5

I/O

Các bit dữ liệu

13

DB6

I/O

Các bit dữ liệu

14

DB7

I/O

Các bit dữ liệu

Các mã lệnh LCD

Mã Hex

Lệnh đến thanh ghi của LCD

1

Xóa màn hình hiển thị

2

Trở về đầu dòng

4

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

5

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

6

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F

Tắt hiển thị, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

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

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Ép con trỏ Vũ đầu dòng thứ nhất

C0

Ép con trỏ Vũ đầu dòng thứ hai

38

Hai dòng ma trận

4. Sơ đồ giao tiếp hoàn chỉnh

Được thiết kế trên phần mềm proteus

file:///C:/DOCUME~1/Admin/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

5.Chương trình mô phỏng

$mod51

; Chương trình hiển thị LCD

; Tần số thạch anh 12MHz

;Khái báo thanh ghi địa chỉ LCD

LCD_CMD_WR equ 0

LCD_DATA_WR equ 1

LCD_BUSY_RD equ 2

LCD_DATA_RD equ 3

;LCD Commands

LCD_CLS equ 1

LCD_HOME equ 2

LCD_SETMODE equ 4

LCD_SETVISIBLE equ 8

LCD_SHIFT equ 16

LCD_SETFUNCTION equ 32

LCD_SETCGADDR equ 64

LCD_SETDDADDR equ 128

;Vị trí chương trình nhảy đến khi reset

org 0000h

jmp start ;nhảy đến chương trình chính

;Bắt đầu chương trình chính

org 0100h

string1a:db ' !!XIN CHAO!! '

db 0

string1b:db '!! XIN CHAO !! '

db 0

string2:db ' tat ca cac ban . '

db 0

string3:db ' Day la tieu luan '

db 0

string4:db ' cua Ngoc Phuc !'

db 0

string5:db 'Em ten la:'

db 0

string6:db '*Le Ngoc Phuc*'

db 0

string7:db '*Ma So Sinh Vien*'

db 0

string8: db ' 0782743 '

db 0

string9: db ' Lop 5CDCQDT09'

db 0

string10: db 'Truong Cong Nghiep'

db 0

string11: db 'TP Ho Chi Minh.'

db 0

string12: db 'Em chan thanh'

db 0

string13: db 'cam on thay:'

db 0

string14: db '*TranNguyenBaoTran*'

db 0

string15: db 'da giup do em'

db 0

string16: db 'thuc hien tieu'

db 0

string17: db 'luan nay!!'

db 0

string18: db 'Cam on cac ban da'

db 0

string19: db 'quan tam theo doi'

db 0

string20: db ' $THE_END$ '

db 0

string22: db 'De tai: Chay chu ',0

string23: db 'Tren man hinh LCD'

db 0

string24: db ' ung dung IC 8051'

db 0

string25: db 'mo phong bang'

db 0

string26: db 'phan mem Proteus '

db 0

start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit

call wrcmd ;gọi chương trình con gửi lệnh

loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:

call wrcmd ;gọi chương trình con gửi lệnh

mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp

loop2:

mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ

call wrstr ;gọi chương trình con xuất dòng chữ tới LCD

mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS

call wtms ;Gọi chương trình con đợi 200mS

mov A,#LCD_CLS ;Xóa màn hình LCD

mov DPTR,#string1b

call wrstr

mov DPTR,#200

call wtms

mov A,#LCD_CLS ; Xóa màn hình LCD

call wrcmd

djnz R7,loop2 ; lặp lại 2 lần

mov DPTR,#string1a

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A

call wrcmd

mov DPTR,#string2

call wrslow

mov DPTR,#200

call wtms

mov A,#LCD_CLS ;Clear screen

mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A

call wrcmd

mov A,#LCD_CLS ;Clear screen

call wrcmd

mov DPTR,#string3

call wrslow

mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A

call wrcmd

mov DPTR,#string4

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string5

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string6

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string7

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string8

call wrslow

mov A,#LCD_CLS

mov A,LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string9

lcall delay1

mov DPTR,#string10

lcall delay1

mov DPTR,#string11

lcall delay1

mov DPTR,#string22

lcall delay1

mov DPTR,#string23

lcall delaylc

mov DPTR,#string24

lcall delay1

mov DPTR,#string25

lcall delaylc

mov DPTR,#string26

acall delay1

mov DPTR,#string12

lcall delay1

mov DPTR,#string13

lcall delaylc

mov DPTR,#string14

lcall delay1

mov DPTR,#string15

lcall delaylc

mov DPTR,#string16

lcall delay1

mov DPTR,#string17

lcall delaylc

mov DPTR,#string18

lcall delay1

mov DPTR,#string19

lcall delaylc

mov R7,#20

loop1:

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clearscreen

call rcmd

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

djnz R7,loop1

mov DPTR,#string20

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64

call wrcmd

;*******************************************

mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.

call wrcmd

mov DPTR,#2000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

jmp loop

;Chương trình con viết chuỗi ký tự trong DPTR

wrstr: mov R0,#LCD_DATA_WR

wrstr1: clr A

movc A,@A+DPTR

jz wrstr2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

pop DPH

pop DPL

jmp wrstr1

wrstr2: ret

;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra

wrslow: mov R0,#LCD_DATA_WR

wrslw1: clr A

movc A,@A+DPTR

jz wrslw2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

mov DPTR,#100

call wtms

pop DPH

pop DPL

jmp wrslw1

wrslw2: ret

;chương trình con gởi một lệnh trong thanh chứa A ra LCD:

wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0

movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD

jmp wtbusy ;Kiểm tra LCD bận

;chương trình con ghi một ký tự lên LCD:

wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0

movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD

;Chương trình con đợi LCD hết bận

wtbusy: mov R1,#LCD_BUSY_RD

movx A,@r1

jb ACC.7,wtbusy

ret

;Chương trình con đợi tổng số giây có trong thanh chúa A

wtsec: push ACC

call wtms

pop ACC

dec A

jnz wtsec

ret

;Chương trình con đợi tổng số mS có trong con trỏ DPTR

wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng

xrl DPH,#0FFh ;and incrementing instead.

inc DPTR

wtms1: mov TL0,#low(-1200) ;100 xung = 1ms ở tần số thạch anh 1.2MHz

mov TH0,#high(-1200)

mov TMOD,#1 ;Timer 0 mode 1

setb TCON.4 ;Timer 0 runs

wtms2: jnb TCON.5,wtms2

clr TCON.4 ;Timer 0 stops

clr TCON.5

inc DPTR

mov A,DPL

orl A,DPH

jnz wtms1

ret

delaylc:

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

ret

delay1:

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

ret

END

Lời nói đầu

1. Giới thiệu IC 8051:

1.1Giới thiệu họ MSC-51:

MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM nội.

AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit, vecto ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON-CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống.

1.2 Sơ đồ khối của AT89C51 :

http://photo.zing.vn/photo/gallery/detail.5387929.html

1. 3 Sơ đồ chân của AT89C51

http://photo.zing.vn/photo/gallery/detail.5387932.html

1.4Chức năng các chân của AT89C51

-89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ.

a/.Các port:

Port 0:

Port 0 là port có hai chức năng ở các chân 32-39 của 89C51. trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.

b/.Port 1:

-port 1 là port IO trên các chân 1-8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.

c/.Port 2:

-port 2 là 1 port có tác dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.

d/.Port 3:

Port 3 là port có tác dụng kép trên các chân 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ó liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:

http://photo.zing.vn/photo/gallery/detail.5387937.html

* Các ngõ tín hiệu điều khiển:

Ngõ tín hiệu PSEN:

- 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 được nói đén chân OE của Eprom cho phép đọc các byte mở rộng .

- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.

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

- Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu 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ín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.

- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.

- Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là 12Mhz.

- Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 89C51.

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

- Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89c51.

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

- Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi cấp điện mạch tự động Reset.

Các ngõ vào bộ dao động X1, X2:nguồn 5V .

3. Mô tả về LCD

Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.

Mô tả các chân, loại 14 chân.

-VCC: cấp nguồn dương

-VSS: cấp nguồn âm

-VEE: điều khiển độ tương phản của LCD

-Chân chọn thanh ghi RS( Register Select)

Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.

-Chân đọc/ghi (R/W)

Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1

-Chân cho phép E (Enable)

Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấ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 phải rộng tối thiểu là 450 ns.

-Chân D0~D7:

Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.

Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1

Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD

Chân

Kí hiệu

I/O

Mô tả

1

VSS

-

Đất

2

VCC

-

Dương 5V

3

VEE

-

Cấp nguồn điều khiển phản

4

RS

I

RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.

5

R/W

I

R/W=1 đọc dữ liệu. R/W=0 ghi

6

E

I/O

Cho phép

7

DB0

I/O

Các bit dữ liệu

8

DB1

I/O

Các bit dữ liệu

9

DB2

I/O

Các bit dữ liệu

10

DB3

I/O

Các bit dữ liệu

11

DB4

I/O

Các bit dữ liệu

12

DB5

I/O

Các bit dữ liệu

13

DB6

I/O

Các bit dữ liệu

14

DB7

I/O

Các bit dữ liệu

Các mã lệnh LCD

Mã Hex

Lệnh đến thanh ghi của LCD

1

Xóa màn hình hiển thị

2

Trở về đầu dòng

4

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

5

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

6

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F

Tắt hiển thị, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

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

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Ép con trỏ Vũ đầu dòng thứ nhất

C0

Ép con trỏ Vũ đầu dòng thứ hai

38

Hai dòng ma trận

4. Sơ đồ giao tiếp hoàn chỉnh

Được thiết kế trên phần mềm proteus

file:///C:/DOCUME~1/Admin/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

5.Chương trình mô phỏng

$mod51

; Chương trình hiển thị LCD

; Tần số thạch anh 12MHz

;Khái báo thanh ghi địa chỉ LCD

LCD_CMD_WR equ 0

LCD_DATA_WR equ 1

LCD_BUSY_RD equ 2

LCD_DATA_RD equ 3

;LCD Commands

LCD_CLS equ 1

LCD_HOME equ 2

LCD_SETMODE equ 4

LCD_SETVISIBLE equ 8

LCD_SHIFT equ 16

LCD_SETFUNCTION equ 32

LCD_SETCGADDR equ 64

LCD_SETDDADDR equ 128

;Vị trí chương trình nhảy đến khi reset

org 0000h

jmp start ;nhảy đến chương trình chính

;Bắt đầu chương trình chính

org 0100h

string1a:db ' !!XIN CHAO!! '

db 0

string1b:db '!! XIN CHAO !! '

db 0

string2:db ' tat ca cac ban . '

db 0

string3:db ' Day la tieu luan '

db 0

string4:db ' cua Ngoc Phuc !'

db 0

string5:db 'Em ten la:'

db 0

string6:db '*Le Ngoc Phuc*'

db 0

string7:db '*Ma So Sinh Vien*'

db 0

string8: db ' 0782743 '

db 0

string9: db ' Lop 5CDCQDT09'

db 0

string10: db 'Truong Cong Nghiep'

db 0

string11: db 'TP Ho Chi Minh.'

db 0

string12: db 'Em chan thanh'

db 0

string13: db 'cam on thay:'

db 0

string14: db '*TranNguyenBaoTran*'

db 0

string15: db 'da giup do em'

db 0

string16: db 'thuc hien tieu'

db 0

string17: db 'luan nay!!'

db 0

string18: db 'Cam on cac ban da'

db 0

string19: db 'quan tam theo doi'

db 0

string20: db ' $THE_END$ '

db 0

string22: db 'De tai: Chay chu ',0

string23: db 'Tren man hinh LCD'

db 0

string24: db ' ung dung IC 8051'

db 0

string25: db 'mo phong bang'

db 0

string26: db 'phan mem Proteus '

db 0

start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit

call wrcmd ;gọi chương trình con gửi lệnh

loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:

call wrcmd ;gọi chương trình con gửi lệnh

mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp

loop2:

mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ

call wrstr ;gọi chương trình con xuất dòng chữ tới LCD

mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS

call wtms ;Gọi chương trình con đợi 200mS

mov A,#LCD_CLS ;Xóa màn hình LCD

mov DPTR,#string1b

call wrstr

mov DPTR,#200

call wtms

mov A,#LCD_CLS ; Xóa màn hình LCD

call wrcmd

djnz R7,loop2 ; lặp lại 2 lần

mov DPTR,#string1a

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A

call wrcmd

mov DPTR,#string2

call wrslow

mov DPTR,#200

call wtms

mov A,#LCD_CLS ;Clear screen

mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A

call wrcmd

mov A,#LCD_CLS ;Clear screen

call wrcmd

mov DPTR,#string3

call wrslow

mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A

call wrcmd

mov DPTR,#string4

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string5

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string6

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string7

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string8

call wrslow

mov A,#LCD_CLS

mov A,LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string9

lcall delay1

mov DPTR,#string10

lcall delay1

mov DPTR,#string11

lcall delay1

mov DPTR,#string22

lcall delay1

mov DPTR,#string23

lcall delaylc

mov DPTR,#string24

lcall delay1

mov DPTR,#string25

lcall delaylc

mov DPTR,#string26

acall delay1

mov DPTR,#string12

lcall delay1

mov DPTR,#string13

lcall delaylc

mov DPTR,#string14

lcall delay1

mov DPTR,#string15

lcall delaylc

mov DPTR,#string16

lcall delay1

mov DPTR,#string17

lcall delaylc

mov DPTR,#string18

lcall delay1

mov DPTR,#string19

lcall delaylc

mov R7,#20

loop1:

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clearscreen

call rcmd

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

djnz R7,loop1

mov DPTR,#string20

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64

call wrcmd

;*******************************************

mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.

call wrcmd

mov DPTR,#2000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

jmp loop

;Chương trình con viết chuỗi ký tự trong DPTR

wrstr: mov R0,#LCD_DATA_WR

wrstr1: clr A

movc A,@A+DPTR

jz wrstr2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

pop DPH

pop DPL

jmp wrstr1

wrstr2: ret

;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra

wrslow: mov R0,#LCD_DATA_WR

wrslw1: clr A

movc A,@A+DPTR

jz wrslw2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

mov DPTR,#100

call wtms

pop DPH

pop DPL

jmp wrslw1

wrslw2: ret

;chương trình con gởi một lệnh trong thanh chứa A ra LCD:

wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0

movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD

jmp wtbusy ;Kiểm tra LCD bận

;chương trình con ghi một ký tự lên LCD:

wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0

movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD

;Chương trình con đợi LCD hết bận

wtbusy: mov R1,#LCD_BUSY_RD

movx A,@r1

jb ACC.7,wtbusy

ret

;Chương trình con đợi tổng số giây có trong thanh chúa A

wtsec: push ACC

call wtms

pop ACC

dec A

jnz wtsec

ret

Mô tả về LCD:

Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.

Mô tả các chân, loại 14 chân.

-VCC: cấp nguồn dương

-VSS: cấp nguồn âm

-VEE: điều khiển độ tương phản của LCD

-Chân chọn thanh ghi RS( Register Select)

Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.

-Chân đọc/ghi (R/W)

Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1

-Chân cho phép E (Enable)

Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấ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 phải rộng tối thiểu là 450 ns.

-Chân D0~D7:

Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.

Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1

Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD

Chân

Kí hiệu

I/O

Mô tả

1

VSS

-

Đất

2

VCC

-

Dương 5V

3

VEE

-

Cấp nguồn điều khiển phản

4

RS

I

RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.

5

R/W

I

R/W=1 đọc dữ liệu. R/W=0 ghi

6

E

I/O

Cho phép

7

DB0

I/O

Các bit dữ liệu

8

DB1

I/O

Các bit dữ liệu

9

DB2

I/O

Các bit dữ liệu

10

DB3

I/O

Các bit dữ liệu

11

DB4

I/O

Các bit dữ liệu

12

DB5

I/O

Các bit dữ liệu

13

DB6

I/O

Các bit dữ liệu

14

DB7

I/O

Các bit dữ liệu

Các mã lệnh LCD

Mã Hex

Lệnh đến thanh ghi của LCD

1

Xóa màn hình hiển thị

2

Trở về đầu dòng

4

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

5

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

6

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F

Tắt hiển thị, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

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

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Ép con trỏ Vũ đầu dòng thứ nhất

C0

Ép con trỏ Vũ đầu dòng thứ hai

38

Hai dòng ma trận

4. Sơ đồ giao tiếp hoàn chỉnh

Được thiết kế trên phần mềm proteus

file:///C:/DOCUME~1/Admin/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

5.Chương trình mô phỏng

$mod51

; Chương trình hiển thị LCD

; Tần số thạch anh 12MHz

;Khái báo thanh ghi địa chỉ LCD

LCD_CMD_WR equ 0

LCD_DATA_WR equ 1

LCD_BUSY_RD equ 2

LCD_DATA_RD equ 3

;LCD Commands

LCD_CLS equ 1

LCD_HOME equ 2

LCD_SETMODE equ 4

LCD_SETVISIBLE equ 8

LCD_SHIFT equ 16

LCD_SETFUNCTION equ 32

LCD_SETCGADDR equ 64

LCD_SETDDADDR equ 128

;Vị trí chương trình nhảy đến khi reset

org 0000h

jmp start ;nhảy đến chương trình chính

;Bắt đầu chương trình chính

org 0100h

string1a:db ' !!XIN CHAO!! '

db 0

string1b:db '!! XIN CHAO !! '

db 0

string2:db ' tat ca cac ban . '

db 0

string3:db ' Day la tieu luan '

db 0

string4:db ' cua Ngoc Phuc !'

db 0

string5:db 'Em ten la:'

db 0

string6:db '*Le Ngoc Phuc*'

db 0

string7:db '*Ma So Sinh Vien*'

db 0

string8: db ' 0782743 '

db 0

string9: db ' Lop 5CDCQDT09'

db 0

string10: db 'Truong Cong Nghiep'

db 0

string11: db 'TP Ho Chi Minh.'

db 0

string12: db 'Em chan thanh'

db 0

string13: db 'cam on thay:'

db 0

string14: db '*TranNguyenBaoTran*'

db 0

string15: db 'da giup do em'

db 0

string16: db 'thuc hien tieu'

db 0

string17: db 'luan nay!!'

db 0

string18: db 'Cam on cac ban da'

db 0

string19: db 'quan tam theo doi'

db 0

string20: db ' $THE_END$ '

db 0

string22: db 'De tai: Chay chu ',0

string23: db 'Tren man hinh LCD'

db 0

string24: db ' ung dung IC 8051'

db 0

string25: db 'mo phong bang'

db 0

string26: db 'phan mem Proteus '

db 0

start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit

call wrcmd ;gọi chương trình con gửi lệnh

loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:

call wrcmd ;gọi chương trình con gửi lệnh

mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp

loop2:

mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ

call wrstr ;gọi chương trình con xuất dòng chữ tới LCD

mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS

call wtms ;Gọi chương trình con đợi 200mS

mov A,#LCD_CLS ;Xóa màn hình LCD

mov DPTR,#string1b

call wrstr

mov DPTR,#200

call wtms

mov A,#LCD_CLS ; Xóa màn hình LCD

call wrcmd

djnz R7,loop2 ; lặp lại 2 lần

mov DPTR,#string1a

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A

call wrcmd

mov DPTR,#string2

call wrslow

mov DPTR,#200

call wtms

mov A,#LCD_CLS ;Clear screen

mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A

call wrcmd

mov A,#LCD_CLS ;Clear screen

call wrcmd

mov DPTR,#string3

call wrslow

mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A

call wrcmd

mov DPTR,#string4

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string5

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string6

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string7

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string8

call wrslow

mov A,#LCD_CLS

mov A,LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string9

lcall delay1

mov DPTR,#string10

lcall delay1

mov DPTR,#string11

lcall delay1

mov DPTR,#string22

lcall delay1

mov DPTR,#string23

lcall delaylc

mov DPTR,#string24

lcall delay1

mov DPTR,#string25

lcall delaylc

mov DPTR,#string26

acall delay1

mov DPTR,#string12

lcall delay1

mov DPTR,#string13

lcall delaylc

mov DPTR,#string14

lcall delay1

mov DPTR,#string15

lcall delaylc

mov DPTR,#string16

lcall delay1

mov DPTR,#string17

lcall delaylc

mov DPTR,#string18

lcall delay1

mov DPTR,#string19

lcall delaylc

mov R7,#20

loop1:

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clearscreen

call rcmd

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

djnz R7,loop1

mov DPTR,#string20

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64

call wrcmd

;*******************************************

mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.

call wrcmd

mov DPTR,#2000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

jmp loop

;Chương trình con viết chuỗi ký tự trong DPTR

wrstr: mov R0,#LCD_DATA_WR

wrstr1: clr A

movc A,@A+DPTR

jz wrstr2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

pop DPH

pop DPL

jmp wrstr1

wrstr2: ret

;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra

wrslow: mov R0,#LCD_DATA_WR

wrslw1: clr A

movc A,@A+DPTR

jz wrslw2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

mov DPTR,#100

call wtms

pop DPH

pop DPL

jmp wrslw1

wrslw2: ret

;chương trình con gởi một lệnh trong thanh chứa A ra LCD:

wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0

movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD

jmp wtbusy ;Kiểm tra LCD bận

;chương trình con ghi một ký tự lên LCD:

wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0

movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD

;Chương trình con đợi LCD hết bận

wtbusy: mov R1,#LCD_BUSY_RD

movx A,@r1

jb ACC.7,wtbusy

ret

;Chương trình con đợi tổng số giây có trong thanh chúa A

wtsec: push ACC

call wtms

pop ACC

dec A

jnz wtsec

ret

;Chương trình con đợi tổng số mS có trong con trỏ DPTR

wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng

xrl DPH,#0FFh ;and incrementing instead.

inc DPTR

wtms1: mov TL0,#low(-1200) ;100 xung = 1ms ở tần số thạch anh 1.2MHz

mov TH0,#high(-1200)

mov TMOD,#1 ;Timer 0 mode 1

setb TCON.4 ;Timer 0 runs

wtms2: jnb TCON.5,wtms2

clr TCON.4 ;Timer 0 stops

clr TCON.5

inc DPTR

mov A,DPL

orl A,DPH

jnz wtms1

ret

delaylc:

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

ret

delay1:

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

ret

END

Lời nói đầu

1. Giới thiệu IC 8051:

1.1Giới thiệu họ MSC-51:

MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM nội.

AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit, vecto ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON-CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống.

1.2 Sơ đồ khối của AT89C51 :

http://photo.zing.vn/photo/gallery/detail.5387929.html

1. 3 Sơ đồ chân của AT89C51

http://photo.zing.vn/photo/gallery/detail.5387932.html

1.4Chức năng các chân của AT89C51

-89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ.

a/.Các port:

Port 0:

Port 0 là port có hai chức năng ở các chân 32-39 của 89C51. trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.

b/.Port 1:

-port 1 là port IO trên các chân 1-8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.

c/.Port 2:

-port 2 là 1 port có tác dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.

d/.Port 3:

Port 3 là port có tác dụng kép trên các chân 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ó liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:

http://photo.zing.vn/photo/gallery/detail.5387937.html

* Các ngõ tín hiệu điều khiển:

Ngõ tín hiệu PSEN:

- 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 được nói đén chân OE của Eprom cho phép đọc các byte mở rộng .

- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.

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

- Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu 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ín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.

- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.

- Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là 12Mhz.

- Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 89C51.

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

- Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89c51.

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

- Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi cấp điện mạch tự động Reset.

Các ngõ vào bộ dao động X1, X2:nguồn 5V .

3. Mô tả về LCD

Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.

Mô tả các chân, loại 14 chân.

-VCC: cấp nguồn dương

-VSS: cấp nguồn âm

-VEE: điều khiển độ tương phản của LCD

-Chân chọn thanh ghi RS( Register Select)

Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.

-Chân đọc/ghi (R/W)

Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1

-Chân cho phép E (Enable)

Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấ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 phải rộng tối thiểu là 450 ns.

-Chân D0~D7:

Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.

Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1

Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD

Chân

Kí hiệu

I/O

Mô tả

1

VSS

-

Đất

2

VCC

-

Dương 5V

3

VEE

-

Cấp nguồn điều khiển phản

4

RS

I

RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.

5

R/W

I

R/W=1 đọc dữ liệu. R/W=0 ghi

6

E

I/O

Cho phép

7

DB0

I/O

Các bit dữ liệu

8

DB1

I/O

Các bit dữ liệu

9

DB2

I/O

Các bit dữ liệu

10

DB3

I/O

Các bit dữ liệu

11

DB4

I/O

Các bit dữ liệu

12

DB5

I/O

Các bit dữ liệu

13

DB6

I/O

Các bit dữ liệu

14

DB7

I/O

Các bit dữ liệu

Các mã lệnh LCD

Mã Hex

Lệnh đến thanh ghi của LCD

1

Xóa màn hình hiển thị

2

Trở về đầu dòng

4

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

5

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

6

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F

Tắt hiển thị, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

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

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Ép con trỏ Vũ đầu dòng thứ nhất

C0

Ép con trỏ Vũ đầu dòng thứ hai

38

Hai dòng ma trận

4. Sơ đồ giao tiếp hoàn chỉnh

Được thiết kế trên phần mềm proteus

file:///C:/DOCUME~1/Admin/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

5.Chương trình mô phỏng

$mod51

; Chương trình hiển thị LCD

; Tần số thạch anh 12MHz

;Khái báo thanh ghi địa chỉ LCD

LCD_CMD_WR equ 0

LCD_DATA_WR equ 1

LCD_BUSY_RD equ 2

LCD_DATA_RD equ 3

;LCD Commands

LCD_CLS equ 1

LCD_HOME equ 2

LCD_SETMODE equ 4

LCD_SETVISIBLE equ 8

LCD_SHIFT equ 16

LCD_SETFUNCTION equ 32

LCD_SETCGADDR equ 64

LCD_SETDDADDR equ 128

;Vị trí chương trình nhảy đến khi reset

org 0000h

jmp start ;nhảy đến chương trình chính

;Bắt đầu chương trình chính

org 0100h

string1a:db ' !!XIN CHAO!! '

db 0

string1b:db '!! XIN CHAO !! '

db 0

string2:db ' tat ca cac ban . '

db 0

string3:db ' Day la tieu luan '

db 0

string4:db ' cua Ngoc Phuc !'

db 0

string5:db 'Em ten la:'

db 0

string6:db '*Le Ngoc Phuc*'

db 0

string7:db '*Ma So Sinh Vien*'

db 0

string8: db ' 0782743 '

db 0

string9: db ' Lop 5CDCQDT09'

db 0

string10: db 'Truong Cong Nghiep'

db 0

string11: db 'TP Ho Chi Minh.'

db 0

string12: db 'Em chan thanh'

db 0

string13: db 'cam on thay:'

db 0

string14: db '*TranNguyenBaoTran*'

db 0

string15: db 'da giup do em'

db 0

string16: db 'thuc hien tieu'

db 0

string17: db 'luan nay!!'

db 0

string18: db 'Cam on cac ban da'

db 0

string19: db 'quan tam theo doi'

db 0

string20: db ' $THE_END$ '

db 0

string22: db 'De tai: Chay chu ',0

string23: db 'Tren man hinh LCD'

db 0

string24: db ' ung dung IC 8051'

db 0

string25: db 'mo phong bang'

db 0

string26: db 'phan mem Proteus '

db 0

start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit

call wrcmd ;gọi chương trình con gửi lệnh

loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:

call wrcmd ;gọi chương trình con gửi lệnh

mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp

loop2:

mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ

call wrstr ;gọi chương trình con xuất dòng chữ tới LCD

mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS

call wtms ;Gọi chương trình con đợi 200mS

mov A,#LCD_CLS ;Xóa màn hình LCD

mov DPTR,#string1b

call wrstr

mov DPTR,#200

call wtms

mov A,#LCD_CLS ; Xóa màn hình LCD

call wrcmd

djnz R7,loop2 ; lặp lại 2 lần

mov DPTR,#string1a

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A

call wrcmd

mov DPTR,#string2

call wrslow

mov DPTR,#200

call wtms

mov A,#LCD_CLS ;Clear screen

mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A

call wrcmd

mov A,#LCD_CLS ;Clear screen

call wrcmd

mov DPTR,#string3

call wrslow

mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A

call wrcmd

mov DPTR,#string4

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string5

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string6

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string7

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string8

call wrslow

mov A,#LCD_CLS

mov A,LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string9

lcall delay1

mov DPTR,#string10

lcall delay1

mov DPTR,#string11

lcall delay1

mov DPTR,#string22

lcall delay1

mov DPTR,#string23

lcall delaylc

mov DPTR,#string24

lcall delay1

mov DPTR,#string25

lcall delaylc

mov DPTR,#string26

acall delay1

mov DPTR,#string12

lcall delay1

mov DPTR,#string13

lcall delaylc

mov DPTR,#string14

lcall delay1

mov DPTR,#string15

lcall delaylc

mov DPTR,#string16

lcall delay1

mov DPTR,#string17

lcall delaylc

mov DPTR,#string18

lcall delay1

mov DPTR,#string19

lcall delaylc

mov R7,#20

loop1:

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clearscreen

call rcmd

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

djnz R7,loop1

mov DPTR,#string20

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64

call wrcmd

;*******************************************

mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.

call wrcmd

mov DPTR,#2000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

jmp loop

;Chương trình con viết chuỗi ký tự trong DPTR

wrstr: mov R0,#LCD_DATA_WR

wrstr1: clr A

movc A,@A+DPTR

jz wrstr2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

pop DPH

pop DPL

jmp wrstr1

wrstr2: ret

;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra

wrslow: mov R0,#LCD_DATA_WR

wrslw1: clr A

movc A,@A+DPTR

jz wrslw2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

mov DPTR,#100

call wtms

pop DPH

pop DPL

jmp wrslw1

wrslw2: ret

;chương trình con gởi một lệnh trong thanh chứa A ra LCD:

wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0

movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD

jmp wtbusy ;Kiểm tra LCD bận

;chương trình con ghi một ký tự lên LCD:

wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0

movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD

;Chương trình con đợi LCD hết bận

wtbusy: mov R1,#LCD_BUSY_RD

movx A,@r1

jb ACC.7,wtbusy

ret

;Chương trình con đợi tổng số giây có trong thanh chúa A

wtsec: push ACC

call wtms

pop ACC

dec A

jnz wtsec

ret

;Chương trình con đợi tổng số mS có trong con trỏ DPTR

wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng

xrl DPH,#0FFh ;and incrementing instead.

inc DPTR

wtms1: mov TL0,#low(-1200) ;100 xung = 1ms ở tần số thạch anh 1.2MHz

mov TH0,#high(-1200)

mov TMOD,#1 ;Timer 0 mode 1

setb TCON.4 ;Timer 0 runs

wtms2: jnb TCON.5,wtms2

clr TCON.4 ;Timer 0 stops

clr TCON.5

inc DPTR

mov A,DPL

orl A,DPH

jnz wtms1

ret

delaylc:

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

ret

delay1:

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

ret

END

Lời nói đầu

1. Giới thiệu IC 8051:

1.1Giới thiệu họ MSC-51:

MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM nội.

AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit, vecto ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON-CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống.

1.2 Sơ đồ khối của AT89C51 :

http://photo.zing.vn/photo/gallery/detail.5387929.html

1. 3 Sơ đồ chân của AT89C51

http://photo.zing.vn/photo/gallery/detail.5387932.html

1.4Chức năng các chân của AT89C51

-89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ.

a/.Các port:

Port 0:

Port 0 là port có hai chức năng ở các chân 32-39 của 89C51. trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.

b/.Port 1:

-port 1 là port IO trên các chân 1-8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.

c/.Port 2:

-port 2 là 1 port có tác dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.

d/.Port 3:

Port 3 là port có tác dụng kép trên các chân 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ó liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:

http://photo.zing.vn/photo/gallery/detail.5387937.html

* Các ngõ tín hiệu điều khiển:

Ngõ tín hiệu PSEN:

- 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 được nói đén chân OE của Eprom cho phép đọc các byte mở rộng .

- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.

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

- Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu 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ín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.

- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.

- Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là 12Mhz.

- Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 89C51.

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

- Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89c51.

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

- Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi cấp điện mạch tự động Reset.

Các ngõ vào bộ dao động X1, X2:nguồn 5V .

3. Mô tả về LCD

Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.

Mô tả các chân, loại 14 chân.

-VCC: cấp nguồn dương

-VSS: cấp nguồn âm

-VEE: điều khiển độ tương phản của LCD

-Chân chọn thanh ghi RS( Register Select)

Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.

-Chân đọc/ghi (R/W)

Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1

-Chân cho phép E (Enable)

Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấ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 phải rộng tối thiểu là 450 ns.

-Chân D0~D7:

Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.

Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1

Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD

Chân

Kí hiệu

I/O

Mô tả

1

VSS

-

Đất

2

VCC

-

Dương 5V

3

VEE

-

Cấp nguồn điều khiển phản

4

RS

I

RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.

5

R/W

I

R/W=1 đọc dữ liệu. R/W=0 ghi

6

E

I/O

Cho phép

7

DB0

I/O

Các bit dữ liệu

8

DB1

I/O

Các bit dữ liệu

9

DB2

I/O

Các bit dữ liệu

10

DB3

I/O

Các bit dữ liệu

11

DB4

I/O

Các bit dữ liệu

12

DB5

I/O

Các bit dữ liệu

13

DB6

I/O

Các bit dữ liệu

14

DB7

I/O

Các bit dữ liệu

Các mã lệnh LCD

Mã Hex

Lệnh đến thanh ghi của LCD

1

Xóa màn hình hiển thị

2

Trở về đầu dòng

4

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

5

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

6

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F

Tắt hiển thị, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

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

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Ép con trỏ Vũ đầu dòng thứ nhất

C0

Ép con trỏ Vũ đầu dòng thứ hai

38

Hai dòng ma trận

4. Sơ đồ giao tiếp hoàn chỉnh

Được thiết kế trên phần mềm proteus

file:///C:/DOCUME~1/Admin/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

5.Chương trình mô phỏng

$mod51

; Chương trình hiển thị LCD

; Tần số thạch anh 12MHz

;Khái báo thanh ghi địa chỉ LCD

LCD_CMD_WR equ 0

LCD_DATA_WR equ 1

LCD_BUSY_RD equ 2

LCD_DATA_RD equ 3

;LCD Commands

LCD_CLS equ 1

LCD_HOME equ 2

LCD_SETMODE equ 4

LCD_SETVISIBLE equ 8

LCD_SHIFT equ 16

LCD_SETFUNCTION equ 32

LCD_SETCGADDR equ 64

LCD_SETDDADDR equ 128

;Vị trí chương trình nhảy đến khi reset

org 0000h

jmp start ;nhảy đến chương trình chính

;Bắt đầu chương trình chính

org 0100h

string1a:db ' !!XIN CHAO!! '

db 0

string1b:db '!! XIN CHAO !! '

db 0

string2:db ' tat ca cac ban . '

db 0

string3:db ' Day la tieu luan '

db 0

string4:db ' cua Ngoc Phuc !'

db 0

string5:db 'Em ten la:'

db 0

string6:db '*Le Ngoc Phuc*'

db 0

string7:db '*Ma So Sinh Vien*'

db 0

string8: db ' 0782743 '

db 0

string9: db ' Lop 5CDCQDT09'

db 0

string10: db 'Truong Cong Nghiep'

db 0

string11: db 'TP Ho Chi Minh.'

db 0

string12: db 'Em chan thanh'

db 0

string13: db 'cam on thay:'

db 0

string14: db '*TranNguyenBaoTran*'

db 0

string15: db 'da giup do em'

db 0

string16: db 'thuc hien tieu'

db 0

string17: db 'luan nay!!'

db 0

string18: db 'Cam on cac ban da'

db 0

string19: db 'quan tam theo doi'

db 0

string20: db ' $THE_END$ '

db 0

string22: db 'De tai: Chay chu ',0

string23: db 'Tren man hinh LCD'

db 0

string24: db ' ung dung IC 8051'

db 0

string25: db 'mo phong bang'

db 0

string26: db 'phan mem Proteus '

db 0

start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit

call wrcmd ;gọi chương trình con gửi lệnh

loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:

call wrcmd ;gọi chương trình con gửi lệnh

mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp

loop2:

mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ

call wrstr ;gọi chương trình con xuất dòng chữ tới LCD

mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS

call wtms ;Gọi chương trình con đợi 200mS

mov A,#LCD_CLS ;Xóa màn hình LCD

mov DPTR,#string1b

call wrstr

mov DPTR,#200

call wtms

mov A,#LCD_CLS ; Xóa màn hình LCD

call wrcmd

djnz R7,loop2 ; lặp lại 2 lần

mov DPTR,#string1a

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A

call wrcmd

mov DPTR,#string2

call wrslow

mov DPTR,#200

call wtms

mov A,#LCD_CLS ;Clear screen

mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A

call wrcmd

mov A,#LCD_CLS ;Clear screen

call wrcmd

mov DPTR,#string3

call wrslow

mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A

call wrcmd

mov DPTR,#string4

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string5

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string6

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string7

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string8

call wrslow

mov A,#LCD_CLS

mov A,LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string9

lcall delay1

mov DPTR,#string10

lcall delay1

mov DPTR,#string11

lcall delay1

mov DPTR,#string22

lcall delay1

mov DPTR,#string23

lcall delaylc

mov DPTR,#string24

lcall delay1

mov DPTR,#string25

lcall delaylc

mov DPTR,#string26

acall delay1

mov DPTR,#string12

lcall delay1

mov DPTR,#string13

lcall delaylc

mov DPTR,#string14

lcall delay1

mov DPTR,#string15

lcall delaylc

mov DPTR,#string16

lcall delay1

mov DPTR,#string17

lcall delaylc

mov DPTR,#string18

lcall delay1

mov DPTR,#string19

lcall delaylc

mov R7,#20

loop1:

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clearscreen

call rcmd

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

djnz R7,loop1

mov DPTR,#string20

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64

call wrcmd

;*******************************************

mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.

call wrcmd

mov DPTR,#2000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

jmp loop

;Chương trình con viết chuỗi ký tự trong DPTR

wrstr: mov R0,#LCD_DATA_WR

wrstr1: clr A

movc A,@A+DPTR

jz wrstr2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

pop DPH

pop DPL

jmp wrstr1

wrstr2: ret

;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra

wrslow: mov R0,#LCD_DATA_WR

wrslw1: clr A

movc A,@A+DPTR

jz wrslw2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

mov DPTR,#100

call wtms

pop DPH

pop DPL

jmp wrslw1

wrslw2: ret

;chương trình con gởi một lệnh trong thanh chứa A ra LCD:

wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0

movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD

jmp wtbusy ;Kiểm tra LCD bận

;chương trình con ghi một ký tự lên LCD:

wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0

movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD

;Chương trình con đợi LCD hết bận

wtbusy: mov R1,#LCD_BUSY_RD

movx A,@r1

jb ACC.7,wtbusy

ret

;Chương trình con đợi tổng số giây có trong thanh chúa A

wtsec: push ACC

call wtms

pop ACC

dec A

jnz wtsec

ret

;Chương trình con đợi tổng số mS có trong con trỏ DPTR

wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng

xrl DPH,#0FFh ;and incrementing instead.

inc DPTR

wtms1: mov TL0,#low(-1200) ;100 xung = 1ms ở tần số thạch anh 1.2MHz

mov TH0,#high(-1200)

mov TMOD,#1 ;Timer 0 mode 1

setb TCON.4 ;Timer 0 runs

wtms2: jnb TCON.5,wtms2

clr TCON.4 ;Timer 0 stops

clr TCON.5

inc DPTR

mov A,DPL

orl A,DPH

jnz wtms1

ret

delaylc:

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

ret

delay1:

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

ret

END

Lời nói đầu

1. Giới thiệu IC 8051:

1.1Giới thiệu họ MSC-51:

MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM nội.

AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit, vecto ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON-CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống.

1.2 Sơ đồ khối của AT89C51 :

http://photo.zing.vn/photo/gallery/detail.5387929.html

1. 3 Sơ đồ chân của AT89C51

http://photo.zing.vn/photo/gallery/detail.5387932.html

1.4Chức năng các chân của AT89C51

-89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ.

a/.Các port:

Port 0:

Port 0 là port có hai chức năng ở các chân 32-39 của 89C51. trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.

b/.Port 1:

-port 1 là port IO trên các chân 1-8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.

c/.Port 2:

-port 2 là 1 port có tác dụng kép trên các chân 21-28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.

d/.Port 3:

Port 3 là port có tác dụng kép trên các chân 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ó liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:

http://photo.zing.vn/photo/gallery/detail.5387937.html

* Các ngõ tín hiệu điều khiển:

Ngõ tín hiệu PSEN:

- 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 được nói đén chân OE của Eprom cho phép đọc các byte mở rộng .

- PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.

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

- Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu 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ín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt.

- Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.

- Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là 12Mhz.

- Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 89C51.

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

- Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89c51.

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

- Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi cấp điện mạch tự động Reset.

Các ngõ vào bộ dao động X1, X2:nguồn 5V .

3. Mô tả về LCD

Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led.

Mô tả các chân, loại 14 chân.

-VCC: cấp nguồn dương

-VSS: cấp nguồn âm

-VEE: điều khiển độ tương phản của LCD

-Chân chọn thanh ghi RS( Register Select)

Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD.

-Chân đọc/ghi (R/W)

Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/W=1

-Chân cho phép E (Enable)

Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấ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 phải rộng tối thiểu là 450 ns.

-Chân D0~D7:

Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh ghi trong LCD.

Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1

Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD

Chân

Kí hiệu

I/O

Mô tả

1

VSS

-

Đất

2

VCC

-

Dương 5V

3

VEE

-

Cấp nguồn điều khiển phản

4

RS

I

RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu.

5

R/W

I

R/W=1 đọc dữ liệu. R/W=0 ghi

6

E

I/O

Cho phép

7

DB0

I/O

Các bit dữ liệu

8

DB1

I/O

Các bit dữ liệu

9

DB2

I/O

Các bit dữ liệu

10

DB3

I/O

Các bit dữ liệu

11

DB4

I/O

Các bit dữ liệu

12

DB5

I/O

Các bit dữ liệu

13

DB6

I/O

Các bit dữ liệu

14

DB7

I/O

Các bit dữ liệu

Các mã lệnh LCD

Mã Hex

Lệnh đến thanh ghi của LCD

1

Xóa màn hình hiển thị

2

Trở về đầu dòng

4

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

5

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

6

Dịch hiển thị sang phải

7

Dịch hiển thị sang trái

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F

Tắt hiển thị, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

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

18

Dịch toàn bộ hiển thị sang trái

1C

Dịch toàn bộ hiển thị sang phải

80

Ép con trỏ Vũ đầu dòng thứ nhất

C0

Ép con trỏ Vũ đầu dòng thứ hai

38

Hai dòng ma trận

4. Sơ đồ giao tiếp hoàn chỉnh

Được thiết kế trên phần mềm proteus

file:///C:/DOCUME~1/Admin/LOCALS~1/Temp/msohtml1/01/clip_image001.gif

5.Chương trình mô phỏng

$mod51

; Chương trình hiển thị LCD

; Tần số thạch anh 12MHz

;Khái báo thanh ghi địa chỉ LCD

LCD_CMD_WR equ 0

LCD_DATA_WR equ 1

LCD_BUSY_RD equ 2

LCD_DATA_RD equ 3

;LCD Commands

LCD_CLS equ 1

LCD_HOME equ 2

LCD_SETMODE equ 4

LCD_SETVISIBLE equ 8

LCD_SHIFT equ 16

LCD_SETFUNCTION equ 32

LCD_SETCGADDR equ 64

LCD_SETDDADDR equ 128

;Vị trí chương trình nhảy đến khi reset

org 0000h

jmp start ;nhảy đến chương trình chính

;Bắt đầu chương trình chính

org 0100h

string1a:db ' !!XIN CHAO!! '

db 0

string1b:db '!! XIN CHAO !! '

db 0

string2:db ' tat ca cac ban . '

db 0

string3:db ' Day la tieu luan '

db 0

string4:db ' cua Ngoc Phuc !'

db 0

string5:db 'Em ten la:'

db 0

string6:db '*Le Ngoc Phuc*'

db 0

string7:db '*Ma So Sinh Vien*'

db 0

string8: db ' 0782743 '

db 0

string9: db ' Lop 5CDCQDT09'

db 0

string10: db 'Truong Cong Nghiep'

db 0

string11: db 'TP Ho Chi Minh.'

db 0

string12: db 'Em chan thanh'

db 0

string13: db 'cam on thay:'

db 0

string14: db '*TranNguyenBaoTran*'

db 0

string15: db 'da giup do em'

db 0

string16: db 'thuc hien tieu'

db 0

string17: db 'luan nay!!'

db 0

string18: db 'Cam on cac ban da'

db 0

string19: db 'quan tam theo doi'

db 0

string20: db ' $THE_END$ '

db 0

string22: db 'De tai: Chay chu ',0

string23: db 'Tren man hinh LCD'

db 0

string24: db ' ung dung IC 8051'

db 0

string25: db 'mo phong bang'

db 0

string26: db 'phan mem Proteus '

db 0

start: mov A,#038h ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit

call wrcmd ;gọi chương trình con gửi lệnh

loop: mov A,#LCD_SETVISIBLE+6 ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:

call wrcmd ;gọi chương trình con gửi lệnh

mov R7,#2 ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp

loop2:

mov DPTR,#string1a ;Đưa dòng chữ 1a vào con trỏ đại chỉ

call wrstr ;gọi chương trình con xuất dòng chữ tới LCD

mov DPTR,#200 &nb sp; ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS

call wtms ;Gọi chương trình con đợi 200mS

mov A,#LCD_CLS ;Xóa màn hình LCD

mov DPTR,#string1b

call wrstr

mov DPTR,#200

call wtms

mov A,#LCD_CLS ; Xóa màn hình LCD

call wrcmd

djnz R7,loop2 ; lặp lại 2 lần

mov DPTR,#string1a

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64 ; ; Đưa giá trị lệnh 40H vào A

call wrcmd

mov DPTR,#string2

call wrslow

mov DPTR,#200

call wtms

mov A,#LCD_CLS ;Clear screen

mov A,#LCD_SETDDADDR+64 ; ;Đưa giá trị lệnh 40H vào A

call wrcmd

mov A,#LCD_CLS ;Clear screen

call wrcmd

mov DPTR,#string3

call wrslow

mov A,#LCD_SETDDADDR+64 ;Đưa giá trị lệnh 0FH vào A

call wrcmd

mov DPTR,#string4

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string5

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string6

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string7

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

mov DPTR,#string8

call wrslow

mov A,#LCD_CLS

mov A,LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

mov DPTR,#string9

lcall delay1

mov DPTR,#string10

lcall delay1

mov DPTR,#string11

lcall delay1

mov DPTR,#string22

lcall delay1

mov DPTR,#string23

lcall delaylc

mov DPTR,#string24

lcall delay1

mov DPTR,#string25

lcall delaylc

mov DPTR,#string26

acall delay1

mov DPTR,#string12

lcall delay1

mov DPTR,#string13

lcall delaylc

mov DPTR,#string14

lcall delay1

mov DPTR,#string15

lcall delaylc

mov DPTR,#string16

lcall delay1

mov DPTR,#string17

lcall delaylc

mov DPTR,#string18

lcall delay1

mov DPTR,#string19

lcall delaylc

mov R7,#20

loop1:

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clearscreen

call rcmd

mov DPTR,#string20

call wrstr

mov DPTR,#1000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

djnz R7,loop1

mov DPTR,#string20

call wrstr

mov DPTR,#400

call wtms

mov A,#LCD_SETDDADDR+64

call wrcmd

;*******************************************

mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.

call wrcmd

mov DPTR,#2000

call wtms

mov A,#LCD_CLS ;Clear screen

call wrcmd

jmp loop

;Chương trình con viết chuỗi ký tự trong DPTR

wrstr: mov R0,#LCD_DATA_WR

wrstr1: clr A

movc A,@A+DPTR

jz wrstr2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

pop DPH

pop DPL

jmp wrstr1

wrstr2: ret

;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra

wrslow: mov R0,#LCD_DATA_WR

wrslw1: clr A

movc A,@A+DPTR

jz wrslw2

movx @R0,A

call wtbusy

inc DPTR

push DPL

push DPH

mov DPTR,#100

call wtms

pop DPH

pop DPL

jmp wrslw1

wrslw2: ret

;chương trình con gởi một lệnh trong thanh chứa A ra LCD:

wrcmd: mov R0,#LCD_CMD_WR &nbs p; ;đưa địa chỉ WR lệnh vào R0

movx @R0,A ;xuất lệnh nằm trong thanh chứa A ra LCD

jmp wtbusy ;Kiểm tra LCD bận

;chương trình con ghi một ký tự lên LCD:

wrchar: mov R0,#LCD_DATA_WR ; đưa địa chỉ WR dữ liệu vào R0

movx @R0,A ;xuất ký tự nằm trong thanh chứa A ra LCD

;Chương trình con đợi LCD hết bận

wtbusy: mov R1,#LCD_BUSY_RD

movx A,@r1

jb ACC.7,wtbusy

ret

;Chương trình con đợi tổng số giây có trong thanh chúa A

wtsec: push ACC

call wtms

pop ACC

dec A

jnz wtsec

ret

;Chương trình con đợi tổng số mS có trong con trỏ DPTR

wtms: xrl DPL,#0FFh ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng

xrl DPH,#0FFh ;and incrementing instead.

inc DPTR

wtms1: mov TL0,#low(-1200) ;100 xung = 1ms ở tần số thạch anh 1.2MHz

mov TH0,#high(-1200)

mov TMOD,#1 ;Timer 0 mode 1

setb TCON.4 ;Timer 0 runs

wtms2: jnb TCON.5,wtms2

clr TCON.4 ;Timer 0 stops

clr TCON.5

inc DPTR

mov A,DPL

orl A,DPH

jnz wtms1

ret

delaylc:

call wrslow

mov A,#LCD_SETDDADDR+64

call wrcmd

ret

delay1:

call wrslow

mov A,#LCD_CLS

mov A,#LCD_SETDDADDR+64

call wrcmd

mov A,#LCD_CLS

call wrcmd

ret

END

l

Phần bên dưới chỉ hiển thị một số trang ngẫu nhiên trong tài liệu. Bạn tải về để xem được bản đầy đủ

  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Đang tải dữ liệu ...
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự
  • Thiết kế mạch LCD hiển thị chuỗi ký tự

GỢI Ý

Những tài liệu gần giống với tài liệu bạn đang xem

Thiết kế mạch hiển thị cân điện tử từ 0 đến ...

Upload: vu_phan_hien80

📎 Số trang: 34
👁 Lượt xem: 627
Lượt tải: 16

Thiết kế mạch hiển thị cân điện tử từ 0 đến ...

Upload: glkv62009

📎 Số trang: 33
👁 Lượt xem: 410
Lượt tải: 16

Thiết kế đồng hồ sử dụng PIC16F887 hiển thị ...

Upload: devil2623

📎
👁 Lượt xem: 884
Lượt tải: 29

Thiết kế mạch đo nhiệt độ đo khoảng cách ...

Upload: lamlh

📎 Số trang: 30
👁 Lượt xem: 718
Lượt tải: 16

Mạch chạy chữ hiển thị lên màn hình lcd

Upload: ngocanhtruong56

📎 Số trang: 43
👁 Lượt xem: 646
Lượt tải: 20

Thiết kế kỹ thuật căn bản về pic16f877a đo ...

Upload: linhvd

📎 Số trang: 16
👁 Lượt xem: 1217
Lượt tải: 41

Thiết kế bộ đo và khống chế nhiệt độ hiển ...

Upload: tunglsinfortech

📎 Số trang: 16
👁 Lượt xem: 816
Lượt tải: 26

Thiết kế mạch hiển thị dùng ma trận LED

Upload: namttt1978

📎 Số trang: 17
👁 Lượt xem: 433
Lượt tải: 29

Thiết kế mạch hiển thị dùng ma trận LED

Upload: sgon66

📎 Số trang: 14
👁 Lượt xem: 506
Lượt tải: 21

Đồ án thiết kế mạch đếm sản phẩm dùng LCD

Upload: duytungbui

📎
👁 Lượt xem: 720
Lượt tải: 23

Thiết kế Đồng hồ vạn niên ứng dụng vi sử lý ...

Upload: kimhoan_dang

📎 Số trang: 51
👁 Lượt xem: 577
Lượt tải: 18

Vẽ mạch và thiết kế mạch in hiển thị LED 7 ...

Upload: huyenduoc78

📎 Số trang: 3
👁 Lượt xem: 1216
Lượt tải: 23

QUAN TÂM

Những tài liệu bạn đã xem

Thiết kế mạch LCD hiển thị chuỗi ký tự

Upload: hung20091978

📎 Số trang: 11
👁 Lượt xem: 450
Lượt tải: 19

CHUYÊN MỤC

Kỹ thuật - Công nghệ Kỹ thuật điện - điện tử
Thiết kế mạch LCD hiển thị chuỗi ký tự Lời nói đầu 1. Giới thiệu IC 8051: 1.1Giới thiệu họ MSC-51: MCS-51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031. Các sản phẩm MSC-51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các doc Đăng bởi
5 stars - 250586 reviews
Thông tin tài liệu 11 trang Đăng bởi: hung20091978 - 01/07/2025 Ngôn ngữ: Việt nam, English
5 stars - "Tài liệu tốt" by , Written on 01/07/2025 Tôi thấy tài liệu này rất chất lượng, đã giúp ích cho tôi rất nhiều. Chia sẻ thông tin với tôi nếu bạn quan tâm đến tài liệu: Thiết kế mạch LCD hiển thị chuỗi ký tự