Giao tiếp bàn phím hiển thị LCD sử dụng 89C51

CHƯƠNG 1: TÌM HIỂU YÊU CẦU ĐỀ TÀI

CHƯƠNG 1.1: GIỚI THIỆU VỀ AT89C51

CHƯƠNG 1.1.1: GIỚI THIỆU HỌ MSC-51

CHƯƠNG 1.1.2: SƠ ĐỒ CHÂN CỦA AT89C51

CHƯƠNG 1.1.3: SƠ ĐỒ KHỐI CỦA AT89C51

CHƯƠNG 1.1.4: CHỨC NĂNG CÁC CHÂN CỦA AT89C51

CHƯƠNG 1.1.5: TỔ CHỨC CỦA CHIP 8051

CHƯƠNG 1.1.6: BỘ NHỚ CHƯƠNG TRÌNH (ROM)

CHƯƠNG 1.2: GIỚI THIỆU VỀ LCD (TEXT LCD)

CHƯƠNG 1.2.1: HÌNH ẢNH LCD

CHƯƠNG 1.2.2: GIỚI THIỆU SƠ LƯỢC VỀ LCD

CHƯƠNG 1.2.3: SƠ ĐỒ, CHỨC NĂNG LIÊN KẾT CÁC CHÂN

CỦA LCD

CHƯƠNG 1.2.4: GIỚI THIỆU SƠ LƯỢC VỀ HD44780U

CHƯƠNG 1.3: GIỚI THIỆU VỀ BÀN PHÍM GIAO TIẾP 4×4

CHƯƠNG 1.3.1: HÌNH ẢNH BÀN PHÍM

CHƯƠNG 1.3.2: THUẬT TOÁN QUÉT PHÍM

CHƯƠNG 2: THỰC HIỆN MÔ HÌNH ĐỒ ÁN

CHƯƠNG 2.1: SƠ ĐỒ MẠCH NGUYÊN LÝ

CHƯƠNG 2.2: MẠCH LAYOUT

CHƯƠNG 2.3: LƯU ĐỒ GIẢI THUẬT

 

 

