MỤC LỤC
MỤC LỤC 4
A. PHẦN MỞ ĐẦU 6
1. Đặt vấn đề 6
2. lý do chọn đề tài 6
3. giới hạn của đề tài 6
3.1. Phân tích 6
3.2. Xây dựng phương án 7
3.3. Phạm vi của đồ án và phương hướng mở rộng 7
B. PHẦN NỘI DUNG 8
CHƯƠNG I : SƠ ĐỒ KHỐI 8
1. Sơ đồ tổng quát 8
2. Chức năng các khối 8
2.1 Khối nguồn 8
2.2. Chức năng của khối RTC 8
2.3. Chức năng của khối điều chỉnh 9
2.4. Khối âm thanh 9
2.5. Khối hiển thị 9
2.6. khối xử lý (vi điều khiển 89c51) 9
CHƯƠNG II: THIẾT KẾ HỆ THỐNG 10
1. Sơ đồ callgraph 10
2. Sơ đồ đặc tả 11
3. các linh kiện sử dụng trong mạch 11
3.1 giới thiệu cấu trúc của vi điều khiển MCS-51 11
3.1.1. Mô tả các chân 14
3.1.2 Các chế độ đặc biệt 17
3.1.3 Các bít khoá bộ nhớ chương trình 19
3.1.4 .Tóm tắt tập lệnh của AT89c51 20
3.2. Tìm hiểu IC thời gian thực DS1307 21
3.2.1 Giới thiệu chung về DS1307 21
3.2.2 Cơ chế hoạt động và chức năng của DS1307 21
3.2.3 Sơ đồ địa chỉ RAM và RTC 24
3.3 Giới thiệu LCD 29
3.3.1 Chức năng các chân của Module LCD 16x2 30
3.3.2 mã lệnh của LCD HD4480 33
3.3.3 các bit viết tắt trong mã lệnh 37
3.3.4 Mã Hex LCD 38
CHƯƠNG III : THIẾT KẾ MẠCH 39
1. Thuật toán 39
2. Khối nguồn 40
3. Khối hiển thị LCD 40
4. Khối xử lý AT89C51 42
5. Khối thời gian thực 42
6. khối thao tác 43
7. Khối chấp hành 44
8. Sơ đồ nguyên lý 45
Chương IV :Thi công mạch 3
1. Sơ đồ mạch in 3
2. Sơ đồ bố trí linh kiện 3
Chương V : Thiết kế phần mềm 3
1. Các phần mềm dùng trông đồ án 3
2. Chương trình cho vi điều khiển 3
C. KẾT LUẬN 3
1. Kết luận 3
2. Tài liệu tham khảo 3
50 trang |
Chia sẻ: lethao | Lượt xem: 4088 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế mạch chuông tự động cho trường học, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
iệc lập trình Flash và kiểm tra chương trình.
- RST (9)
Ngõ vào reset. Mức cao trên chân này trong 2 chu kỳ máy trong khi bộ dao
động đang hoat động sẽ reset AT89C51.
RST
Hình 7: Mạch reset tác động bằng tay và tự động reset khi khởi động máy
- ALE/ (30)
ALE là một xung ngõ ra để chốt byte thấp của địa chỉ trong khi truy xuất bộ nhớ ngoài. Chân này cũng làm ngõ vào xung lập trình () trong thời gian lập trình cho Flash.
Khi hoạt động bình thường, xung ngõ ra ALE luôn có tần số không đổi là 1/6 tần số của mạch dao động, có thể được dùng cho các mụch đích định thời từ bên ngoài vµ tạo xung clock. Tuy nhiên, lưu ý là một xung ALE sẽ bị bỏ qua trong mỗi một chu kỳ truy xuất bộ nhớ dữ liệu ngoài.
Khi cần, hoạt động ALE có thể được vô hiệu hoá bằng cách set bit 0 của thanh ghi chức năng đặc biệt có địa chỉ 8Eh. Khi bit này được set, ALE chỉ tích cực trong thời gan thực hiện lệnh MOVX hoặc MOVC. Ngược lại, chân này sẽ được kéo lên cao. Việc set bit không cho phép hoạt động chốt byte thấp của địa chỉ sẽ không có tác dụng nếu bộ vi điều khiển đang ở chế độ thực thi chương trình ngoài.
- (29)
(Program Store Enable) là xung điều khiển truy xuất bộ nhớ chương trình ngoài. Khi AT89C52 đang thực thi chương trình từ bộ nhớ chương trình ngoài, được kích hoạt hai lần mỗi chu kỳ máy, nhưng hai hoạt động sẽ bị bỏ qua mỗi khi truy cập bộ nhớ dữ liệu ngoài.
- /Vpp (31)
(External Access Enable) là chân cho phép truy xuất bộ nhớ chương trình ngoài (bắt đầu từ địa chỉ từ 0000H đến FFFFH).
= 0 cho phép truy xuất bộ nhớ chương trình ngoài, ngỵc l¹i =1 sẽ thực thi chương trình bên trong chip
Tuy nhiên, lưu ý rằng nếu bit khoá 1 (lock-bit 1) được lập trình, sẽ được chốt bên trong khi reset.
Chân này cũng nhận điện áp cho phép lập trình Vpp=12V khi lập trình Flash (khi đó ®iƯn áp lập trình 12V được chọn).
- XTAL1 và XTAL2
XTAL1 và XTAL2 là hai ngõ vào và ra của một bộ khuếch đại đảo của mạch dao động, được cấu hình để dùng như một bộ dao động trên chip.
Hình 8: Xung clock
Không có yêu cầu nào về chu kỳ nhiệm vụ của tín hiệu xung clock bên ngoài do tín hiệu này phải qua một flip-flop chia hai trước khi đến mạch tạo xung clock bên trong, tuy nhiên các chi tiết kỹ thuật về thời gian mức thấp và mức cao, điện áp cực tiểu và cực đại cần phải được xem xét.
3.1.2 Các chế độ đặc biệt
3.1.2.1Chế độ nghỉ
Trong chế độ nghỉ, CPU tự đi vào trạng thái ngủ trong khi tất cả các ngoại vi bên trong chip vẫn tích cực. Chế độ này được điều khiển bởi phần mềm. Nội dung của RAM trên chip và của tất cả các thanh ghi chức năng đặc biệt vẫn không đổi trong khi thời gian tồn tại chế độ này. Chế độ nghỉ có thể được kết thúc bởi một ngắt bất kỳ nào được phép hoặc bằng cách reset cứng.
Ta cần lưu ý rằng khi chế độ nghỉ được kết thúc bởi một reset cứng, chip vi điều khiển sẽ tiếp tục bình thường việc thực thi chương trình từ nơi chương trình bị tạm dừng, trong vòng 2 chu kỳ máy trước khi giải thuật reset mềm nẵm quyền điều khiển.
Ở chế độ nghỉ, phần cứng trên chip cẫm truy xuất RAM nội nhưng cho phép truy xuất các chân của các port. Để tránh khả năng có một thao tác ghi không mong muốn đến một chân port khi chế độ nghỉ kết thúc bằng reset, lệnh tiếp theo yêu cầu chế độ nghỉ không nên là lệnh ghi đến chân port hoặc đến bộ nhớ ngoài.
3.1.2.2 Chế độ nguồn giảm
- Trong chế độ này, mạch dao động ngừng hoạt động và lệnh yêu cầu chế độ nguồn giảm là lệnh sau cùng được thực thi. RAM trên chip và các thanh ghi chức năng đặc biệt vẫn duy trì các giá trị của chúng cho đến khi chế độ nguồn giảm kết thúc. Chỉ có một cách ra khỏi chế độ nguồn giảm, đó là reset cứng.
Việc reset sẽ xác định lại các thanh ghi chức năng đặc biệt nhưng không làm thay đổi RAM trên chip. Việc reset không nên xảy ra (chân reset ở mức tích cực) trước khi Vcc được khôi phục lại mức điện áp bình thường và phải kéo dài trạng thái tích cực của chân reset đủ lâu để cho phép mạch dao động hoạt động trở lại và đạt trạng thái ổn định.
-Trạng thái của các chân trong thời gian tồn tại chế độ nghỉ va chế độ nguồn giảm được cho trong bảng sau:
Chế độ
Bộ nhớ
Chương trình
ALE
PSEN
PORT O
PORT 1
PORT 2
PORT 3
Nghỉ
Bên trong
1
1
Dữ liệu
Dữ liệu
Dữ liệu
Dữ liệu
Nghỉ
Bên ngoài
1
1
Thả nổi
Dữ liệu
Dữ liệu
Dữ liệu
Nguồn
giảm
Bên trong
0
0
Dữ liệu
Dữ liệu
Dữ liệu
Dữ liệu
Bên ngoài
0
0
Thả nổi
Dữ liệu
Dữ liệu
Dữ liệu
3.1.3 Các bít khoá bộ nhớ chương trình
- Trên chip có ba bit khoá, các bít này có thể không cho phép lập trình hoặc
cho phép lập trình, các bit này cho ta thêm một số đặc trưng nữa của AT89C51
như sau.Khi bit khoá 1 LB1 được lập trình, mức logic ở chân được lấy
mẫu và được chốt trong khi reset. Nếu việc cấp nguồn cho chip không có
công dụng reset, mạch chốt được khởi động bằng một giá trị ngẫu nhiên và giá
trị này được duy trì cho đến khi có tác động reset. Điều cần thiết là giá trị
được chốt của phải phù hợp vơi mức logic hiện hành ở chân này.
Các bit khóa chương trình
Loại bảo vệ
Chế độ
LB1
LB2
LB3
1
U
U
U
Không có đặc trưng khóa chương trình
2
P
U
U
Các lệnh MOVC được thực thi từ bộ nhớ chương trình ngoài không được phép tìm nạp lệnh từ bộ nhớ nội, được lấy mẫu và được chốt khi reset, hơn nữa việc lập trình trên Flash bị cấm
3
P
P
U
Như chế độ 2, cấm thêm việc kiểm tra chương trình
4
P
P
P
Như chế độ 3, cấm thêm việc thực thi chương trình ngoài
3.1.4 .Tóm tắt tập lệnh của AT89c51
- Tập lệnh Mcs-51 có 255 lệnh gồm 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte.
3.1.4. 1Các chế độ định địa chỉ:
Địa chỉ thanh ghi , Địa chỉ trực tiếp , Địa chỉ gián tiếp , Địa chỉ tức thời , Địa chỉ tương đối , Địa chỉ tuyệt đối , Địa chỉ dài
3.1.4.2 Các nhóm lệnh của Mcs-C51:
Nhóm lệnh số học:
ADD A,soure ; cộng toán hạng vào A
SUBB A,soure ; trừ bớt A bởi toán hạng nguồn
INC A ; tăng giá trị A lên 1
DEC A ; giảm A xuống 1
MUL AB ; nhân A với B
DIV AB ; chia A bởi B
DA ; hiệu đính
Nhóm lệnh logic.
ANL A,soure ; lệnh nhân logic
ORL A,soure ; lệnh cộng logic
XRL A,soure ; lệnh xor logic
RL A ;quay trái
RR A ; quay phải
CLR A ; xóa A
Nhóm lệnh di chuyển dữ liệu:
MOV A,soure ; di chuyển toán hạng nguồn đến đích.
MOVC A,@A+DPTR ; di chuyển từ bộ nhớ chương trình.
MOVX A,@Ri ; di chuyển từ bộ nhớ dữ liệu
PUSH direct ; cất vào stack
POP direct ;lấy ra stack
XCH A,soure ; trao đổi các byte.
XCHD A,@Ri ; trao đổi các digit thấp.
Nhóm lệnh rẽ nhánh:
ACALL addr ; gọi chương trình con
RET ;quay chương trình con
RETI ; quay về từ chương trình phục vụ ngắt
JMP addr ; lệnh nhảy
CJNE A,direct,rel ; so sánh và nhảy
3.2. Tìm hiểu IC thời gian thực DS1307
3.2.1 Giới thiệu chung về DS1307
-IC thời gian thực là họ vi điều khiển của hãng dalatDS1307 có một số đặc trưng cơ bản sau _DS1307 là IC thời gian thực với nguồn cung cấp nhỏ dùng để cập nhật thời gian và ngày tháng _SRAM :56bytes_Địa chỉ và dữ liệu được truyền nối tiệp qua 2 đường bus 2 chiều _DS1307 có môt mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp 3v+ DS1307 có 7 byte dữ liệu nằm từ địa chỉ 0x00 tới 0x06, 1 byte điểu khiển, và 56 byte lưu trữ ( dành cho người sủ dụng )+ Khi xử lý dữ liệu từ DS1307, họ đã tự chuyển cho ta về dạng số BCD, ví dụ như ta đọc đựoc dữ liệu từ địa chỉ 0x04 ( tưong ứng với Day- ngày trong tháng) và tại 0x05 ( thang ) là 0x15, 0x11 như thế có nghĩa là lúc đó là ngày 15-11 chứ ko phải là ngày 21 tháng 17+ Lưu ý đến vai trò của chân SQW/OUT. Đây là chân cho xung ra của DS1307 có 4 chế độ 1Hz, 4.096HZ, 8.192Hz, 32.768Hz... các chế độ này đuợc quy định bởi các bít của thanh ghi Control Register ( địa chỉ 0x07 )+ Địa chỉ của DS1307là 0xD0_ Cơ chế hoạt động :DS1307 hoạt động với vai trò slave trên đường bus nối tiếp.Việc truy cập được thi hành với chỉ thị start và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi.tiếp theo đó các thanh ghi sẽ được truy cập liên tụcđến khi chỉ thị stop đươc thực thi
3.2.2 Cơ chế hoạt động và chức năng của DS1307
Hình 9: Sơ đồ DS1307
Vcc: nối với nguồn X1,X2: nối với thạch anh 32,768 kHz Vbat: đầu vào pin 3V GND: đất SDA: chuỗi data SCL: dãy xung clock SQW/OUT: xung vuông/đầu ra driver • DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời gian và ngày tháng với 56 bytes SRAM. Địa chỉ và dữliệu được truyền nối tiếp qua 2 đường bus 2 chiều. Nó cung cấp thông tin về giờ,phút,giây ,thứ,ngày ,tháng, năm.Ngày cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31 ngày,bao gồm cả việc tự động nhảy năm. Đồng hồ có thể hoạt động ở dạng 24h hoặc 12h với chỉ thị AM/PM. DS1307 có một mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp. • DS 1307 hoạt động với vai trò slave trên đường bus nối tiếp. Việc truy cập được thi hành với chỉ thị START và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi. Tiếp theo đó các thanh ghi sẽ được truy cập liên tục đến khi chỉ thị STOP được thực thi. Sơ đồ khối của DS1307: Hình 10:Mô tả hoạt động của các chân: • Vcc,GND: nguồn một chiều được cung cấp tới các chân này. Vcc là đầu vào 5V. Khi 5V được cung cấp thì thiết bị có thể truy cập hoàn chỉnh và dữ liệu có thể đọc và viết. Khi pin 3 V được nối tới thiết bị này và Vcc nhỏ hơn 1,25Vbat thì quá trình đọc và viết không được thực thi,tuy nhiên chức năng timekeeping không bị ảnh hưởng bởi điện áp vào thấp. Khi Vcc nhỏ hơn Vbat thì RAM và timekeeper sẽ được ngắt tới nguồn cung cấp trong (thường là nguồn 1 chiều 3V) • Vbat: Đầu vào pin cho bất kỳ một chuẩn pin 3V . Điện áp pin phải được giữ trong khoảng từ 2,5 đến 3V để đảm bảo cho sự hoạt động của thiết bị. • SCL(serial clock input): SCL được sử dụng để đồng bộ sự chuyển dữ liệu trên đường dây nối tiếp. • SDA(serial data input/out): là chân vào ra cho 2 đường dây nối tiếp. Chân SDA thiết kế theo kiểu cực máng hở , đòi hỏi phải có một điện trở kéo trong khi hoạt động. • SQW/OUT(square wave/output driver)- khi được kích hoạt thì bit SQWE được thiết lập 1 chân SQW/OUT phát đi 1 trong 4 tần số (1Hz,4kHz,8kHz,32kHz). Chân này cũng được thiết kế theo kiểu cực máng hở vì vậy nó cũng cần có một điện trở kéo trong. Chân này sẽ hoạt động khi cả Vcc và Vbat được cấp. • X1,X2: được nối với một thạch anh tần số 32,768kHz.Là một mạch tạo dao động ngoài , để hoạt động ổn định thì phải nối thêm 2 tụ 33pF • Cũng có DS1307 với bộ tạo dao động trong tần số 32,768kHz, với cấu hình này thì chân X1 sẽ được nối vào tín hiệu dao động trong còn chân X2 thì để hở
3.2.3 Sơ đồ địa chỉ RAM và RTC
• Thông tin về thời gian và ngày tháng được lấy ra bằng cách đọc các byte thanh ghi thích hợp. thời gian và ngày tháng được thiết lập cũng thông qua các byte thanh ghi này bằng cách viết vào đó những giá trị thích hợp. nội dung của các thanh ghi dưới dạng mã BCD(binary coded decreaseimal). Bit 7 của thanh ghi seconds là bit clock halt(CH),khi bit này được thiết lập 1 thì dao động disable,khi nó được xoá về 0 thì dao động được enable. Chú ý l: enable dao động trong suốt quá trình cấu hình thiết lập (CH=0). Thanh ghi thời gian thực được mô tả như sau: • DS1307 có thể chạy ở chế độ 24h cũng như 12h. Bit thứ 6 của thanh ghi hours là bit chọn chế độ 24h hoặc 12h. khi bit này ở mức cao thì chế độ 12h được chọn. ở chế độ 12h thì bit 5 là bit AM/PM với mức cao là là PM. ở chế độ 24h thì bit 5 là bit chỉ 20h(từ 20h đến 23h). • Trong quá trình truy cập dữ liệu, khi chỉ thị START được thực thi thì dòng thời gian được truyền tới một thanh ghi thứ 2,thông tin thời gian sẽ được đọc từ thanh ghi thứ cấp này,trong khi đó đồng hồ vẫn tiếp tục chạy. Trong DS1307 có một thanh ghi điều khiển để điều khiển hoạt động của chân
SQW/OUT • OUT(output control):bit này điều khiển mức ra của chân SQW/OUT khi đầu ra xung vuông là disable. Nếu SQWE=0 thì mức logic ở chân SQW/OUT sẽ là 1 nếu OUT=1,và =0 nếu OUT=0 • SQWE(square wave enable): bit này được thiết lập 1 sẽ enable đầu ra của bộ tạo dao động. Tần số của đầu ra sóng vuông phụ thuộc vào giá trị của RS1 và RS0 DS1307 hỗ trợ bus 2 dây 2 chiều và giao thức truyền dữ liệu. thiết bị gửi dữ liệu lên bus được gọi là bộ phát và thiết bị nhận gọi là bộ thu. thiết bị điều khiển quá trình này gọi là master. thiết bị nhận sự điều khiển của master gọi là slave. Các bus nhận sự điều khiển của master,là thiết bị phát ra chuỗi xung clock(SCL),master sẽ điều khiển sự truy cập bus,tạo ra các chỉ thị START và STOP Sự truyền nhận dữ liệu trên chuỗi bus 2 dây : Tuỳ thuộc vào bit R/ w mà 2 loại truyền dữ liệu sẽ được thực thi: • truyền dữ liệu từ master truyền và slave nhận: Master sẽ truyền byte đầu tiên là địa chỉ của slave. Tiếp sau đó là các byte dữ liệu . slave sẽ gửi lại bit thông báo đã nhận được (bit acknowledge) sau mỗi byte dữ liệu nhận được. dữ liệu sẽ truyền từ bit có giá trị nhất (MSB). • truyền dữ liệu từ slave và master nhận: byte đầu tiên (địa chỉ của slave) được truyền tới slave bởi master. Sau đó slave sẽ gửi lại master bit acknowledge. tiếp theo đó slave sẽ gửi các byte dữ liệu tới master. Master sẽ gửi cho slave các bit acknowledge sau mỗi byte nhận được trừ byte cuối cùng,sau khi nhận được byte cuối cùng thì bit acknowledge sẽ không được gửi . -Master phát ra tất cả các chuỗi xung clock và các chỉ thị START và STOP. sự truyền sẽ kết thúc với chỉ thị STOP hoặc chỉ thị quay vòng START. Khi chỉ thị START quay vòng thì sự truyền chuỗi dữ liệu tiếp theo được thực thi và các bus vẫn chưa được giải phóng. Dữ liệu truyền luôn bắt đầu bằng bit MSB. DS1307 có thể hoạt động ở 2 chế độ sau: • chế độ slave nhận( chế độ DS1307 ghi):chuỗi dữ liệu và chuỗi xung clock sẽ được nhận thông qua SDA và SCL. Sau mỗi byte được nhận thì 1 bit acknowledge sẽ được truyền. các điều kiện START và STOP sẽ được nhận dạng khi bắt đầu và kết thúc một truyền 1 chuỗi. nhận dạng địa chỉ được thực hiện bởi phần cứng sau khi chấp nhận địa chỉ của slave và bit chiều. Byte địa chỉ là byte đầu tiên nhận được sau khi điều kiện START được phát ra từ master. Byte địa chỉ có chứa 7 bit địa chỉ của DS1307, là 1101000, tiếp theo đó là bit chiều (R/ w) cho phép ghi khi nó bằng 0. sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ phát đi 1 tín hiệu acknowledge lên đường SDA. Sau khi DS1307 nhận dạng được địa chỉ và bit ghi thì master sẽ gửi một địa chỉ thanh ghi tới DS1307 , tạo ra một con trỏ thanh ghi trên DS1307 và master sẽ truyền từng byte dữ liệu cho DS1307 sau mỗi bit acknowledge nhận được. sau đó master sẽ truyền điều kiện STOP khi việc ghi hoàn thành. • chế độ slave phát ( chế độ DS1307 đọc): byte đầu tiên slave nhận được tương tự như chế độ slave ghi. Tuy nhiên trong chế độ này thì bit chiều lại chỉ chiều truyền ngược lại. Chuỗi dữ liệu được phát đi trên SDA bởi DS 1307 trong khi chuỗi xung clock vào chân SCL. Các điều kiện START và STOP được nhận dạng khi bắt đầu hoặc kết thúc truyền một chuỗi. byte địa chỉ nhận được đầu tiên khi master phát đi điều kiện START. Byte địa chỉ chứa 7 bit địa chỉ của slave và 1 bit chiều cho phép đọc là 1. sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ nhận 1 bit acknowledge trên đường SDA. Sau đó DS1307 bắt đầu gửi dữ liệu tới địa chỉ con trỏ thanh ghi thông qua con trỏ thanh ghi. nếu con trỏ thanh ghi không được viết vào trước khi chế độ đọc được thiết lập thì địa chỉ đầu tiên được đọc sẽ là địa chỉ cuối cùng chứa trong con trỏ thanh ghi .DS1307 sẽ nhận được một tín hiệu Not Acknowledge khi kết thúc quá trình đọc. Đọc dữ liệu-chế độ slave phát • thời gian thực hiện việc đọc,ghi dữ liệu của DS1307: sơ đồ đồng bộ:
3.3 Giới thiệu LCD
-LCD được giới thiệu ở đây 14 chânn (hình dưới). Chức năng các chân được
cho trong bảng dưới:
3.3.1 Chức năng các chân của Module LCD 16x2
Chân số
Ký hiệu
Mức logic
I/O
Chức năng
1
Vss
-
-
Nguồn cung cấp(GND)
2
Vdd
-
-
Nguồn cung cấp(+5V)
3
Vee
-
I
Điện áp để điều chỉnh độ tương phản
4
RS
0/1
I
Lựa chọn thanh ghi
0= thanh ghi lệnh
1=thanh ghi dữ liệu
5
R/W
0/1
I
0=ghi vào LCD module
1=đọc từ LCD module
6
E
1,1=>0
I
Tín hiệu cho phép
7
DB1
0/1
I/O
Data bus line 0(LSB)
8
DB2
0/1
I/O
Data bus line1
9
DB3
0/1
I/O
Data bus line2
10
DB4
0/1
I/O
Data bus line3
11
DB5
0/1
I/O
Data bus line4
12
DB6
0/1
I/O
Data bus line5
13
DB7
0/1
I/O
Data bus line6
14
DB8
0/1
I/O
Data bus line7(MSB)
15
Vcc
-
-
Nguồn cung cấp
16
GND
-
-
mass
Các chân điều khiển việc đọc và ghi LCD bao gồm RS, R/W và EN. RS (chân số 3): Chân lựa chọn thanh ghi (Select Register), chân này cho phép lựa chọn 1 trong 2 thanh ghi IR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với các chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR được chọn và nếu RS=1 thanh ghi DR được chọn. Chúng ta đều biết thanh ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thế nếu muốn gởi 1 mã lệnh đến LCD thì chân RS phải được reset về 0. Ngược lại, khi muốn ghi mã ASCII của ký tự cần hiển thị lên LCD thì chúng ta sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân RS được mô tả trong hình 5.
Hình 11: Hoạt động của chân RS.
R/W (chân số 4): Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộ điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ liệu sẽ được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà dữ liệu có thể đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang bận hay không (cờ Busy Flag - BF). Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều khiển), vì thế một cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác mới sẽ được gán cho LCD. Vì thế, khi làm việc với Text LCD chúng ta nhất thiết phải có một chương trình con tạm gọi là wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách để viết chương trình wait_LCD. Cách 1 là đọc bit BF về kiểm tra và chờ BF=0, cách này đòi hỏi lệnh đọc từ LCD về bộ điều khiển ngoài, do đó chân R/W cần được nối với bộ điều khiển ngoài. Cách 2 là viết một hàm delay một khoảng thời gian cố định nào đó (tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn giản vì không cần đọc LCD, do đó chân R/W không cần sử dụng và luôn được nối với GND. Tuy nhiên, nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ làm chậm quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị. Trong bài này tôi hướng dẫn bạn cách tổng quát là cách 1, để sử dụng cách 2 bạn chỉ cần một thay đổi nhỏ trong chương trình wait_LCD (sẽ trình bày chi tiết sau) và kết nối chân R/W của LCD xuống GND. EN (chân số 5): Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với bộ điều khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo một “xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào LCD trước hết cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân D0:7, sau đó set chân EN lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh xuống.
-Để hiển thị chữ cái và con số, mã ASCII của các chữ cái từ A đến Z, a đến z và các
con số tư 0 – 9 được gứi tới các chân D0 – D7 khi RS = 1.
-Các mã lệnh được gửi tới LCD để xóa màn hình hoặc đưa con trỏ về đầu d ng…(
được liệt kê trên bảng trên) thông các chân D0 – D7.
-Có thế sử dụng RS = 0 để kiểm tra bit cờ bận xem LCD đã sẵn sàng nhận thông tin
chưa. Khi R/W = 1 v RS = 0: Nếu D7 = 1 ( cờ bận bằng 1) c nghĩa LCD đang bận
các công việc bên trong và sẽ không nhận thông tin, nếu D7 = 0 sẵn sàng nhận
thông tin mới. Trong mọi trường hợp cần kiểm tra cờ bận trước khi ghi bất kì dữ
liệu nào lên LCD.
Các thanh ghi
-Thanh ghi IR: Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng. chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR.
Ví dụ:
Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110
- Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng RAM DDRAM hoặc CGRAM ( ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2 vùng RAM này gửi ra cho MPU (ở chế độ đọc).
-Cờ báo bận BF: (Busy Flag)Khi đang thực thi các hoạt động bên trong, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF( thông qua chân DB7 khi có thiết lập RS=0, R/W=1) lên để cho biết nó đang “bận”.
-Bộ đếm địa chỉ AC : (Address Counter) Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin được nối trực tiếp cho 2 vùng RAM (việc chọn lựa vùng RAM tương tác đã được bao hàm trong mã lệnh).
Sau khi ghi vào (đọc từ) RAM, bộ đếm AC tự động tăng lên (giảm đi) 1 đơn vị. Bộ nhớ LCD Vùng RAM hiển thị DDRAM : (Display Data RAM)
3.3.2 mã lệnh của LCD HD4480
Lệnh
Mã lệnh
Mô tả
Thời gian thi hành
RS
R/W
DB0
DB1
DB2
DB3
D
B44
DB5
DB6
DB7
Xóa màn hình
0
0
0
0
0
0
0
0
0
1
Xóa màn hình đưa con trỏ về vị trí đầu
1.64ms
Đưa con trỏ về vị trí đầu
0
0
0
0
0
0
0
0
1
x
Đưa con trỏ về vị trí đầu
1.64ms
Thiết lập chế độ
0
0
0
0
0
0
0
1
I/D
S
Thiết lập hướng dịch chuyển con trỏ(I/D), dịch hiển thị(S)
40us
Bật tắt hiển thị
0
0
0
0
0
0
1
D
C
B
Bật tắt hiển thị, con trỏ; bật tắt chế độ nhấp nháy con trỏ
40us
Dịch con trỏ hiển thị
0
0
0
0
0
1
S/C
R/L
*
*
Thiết lập chiều dịch chuyển của con trỏ và hiển thị
40us
Thiết lập chức năng
0
0
0
0
1
DL
N
F
*
*
Thiết lập độ dài của dữ liệu, số dòng và font chữ
40us
Thiết lập địa chỉ CGRAM
0
0
0
1
CGRAM address
Thiết lập địa chỉ CGRAM
40us
Thiết lập địa chỉ DDRAM
0
0
1
DDRAM address
Thiết lập địa chỉ DDRAM
40us
Đọc cờ báo bận và địa chỉ CGRAM/
DDRAM
0
1
BF
CGRAM/ DDRAM address
Đọc cờ báo bận và địa chỉ của CGRAM hoặc DDRAM( tùy vào lệnh trước đó)
40us
Ghi CGRAM/
DDRAM
1
0
Write data
Ghi dữ liệu vào CGRAM hoặc DDRAM.
40us
Đọc CGRAM/
DDRAM
1
1
Read data
Đọc dữ liệu từ CGRAM hoặc DDRAM
40us
- xóa LCD: lệnh này xóa toàn bộ nội dung DDRAM và vì thế xóa toàn bộ hiển thị trên LCD. Vì đây là 1 lệnh ghi Instruction nên chân RS phải được reset về 0 trước khi ghi lệnh này lên LCD. Mã lệnh xóa LCD là 0x01(ghi vào D0:D7). - đưa con trỏ về vị trí đầu, dòng 1 của LCD: lệnh này thực hiện việc đưa con trỏ về vị trí đầu tiên của bộ nhớ DDRAM, vì thế nếu sau lệnh này một biến được ghi vào DDRAM thì biến này sẽ nằm ở vị trí đầu tiên (1;1). RS cũng phải bằng 0 trước khi ghi lệnh. Mã lệnh là 0x02 hoặc 0x03(chọn 1 trong 2 mã lệnh, tùy ý). - định vị trí con trỏ cho DDRAM: di chuyển con trỏ đến một vị trí tùy ý trong DDRAM và vì thế có thể được dùng để chọn vị trí cần hiển thị trên LCD. Để thực hiện lệnh này cần reset RS=0. Bit MSB của mã lệnh (D7) phải bằng 1, 7 bit còn lại của mã lệnh chính là địa chỉ DDRAM muốn di chuyển đến. Ví dụ chúng ta muốn di chuyển con trỏ đến vị trí thứ 3 trên dòng 2 của LCD (địa chỉ 42) chúng ta cần ghi mã lệnh 0xAA vì 0xAA=10101010 (binary) trong đó bit MSB bằng 1, bảy bit còn lại là 0101010=42, địa chỉ của ô nhớ muốn đến. - ghi dữ liệu vào CGRAM hoặc DDRAM: vì đây không phải là lệnh ghi instruction mà là 1 lệnh ghi dữ liệu nên chân RS cần được set lên 1 trước khi ghi lệnh vào LCD. Lệnh này cho phép ghi mã ASCII của một ký tự cần hiển thị vào thanh ghi DDRAM. Trường hợp ghi vào CGRAM không được khảo sát.
- xác lập các hiện thị liên tiếp cho LCD: nói một cách dễ hiểu, lệnh này chỉ ra cách mà bạn muốn hiển thị một ký tự tiếp theo 1 ký tự trước đó. Ví dụ nếu bạn muốn hiện thị 2 ký tự liên tiếp AB, trước hết bạn viết A tại vị trí 5, dòng 1. Sau đó bạn ghi B vào LCD, lúc này có 4 cách mà LCD có thể hiển thị B như sau: hiển thị B bên phải A tại vị trí số 6 (cách 1); B cũng có thể được hiển thị bên trái A, tại vị trí số 4(cách 2); hoặc LCD có thể tự dịch chuyển A về bên trái đến vị trí 4 sau đó hiển thị B bên phải A, tại vị trí 5(cách 3); và khả năng cuối cùng là LCD dịch chuyển A về bên phải đến vị trí 6 sau đó hiển thị B bên trái A, tại vị trí 5(cách 4). Chúng ta có thể chọn 1 trong 4 cách hiển thị trên thông qua lệnh Entry mode set. Đây là lệnh ghi Instruction nên RS=0, 5 bit cao D7:3=00000, bit D2=1, hai bit còn lại D1:0 chứa mã lệnh để lựa chọn 1 trong 4 cách hiển thị. Xem lại bảng 2, bit D1 chứa giá trị I/D và D0 chứa S. Trong đó I/D nghĩa là tăng hoặc giảm (Increment or Decrement). I/D= 1 là hiển thị tăng tức ký tự sau sẽ hiển thị bên phải ký tự trước, nếu I/D=0 thì hiển thị giảm, tức ký tự sau hiển thị bên trái ký tự trước. S là giá trị Shift, nếu S=1 thì các ký tự trước đó sẽ được “đẩy” đi, ký tự sau chiếm chỗ ký tự trước, ngược lại nếu S=0 thì vị trí hiển thị của các ký tự trước đó không thay đổi. Có thể tóm tắt 4 mode hiển thị ứng với 4 mã lệnh như sau: + D7:0 = 0x04 (00000100) : hiển thị giảm và không shift (như cách 2 trong ví dụ). + D7:0 = 0x05 (00000101) : hiển thị giảm và shift (như cách 4 trong ví dụ). + D7:0 = 0x06 (00000110) : hiển thị tăng và không shift (như cách 1, khuyến khích). + D7:0 = 0x07 (00000111) : hiển thị tăng và shift (như cách 3 trong ví dụ). - xác lập cách hiện thị cho LCD: lệnh này bao gồm các thông số cho phép LCD hiển thị, cho phép hiển thị cursor