doc88 trang | Chia sẻ: lethao | Lượt xem: 8019 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Giao tiếp bàn phím hiển thị LCD sử dụng 89C51, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ho dữ liệu và chương trìình. →chương trrình và dữ liệu nằm riiêng trên R R Tổ c ức bộ nhớ của chipp 8051: vn htttp://www.eebook.edu.v  ROM và RA  AM.  15 ĐỒ ÁN 1 htttp://www.eebook.edu.vvn  TRẦN NGỌC LLÝ_070642D_07DD2D 16 ĐỒ ÁN 1 R Tổ c ức nhớ trrong chip 8  8051:  TRẦN NGỌC L LÝ_070642D_07DD2D 1.1.6.  BỘ NHỚ CHƯƠN  NG TRÌNH  H (ROM) - Dùn ng để lưu tr ữ chương trình điều khiển cho chip 8051 hoạt động - Chiip 8051 có 4 KB ROM R Bộ n ớ dữ liệu M trong, địa chỉ truy xuất: 000H H – FFFH. - Dùn ng để lưu tr ữ các dữ lliệu.  . - Chiip 8051 có 128 byte R RAM trong g, địa chỉ trruy xuất: 000H – 7FH. - RAM M trong của chip 805 51 được ch hia ra: • RAM đa chức năng: • RAM định địa vn htttp://www.eebook.edu.v  ỉ bit:  17 ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D → cho phép  p xử lý từng  g bit dữ liệu riêng lẻ m  mà không ảnh hưởng  g đến các b  bit khác trong cả bytte. • Cácc dãy thanh  h ghi:  . → cho phép p truy xuất dữ liệu nhaanh, lệnh ttruy xuất đơ n giản vàà ngắn gọn. + Lưu ý: Ở cchế độ mặc định thì d dãy thanh g ghi tích cực (đang đư ược sử dụng) là dãy y 0 và các tthanh ghi ttrong dãy lần lượt có tên là R0 -- R7. Có thể thay đổi dãy tích cực (xem phần thanh g ghi PSW). A ột số tthanh ghi c R Thaanh ghi A: R Thaanh ghi B: chức năng đ c biệt:  18 vn htttp://www.eebook.edu.v ĐỒ ÁN 1 - Phéép nhân 2 số 8 bit khô  TRẦN NGỌC L ông dấu _ kết quả là s ố 16 bit LÝ_070642D_07DD2D • Bytte cao _ chứa vào than nh ghi B • Bytte thấp _ chứa vào thaanh ghi A - Phé ép chia 2 số 8 bit _ thư ương số vàà số dư là số 8 bit A • Thư ng số _ c chứa vào th hanh ghi A • Số dư _ chứa vào thanh ghi B vn htttp://www.eebook.edu.v  19 ĐỒ ÁN 1 R Thaanh ghi định  h thời:  TRẦN NGỌC LLÝ_070642D_07DD2D R Sơ lược về hoạt động củaa bộ định tthời: vn htttp://www.eebook.edu.v  20 ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D • Tần  ố: tần số xung ngõ ra bằng tần  ố xung n  ngõ vào ch  hia cho 2N. • Giá á trị: giá trị nhị phân ttrong các F FF của bộ đ nh thời làà số đếm của các ung clock ttại ngõ vào xu o từ khi bộ định thời b ắt đầu đếm • Tràn n: xảy ra h ện tượng tràn (cờ trà àn = 1) khii số đếm chhuyển từ giiá trị lớn nh ất xuống g giá trị nhỏ nhất của bộ định thời. V ụ: Bộ định thời 16 6 bit (chứa 16 FF bên n trong). *T ần số: Giá trị: số đếm nằm ttrong khoản *G  ng 0 (0000  ). 0H) _ 65535 (FFFFH) Tràn: cờ tràn bằng 1 k *T khi số đếm m từ FFFFH H chuyển x xuống 00000H. H họa đơn giản hoạt độ vn ộng của bộ định thời 3 3 bit:  21 htttp://www.eebook.edu.v ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D • Ứng  g dụng định thời gian  n (TIMER)): Bộ định tthời được lập trình sa  ao cho nó sẽ tràn sau m ột khoảng bằng 1. g thời gian n đã qui địn đó ờ tràn của bộ định h thời sẽ • Ứng g dụng đếm ự kiện ((COUNTER): để xác định số lần n xuất hiện ủa một kíích thích từ bên ngoà xu ống 0). ài tới 1 chân n của chip 8051 (kích D): h thích chu uyển trạng tthái từ 1 R Thaanh ghi chế độ định thời (TMOD • Tha anh ghi TM MOD (Timeer Mode R Register) ch ứa các bit dùng để th ết lập chế độ hoạt động cho b ộ định thời 0 và bộ đ nh thời 1 • Thaanh ghi TMMOD được nạp giá trị một lần tại thời điểm  m bắt đầu của chương trình h để qui định chế độ h hoạt động của các bộ định thời.. • Cấu h ghi TMO vn OD:  22 htttp://www.eebook.edu.v ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D R Thaanh ghi điều  ển địn  ời (TC  CON): • Thaanh ghi TC CON (Time er Control R Register) chứa các bit it dùng để điều khiển vàà báo trạng g thái của bộ định thời 0 và bộ đ nh thời 1. N: • Cấu h ghi TCON vn  23 htttp://www.eebook.edu.v ĐỒ ÁN 1 R Chế độ định th ời 13bit (C C ế độ 0 (MMode 0): • Chế độ định th ời 13 bit.  Chế độ 0):  TRẦN NGỌC L LÝ_070642D_07DD2D • Sử dụng 8 bit của thanh ghi THx v bộ định thời và 5 bit thấp ủa thanh h ghi TLx để tạo ra • Số đ m: 0000H → 1FFF FH nghĩa là à từ 0 → 8191. Thời g gian định tthời: từ 0 → (213–1))TTimer nghĩa là từ 0 → 8191TTim mer. • Tha anh ghi TH Hx và TLx cchứa giá trrị của bộ định thời.  24 vn htttp://www.eebook.edu.v ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D • Khii có xung c Hx/TLx. TH  clock, bộ định thời bắt đầu đếm lên từ giá trị chứa tro  ong • Xảy ờ tràn TFx x=1) khi số đếm chuy ển từ 1FFF FH sang 00 000H và vi ệc đếm sẽ tiếp tục đế m lên từ g giá trị 0000 0H. Chế đ định thời 16bit (Chhế độ 1): C ế độ 1 (M  Mode 1): • Chế độ định th ời 16 bit. • Sử dụng thanh h ghi THx và TLx để tạo ra bộ đ nh thời. • Số đ m: 0000H → FFFF FH nghĩa là à từ 0 → 65 5535. Thờii gian định h thời: từ 0 → (216– Timer ng ghĩa là từ 0 → 65535 5TTimer. • Thaanh ghi TH Hx và TLx cchứa giá trrị của bộ định thời. • Khii có xung c Hx/TLx. TH clock, bộ định thời bắt đầu đếm lên từ giá trị chứa tro ong • Xảy ờ tràn TFx x=1) khi số đếm chuy ển từ FFFF FH sang 00 000H và vi ệc đếm sẽ tiếp tục đế m lên từ g giá trị 0000 0H. R Chế độ định th ời 8bit tự nạp lại (Ch ế độ 2): C ế độ 2 (M  Mode 2): • Chế độ định th ời 8 bit tự nạp lại. • Sử dụng thanh h ghi TLx đ để tạo ra bộ định thời • Số đ m: 00H → FFH ng ghĩa là từ 0 → 255. Thời gian địịnh thời: từ 0 → (28–1)TTimer ng ghĩa là từ 0 → 255TTiimer.  25 vn htttp://www.eebook.edu.v ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D • Tha  anh ghi TLx chứa giáá trị của bộ định thời v  và thanh gh  hi THx chứa giá trị sẽ được dùn ng để nạp lại cho bộ đ định thời. • Khii có xung c clock, bộ định thời bắt đầu đếm lên từ giá trị chứa tro ong TLx. • Xảy ờ tràn TFx x=1) khi số đếm chuy ển từ FFH H sang 00H và việc đếm sẽ tiếp tục đếm lê ên từ giá trị chứa tron ng thanh gh hi THx. R Chế độ định th ời chia sẻ (Chế độ 3): C ế độ 3 (M  Mode 3) là: • Chế độ định th ời chia sẻ. R Bộ đ nh thời 0 được chiaa ra: +/ Bộ định + h thời 8 bit thứ I: → Sử dụng than nh ghi TL0 0 để tạo ra bộ định thời. → Số đếm: 00H → FFH n nghĩa là từ 0 → 255. Thời gian đ định thời: từ 0 → (28–1)TTimer ng ghĩa là từ 0 → 255TTiimer . → Th hanh ghi T TL0 chứa giiá trị của bộ định thời.  . → Kh hi có xung g clock, bộ định thời b ắt đầu đếm ừ giiá trị chứa ttrong TL0. → Xảy ra tràn ((cờ tràn TF F0=1) khi ssố đếm chu uyển từ FFH H sang 00H H và việc đếm sẽ tiếp tục đếm lê ên từ giá trị 00H. +// Bộ định tthời 8 bit th ứ II: → Sử dụng thannh ghi TH0  0 để tạo ra bộ định th ời. → Số đếm: 00H → FFH ng ghĩa là từ 0 → 255. T ời gian đ định thời: t ừ 0 → (28–1)TTimernghĩa là từ 0 → 255TTimer. → Th hanh ghi T TH0 chứa g giá trị của bộ định thời.  26 vn htttp://www.eebook.edu.v ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D H0. TH  → Kh  hi có xung  g clock, bộ định thời b ắt đầu đếm  ừ giiá trị chứa ttrong → Xảy ra tràn ((cờ tràn TF F1=1) khi ssố đếm chu uyển từ FFH H sang 00H H và việc đếm sẽ tiếp tục đếm lê +// Bộ định tthời 1: ên từ giá trị 00H. - Là b ộ định thời 16 bit. - Khôông hoạt độ ng ở chế đ độ 0, 1, 2).  độ 3 nhưng  g có thể hoạt động cáác chế độ k  khác (chế - Khôông có cờ b báo tràn như các bộ đ nh thời kh hác. a từ: ra R Ngu ồn xung clock cho bộ định thời: Nguồn x xung cho bộ định thời được tạo n. • Mạch dao động trên chip → dù ùng cho tính h năng định thời gian Xung kích • X h thích bên ngoài → d dùng cho tíính năng đế m sự kiện R Trường hợp định thời giaan: Nếu C/T=0 thì: • Bộ định th ời được dùùng để địnhh thời gian  n (Timer). Nguồn xun • N Lưu ý: ng clock định thời đư ược lấy từ mạch dao đ ng trên cchip. - Tần số xun ng clock cu ung cấp cho o bộ định tthời bằng 1 1/12 tần số của mạch dao động rên chip 80 tr 051. - T ời gian đ nh thời là à khoảng th ời gian tín nh từ lúc b ộ định thời bắt đầu đ m cho đến lúc bộ đ nh thời bắt đầu tràn (thời gian này phụ th ộc vào ggiá trị ban đ u được nạp cho các thanh ghi THx và TL vn htttp://www.eebook.edu.v Lx).  27 ĐỒ ÁN 1 R Trường hợp đếm sự kiện Nếu C/T=1 thì:  TRẦN NGỌC L LÝ_070642D_07DD2D • Bộ định th ời được dù ùng để đếm m sự kiện (C Counter). Nguồn xun • N ng clock định thời đư ược lấy từ x xung kích tthích bên n ngoài tại ha ai chân T0 vàà T1 của ch Lưu ý: hip 8051. - Tần số kích h thích tối đa cho phéép tại chân n T0 và T1 là 500KHz Hz (trong trư ng hợp hip 8051 dù ch ùng thạch anh 12MH Hz). - Số lượng sự kiện (số xung) mà bộ định thời đếm đượ hanh ghi THHx và TLx. th ợc sẽ được chứa trong g các - Một kích thhích được gọi là một sự kiện kh 0 ở ngõ vào T0 và T1. vn htttp://www.eebook.edu.v hi xảy ra sự chuyển trạng thái từ 1 xuống 28 ĐỒ ÁN 1 1.2. GIỚI 1.2.1. 1.2.2.  TRẦN NGỌC L ỆU V Ề LCD ((TEXT LCCD) HÌNH ẢNH LCD U7 D LCD CD LC LCD 116×2 GIỚI TH ỆU SƠ LƯỢC VỀ LCD LÝ_070642D_07DD2D +/ Trrong những g năm gần đây LCD đang ngày càng đượcc sử dụng rộng rãi hay thế dần th đèn L Led. +/ Te ext LCD là các loại m màn hình tin nh thể lỏng g nhỏ dùng g để hiển thị các òng chữ hoặc số trong bảng mã dò ã ASCII. Kh hông giống g các loại L LCD lớn, T Text LCD ược chia sẵn thành từng ô và ứn đư ng với mỗi ô chỉ có thể hiển thị một ký tự ASCII. Cũng vì lý d do chỉ hiện thị được kký tự ASCIII nên loại LCD này đ được gọi là à Text LCD (để ph hân biệt với LCD có thể hiển thị h hình ảnh). Mỗi ô của Text LCD baao gồm các c “chấm” tinh thể lỏn vn ệc kết ợp “ẩn” và “hiện” các chấm n này sẽ tạo 29 htttp://www.eebook.edu.v 1 2 VSS 3 4 5 6 VD D VEE RS RW 6 7 8 9 RW E D0 D1 10 11 12 13 D 2 D3 D4 D 5 13 14 15 16 5 D6 D7 A K K ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D thành một ký tự cần hiển thị. Trong các Text LCD, các mẫu ký tự được định nghĩa sẵn. Kích thước của Text LCD được định nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Ví dụ LCD 16x2 là loại có 2 dòng và mỗi dòng có thể hiển thị tối đa 16 ký tự. Một số kích thước Text LCD thông thường gồm 16x1, 16x2, 16x4, 20x2, 20x4… R Mô tả các chân, loại 16 chân. +/ VDD (chân 2): cấp nguồn dương 5v +/ VSS (chân 1): cấp nguồn âm(GND) +/ VEE (chân 3): điều khiển độ tương phản của LCD ( contrast), chân này cần được nối với 1 biến trở 10k để chia áp. Trong khi hoạt động, chỉnh để thay đổi giá trị biến trở để đạt được độ tương phản cần thiết, sau đó giữ mức biến trở này. Các chân điều khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp với vi điều khiển. Tùy theo chế độ hoạt động 4 bit hay 8 bit mà các chân từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển +/ Trong một số LCD, 2 chân LED nền được đánh số 15 và 16 nhưng trong một số trường hợp 2 chân này được ghi là A (Anode) và K (Cathode), gọi là 2 chân nguồn cho “đèn LED nền”. +/ Chân chọn thanh ghi RS( chân 4_Register Select) Có hai thanh ghi rất quan trọng trong LCD, 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, 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 và nếu RS=1 thanh ghi DR được chọn, 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ú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ả: 30 ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D - Tha  anh ghi IR : Để điều k  khiển LCD  D, người dù  ùng phải “rra lệnh” thô  ông qua ám đường b tá bus DB0-D DB7. Mỗi lệnh được n nhà sản xuất LCD đánnh địa chỉ rõ ràng. N ười dùng g chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào th hanh ghi IR R. Nghĩa à, khi ta nạp là h ghi IR m ột chuỗi 8 bit, chíp H HD44780 ssẽ tra bảng mã lệnh tại địa chỉ m mà IR cung cấp và thực hiện lệnh đó. V ệnh “ “hiển thị m màn hình” ccó địa chỉ lệnh là 00001100 (DB B7…DB0) Lệnh “hiển tthị màn hìn nh và con ttrỏ” có mã lệnh là 00001110 - Tha anh ghi DR : Thanh g ghi DR dùn ng để chứa dữ liệu 8 b bit để ghi v vào vùng R AM hoặc C CGRAM (ở chế độ gh hi) hoặc dù ùng để chứa dữ liệu từ 2 vùng R ởi ra cho M MPU (ở chế độ đọc). Nghĩa là, k khi MPU g ghi thông tiin vào DR, mạch nội bê ên trong ch híp sẽ tự độ ng ghi thông tin này vào DDRA AM hoặc C CGRAM. H ặc khi thô ông tin về địa chỉ đượ ợc ghi vào IR, dữ liệu ở địa chỉ này trong vùng R ội của HD4478 80 sẽ được chuyển ra DR để tru uyền cho M MPU. Bằng cách điều kh ển chân R RS và R/W W chúng ta có thể chu uyển qua lại giữ 2 than nh ghi này y khi giao tiếp. Xem bảng thiết lập đối với h M +// Chân đọc/ghi R/W (chân 5) hai chân R RS và R/W theo mục đích giao tiếp với C ựa chọn giữa việc đọc và gghi. Nếu R R/W=0 thì d ữ liệu sẽ đ được ghi từ bộ điều kh ển ngoài (vi điều kh ển AVR chẳng hạn D. Nếu R/W W=1 thì dữ liệu sẽ ược đọc từ LCD ra nggoài. Tuy nnhiên, chỉ c đư có duy nhất 1 trường hợp mà dữ liệu có thể đọc từ L LCD ra, đó là đọc trạn ng thái LCD D để biết L LCD có đan ng bận hay y không (cờ Busy Fla ag - BF). D Do LCD là một thiết bị hoạt độn ương đối chậm (so với vi  31 vn htttp://www.eebook.edu.v ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D đ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. Tóm tắt bảng chức năng sau: 0 0 1 1 RS R/W 0 1 0 1 Khi cần Ghi vào thanh ghi IR để ra lệnh cho LCD (VD: cần display clear,…) Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6 Ghi vào thanh ghi DR Đọc dữ liệu từ DR +/ Chân cho phép E (chân 6_Enable) 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, nói cách khác chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên 32 ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D 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à 450ns. +/ 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 R Cờ báo bận BF: (Busy Flag) Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế, 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 để báo cho MPU biết nó đang “bận”. Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0. R Bộ đếm địa chỉ AC : (Address Counter) Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM (DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC. Bộ đếm này lại nối với 2 vùng RAM theo kiểu rẽ nhánh. 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 nhưng 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ị và nội dung của AC được xuất ra cho MPU thông qua DB0-DB6 khi có thiết lập RS=0 và R/W=1 (xem bảng tóm tắt RS - R/W). 33 ĐỒ ÁN 1  TRẦN NGỌC L LÝ_070642D_07DD2D Lưu ý: Thời gian cập n  nhật AC kh  hông được  hời gian thhực thi lệnh  h mà được cập nhật sauu khi cờ BF F lên mức ccao (not bu usy), cho nên khi lập trình hiển thị, bạn phải delay m ột khoảng g tADD kh hoảng 4uS-5uS (ngay sau khi BF F=1) trước ạp dữ liệu mới.. Xem thêm m hình Giản đồ xung cập nhật A AC. Tóm tắt cácc lệnh có thể ghi vào  o LCD Danh sáách lệnh trê ên được tô 2 màu khá ác nhau, cá ác lệnh màuu đỏ sẽ đượ ợc dùng thường xuyêên trong lú úc hiển thị L LCD và cá ác lệnh màu u xanh thườ ng chỉ đư ược dùng 1 lần trong lúc c khởi động g LCD, riêêng lệnh Re ead BF có thể được ddùng hoặc k không tùy heo cách viiết chương trình wait_ th _LCD. Phần tiếp theo o giải thíchh ý nghĩa của các lệnh và tham m số kèm th . heo chúng. +// Trước kh LCD : hi tìm hiểu tập lệnh của LCD, sa au đây là m ột vài chúú ý khi giao o tiếp với * T Tuy trong sơ đồ khối của LCD c có nhiều khối khác nh hau, nhưng g khi lập  R trìình điều kh hiển LCD tta chỉ có thể tác động g trực tiếp đ c vào 22 thanh ghii DR và IR hông qua cáác chân DB th Bx, và ta phải thiết lập chân RS, R/W phù ù hợp để ch huyển qua lại giữ 2 thaanh ghi này y. (xem bản ng giới thiệu 2 thanh ghi này) * Với mỗi lện ần một kho ảng thời gian để hoàn a n tất, thời g gian này ó thể khá lâ có âu đối với tốc độ của M a cần kiểm ờ BF hoặc đợi ((delay) cho o. o LCD thựcc thi xong llệnh hiện hàành mới có ó thể ra lện vn ếp theo  34 htttp://www.eebook.edu.v ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D * Địa chỉ của RAM (AC) sẽ tự động tăng (giảm) 1 đơn vị, mỗi khi có lệnh ghi vào RAM. (Điều này giúp chương trình gọn hơn) * Các lệnh của LCD có thể chia thành 4 nhóm như sau : • Các lệnh về kiểu hiển thị. VD : Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), … • Chỉ định địa chỉ RAM nội. • Nhóm lệnh truyền dữ liệu trong RAM nội. • Các lệnh còn lại . (!!!) Trước hết là nhóm lệnh đỏ: +/ Clear display – 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). Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 0 0 1 Lệnh Clear Display (xóa hiển thị) sẽ ghi một khoảng trống-blank (mã hiển thị kí tự 20H) vào tất cả ô nhớ trong DDRAM, sau đó trả bộ đếm địa AC=0, trả lại kiểu hiện thị gốc nếu nó bị thay đổi. Nghĩa là : Tắt hiển thị, con trỏ dời về góc trái (hàng đầu tiên), chế độ tăng AC +/ Cursor home – đư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 ý). +/ Set DDRAM address (texe(max)=37uS): Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0. DBx = 1 [AD] [AD] [AD] [AD] [AD] [AD] [AD] Lệnh này ghi vào AC địa chỉ của DDRAM, dùng khi cần thiết lập tọa độ hiển thị mong muốn. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ DDRAM tại địa chỉ đã 35 ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D được chỉ định. Khi ở chế độ hiển thị 1 hàng: địa chỉ có thể từ 00H đến 4FH. Khi ở chế độ hiển thị 2 hàng, địa chỉ từ 00h đến 27H cho hàng thứ nhất, và từ 40h đến 67h cho hàng thứ 2. Đị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. +/ Read BF fand address(texe(max)=0uS): Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0. DBx = [BF] [AC] [AC] [AC] [AC] [AC] [AC] [AC] (RS=0, R/W=1). Như đã đề cập trước đây, khi cờ BF bật, LCD đang làm việc và lệnh tiếp theo (nếu có) sẽ bị bỏ qua nếu cờ BF chưa về mức thấp. Cho nên, khi lập trình điều khiển, bạn phải kiểm tra cờ BF trước khi ghi dữ liệu vào LCD. Khi đọc cờ BF, giá trị của AC cũng được xuất ra các bit [AC]. Nó là địa chỉ của CG hay DDRAM là tùy thuộc vào lệnh trước đó. +/ Write to CGRAM or DDRAM(texe(max)=37uS, tadd=4uS) : Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0. DBx = [Write data] (RS=1, R/W=0). Khi thiết lập RS=1, R/W=0, dữ liệu cần ghi được đưa vào các chân DBx từ mạch ngoài sẽ được LCD chuyển vào trong LCD tại địa chỉ được xác định từ lệnh ghi địa chỉ trước đó (lệnh ghi địa chỉ cũng xác định luôn vùng RAM cần ghi). Sau khi ghi, bộ đếm địa chỉ AC tự động tăng/giảm 1 tùy theo thiết lập Entry mode. Lưu ý là thời gian cập nhật AC không tính vào thời gian thực thi lệnh. 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. Kế đến là nhóm lệnh màu xanh: nhóm lệnh này thường chỉ thực hiện 1 lần (ít nhất là trong bài học này) và thường được viết chung trong 1 chương trình con khởi 36 ĐỒ ÁN 1 TRẦN NGỌC LÝ_070642D_07DD2D động LCD (chúng ta gọi là init_LCD trong bài học này). +/ Entry mode set(texe(max)=37uS) : Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0. DBx = 0 0 0 0 0 1 [I/D] [S]. 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 (cách 2 trong ví dụ) + D7:0 = 0x05 (00000101) : hiển thị giảm và shift (cách 4 trong ví dụ) + D7:0 = 0x06 (00000110) : hiển thị t

Các file đính kèm theo tài liệu này:

  • docGiao tiep ban phim hien thi LCD su dung 89C51.doc
  • pdfGiao tiep ban phim hien thi LCD su dung 89C51.pdf
  • docxTIEU DE.docx