Giáo trình Vi điều khiển

 Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại. Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 15. o Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành. 3.8.6. Bài tập thực hành. 3.8.6.1. Bài tập mẫu.

pdf270 trang | Chia sẻ: huongthu9 | Lượt xem: 389 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Giáo trình Vi điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
HI PUSH 00H PUSH 01H MOV R0,#00H ;VI TRI CUA DU LIEU COT DAU TIEN TRONG VUNG MA MOV R1,#01H ;MA QUET COT DAU TIEN SCAN: MOV A,R0 MOVC A,@A+DPTR ;LAY MA HIEN THI TRONG VUNG MA THEO VI TRI MOV P2,A ;XUAT MA HIEN THI RA HANG MOV P1,R1 ;XUAT MA QUET RA COT LCALL DELAYLED MOV P1,#00H ;CHONG LEM INC R0 ;LAY DU LIEU KE TIEP MOV A,R1 ;DICH MA QUET - MA QUET CHO COT KE TIEP RL A MOV R1,A 234 CJNE R0,#08H,SCAN ;KIEM TRA QUET XONG CAC COT (MA TRAN GOM 8 COT) POP 01H ;PHUC HOI GIA TRI CHO CAC THANH GHI POP 00H POP ACC RET ;*************************************************** DELAYLED: ;CHUONG TRINH CON TAO THOI GIAN TRE 2.5MS PUSH 00H PUSH 01H MOV R1,#5 DEL: MOV R0,#250 DJNZ R0,$ DJNZ R1,DEL POP 01H POP 00H RET ;*************************************************** CODEDISP: DB 81H,7FH,87H,7FH,81H,0FFH ;CHU W DB 01H,6DH,6DH,6DH,7DH,0FFH ;CHU E DB 01H,7FH,7FH,7FH,7FH,0FFH ;CHU L DB 83H,7DH,7DH,7DH,0BBH,0FFH ;CHU C DB 83H,7DH,7DH,7DH,83H,0FFH ;CHU O DB 01H,0FBH,0F7H,0FBH,01H,0FFH ;CHU M DB 01H,6DH,6DH,6DH,7DH,0FFH ;CHU E END 3.6.6.2. Bài tập ứng dụng.  Bài 1: Hãy viết chương trình điều khiển hiển thị chữ M màu đỏ trên LED ma trận (COL-RED được nối với Port1, ROW được nối với Port2).  Bài 2: Hãy viết chương trình điều khiển hiển thị liên tục chữ A sáng màu đỏ, sau đó là màu xanh và cuối cùng là màu vàng trên LED ma trận (COL-RED được nối với Port 1, COL-GRE được nối với Port2, ROW được nối với Port3).  Bài 3: Hãy viết chương trình điều khiển hiển thị số đếm BCD từ 0 lên 9 màu đỏ trên LED ma trận (COL-RED được nối với Port1, ROW được nối với Port2).  Bài 4: Hãy viết chương trình điều khiển hiển thị số đếm BCD từ 0 đến 9 trên LED ma trận (COL-GRE được nối với Port1, ROW được nối với 235 Port2). Với điều kiện màu của các số sẽ thay đổi liên tục ĐỎ – XANH – VÀNG mỗi khi con số trên LED ma trận thay đổi.  Bài 5: Hãy viết chương trình điều khiển hiển thị các ký tự từ A đến Z trên LED ma trận (COL-GRE được nối với Port1, ROW được nối với Port2). Với điều kiện màu của các ký tự sẽ thay đổi liên tục ĐỎ – XANH – VÀNG sau mỗi một giây đồng hồ.  Bài 6: Hãy viết chương trình điều khiển hiển thị chuỗi ký tự “TRUONG DAI HOC CONG NGHIEP TP HO CHI MINH – KHOA DIEN TU” màu đỏ dịch chuyển từ phải sang trái trên LED ma trận (COL-RED được nối với Port1, ROW được nối với Port2). 3.7. Điều khiển và giao tiếp với LCD. Mục đích:  Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào vi điều khiển và sử dụng mô hình thí nghiệm để kiểm chứng.  Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển.  Khảo sát nguyên lý hoạt động và nguyên lý điều khiển LCD.  Điều khiển để hiển thị các thông tin trên màn hình tinh thể lỏng LCD (chuẩn công nghiệp, loại 2 hàng x 16 ký tự). Yêu cầu:  Nắm vững tập lệnh của vi điều khiển MCS-51.  Biết cách viết các chương trình điều khiển LCD.  Nắm được sơ đồ và nguyên lý hoạt động của khối LCD trên mô hình thí nghiệm.  Nắm được nguyên lý và kỹ thuật điều khiển để hiển thị các thông tin trên LCD.  Biết cách viết các chương trình ứng dụng để hiển thị các dạng thông tin khác nhau trên LCD tùy theo nhu cầu sử dụng. 3.7.1. Sơ đồ nguyên lý. 3.7.1.1. Sơ đồ nguyên lý. 236 D4 D7 D1 D6 D2 D0 D5 D3 CONTRAST RS ENA LCD 16 Characters x 2 Lines U4 YM1602C G N D 1 V C C 2 V E E 3 R S 4 R /W 5 E 6 D 0 7 D 1 8 D 2 9 D 3 1 0 D 4 1 1 D 5 1 2 D 6 1 3 D 7 1 4 L E D + 1 5 L E D - 1 6 R13 10K R/W J15 POWER 1 2 3 J16 DATA LCD 1 2 3 4 5 6 7 8 J17 CTRL LCD 1 2 3 VCC VCC VCC C9 104 VCC GND +5V GND R14 10 Hình 3.7.1: Sơ đồ nguyên lý khối LCD. 3.7.1.2. Sơ đồ bố trí linh kiện. Hình 3.7.2: Khối LCD. BÀI THỰC HÀNH Viết chương trình, mô phỏng và lắp ráp mạch điều khiển LCD hiển thị hai dòng chữ “MICRO-CONTROLLER” và “DESIGNED BY: PQT.” đứng yên trên hai dòng của màn hình LCD 3.7.2. Lưu đồ giải thuật.  Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển. 237 Hình 3.7.3: Lưu đồ giải thuật của chương trình. 3.7.3. Chương trình điều khiển. 238 Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình.  Bước 2: Khởi động phần mềm Topview Simulation.  Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình là: E1.ASM  Bước 4: Viết chương trình điều khiển dưới đây vào máy tính. ;*************************************************** ;CHUONG TRINH DIEU KHIEN LCD HIEN THI 2 DONG CHU DUNG YEN ;*************************************************** ;RS -> P0.0, RW -> P0.1, E -> P0.2 ;DATA BUS -> PORT 1 ;*************************************************** EN BIT P0.2 RW BIT P0.1 RS BIT P0.0 DATABUS EQU P1 ;*************************************************** ORG 00H MAIN: ACALL LCDINIT ;KHOI TAO LCD MP1: ACALL DISP_FLINE ;HIEN THI DONG 1 ACALL DISP_SLINE ;HIEN THI DONG 2 SJMP $ ;*************************************************** LCDINIT: ;CTC KHOI TAO LCD CLR RS ;RS = 0 - GUI LENH CLR RW ;RW = 0 - WRITE LCD MODE SETB EN ;E = 1 - ENABLE MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-4100) MOV TL0,#LOW(-4100) ACALL DELAY ;DELAY 4.1MS MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-100) MOV TL0,#LOW(-100) ACALL DELAY ;DELAY 100US 239 MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#01H ;CODE = 01H - XOA LCD ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD RET ;*************************************************** SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD CLR RS ;RS = 0 - GUI LENH SJMP PULSE_EN SENDDATA: SETB RS ;RS = 1 - GUI DU LIEU NOP PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD CLR RW ;RW = 0 - WRITE LCD MODE CLR EN ;EN = 0 NOP SETB EN ;EN = 1 - XUNG ENABLE NOP ;KIEM TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN ;*********************************************************** ** ;MOV TH0,#HIGH(-2000) ;LENH NAY DUOC THAY THE CHO DOAN MA KIEM TRA DUOI DAY KHI ;MOV TL0,#LOW(-2000) ;CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW ;ACALL DELAY ;*********************************************************** ** MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP SETB RW ;RW = 1 - READ LCD MODE CLR RS ;RS = 0 - GUI LENH CLR EN ;EN = 0 NOP 240 SETB EN ;EN = 1 - XUNG ENABLE NOP BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN MOV A,DATABUS ;DOC DU LIEU TU LCD JB ACC.7,BUSY ;KIEM TRA CO BUSY BUSY2: ;KIEM TRA CO BAO BAN (BUSY FLAG) LAN THU HAI MOV A,DATABUS ;DOC DU LIEU TU LCD JB ACC.7,BUSY2 ;KIEM TRA CO BUSY LAN 2 CLR RW ;RW = 0 - WRITE LCD MODE (THOAT CHE DO READ, TRO VE CHE DO WRITE) ;*********************************************************** ** RET ;*************************************************** DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H MOV A,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU 241 CJNE A,#99H,WRITE_CONT ;KIEM TRA LAY HET DU LIEU TRONG VUNG DU LIEU - KET THUC LA 99H RET WRITE_CONT: ;KHONG PHAI LA DU LIEU KET THUC - CHUA LAY HET DU LIEU MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD ACALL SENDDATA ;GUI DU LIEU RA LCD INC DPTR ;CHUYEN SANG DU LIEU KE TIEP SJMP WRITE ;QUAY TRO VE DE GUI DU LIEU KE TIEP ;*************************************************** DELAY: MOV TMOD,#01H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ;*************************************************** FLINE_DATA: ;DU LIEU HIEN THI DONG 1 DB 'MICRO-CONTROLLER' DB 99H ;MA KET THUC DONG (TU CHON) SLINE_DATA: ;DU LIEU HIEN THI DONG 2 DB 'DESIGNEDBY:PQT' DB 99H ;MA KET THUC DONG (TU CHON) END  Bước 5: Lưu chương trình trên vào máy tính.  Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5. o Nếu không có lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin mã máy với tên là: E1.HEX và thực hiện tiếp theo các phần nội dung dưới đây. 3.7.4. Mô phỏng hoạt động. Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng quá trình hoạt động của hệ thống vi điều khiển. 242  Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10).  Bước 8: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển LCD như Hình 3.7.4 dưới đây. AD7 AD0 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 AD6 AD5 AD4 AD3 AD2 AD1 D0 D 7 A D 2 A D 0 A D 1 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D1 D2 D3 D4 D5 D6 D7 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1 AT89C51 C1 33p C2 33p X1 12MHz C3 10uF R1 10k +5V 2 3 4 5 6 7 8 9 1 RP1 10K + 5 V MA ÏCH Ñ I EÀU K HI EÅN LCD D 7 14 D 6 13 D 5 12 D 4 11 D 3 10 D 2 9 D 1 8 D 0 7 E 6 R W 5 R S 4 V S S 1 V D D 2 V E E 3 LCD1 ALPHANUMERIC LCD 16 CHAR x 2 LINE Hình 3.7.4: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển.  Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập tin là: E1,2,4.DSN. Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học.  Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 6) cho hệ thống vi điều khiển: E1.HEX  Bước 10: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do giải thuật chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc Bước 8 (do mạch mô phỏng vẽ không chính xác). 243 o Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây. 3.7.5. Lắp mạch và nạp chương trình điều khiển. Sử dụng các khối "Microcontroller Unit Slot", "LCD", và "Power Supply" có sẵn trên mô hình thực hành vi điều khiển để lắp ráp mạch theo thiết kế bên trên.  Bước 11: Kết nối các khối trên mô hình như Hình 3.7.5 để tạo thành hệ thống mạch điều khiển như bên trên. o Tắt nguồn AC cấp cho mô hình thực hành. o Dùng dây bus 3 nối J63 (PORT0 / DATA) ở khối vi điều khiển với J47 (CTRL LCD) ở khối LCD (chú ý là ta chỉ nối 3 bit thấp của J63 và J47 với nhau). o Dùng dây bus 8 nối J64 (PORT1) ở khối vi điều khiển với J46 (DATA / CODE LCD) ở khối LCD. o Dùng dây bus 3 nối J104 (POWER) ở khối LCD với nguồn +5V ở khối nguồn. Hình 3.7.5: Sơ đồ kết nối mạch trên mô hình. Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi điều khiển P89V51RB2 trên mô hình thực hành.  Bước 12: Bật nguồn AC cấp cho mô hình thực hành.  Bước 13: Khởi động phần mềm Flash Magic.  Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng COM, tốc độ truyền, chuẩn giao tiếp,...) 244  Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã được tạo ra từ Bước 6): E1.HEX  Bước 16: Nạp chương trình vào vi điều khiển.  Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại. Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 15. o Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành. 3.7.6. Bài tập thực hành. 3.7.6.1. Bài tập mẫu.  Bài tập số 1: Nội dung: "Chương trình điều khiển LCD hiển thị hai dòng chữ “WELLCOME TO MICROCONTROLLER SYSTEM – 51” và “DESIGNED BY: PQT.” trên hai dòng của màn hình LCD với yêu cầu: dòng chữ thứ nhất sẽ dịch chuyển liên tục từ phải sang trái, dòng chữ thứ hai đứng yên" Lưu đồ giải thuật: 245 Chương trình điều khiển: ;*************************************************** ;CHUONG TRINH DIEU KHIEN LCD HIEN THI DONG CHU 1 DICH CHUYEN, DONG CHU 2 DUNG YEN ;*************************************************** ;RS -> P0.0, RW -> P0.1, E -> P0.2 ;DATA BUS -> PORT 1 ;*************************************************** EN BIT P0.2 RW BIT P0.1 RS BIT P0.0 DATABUS EQU P1 ;*************************************************** ORG 00H MAIN: ACALL LCDINIT ;KHOI TAO LCD ACALL DISP_SLINE ;HIEN THI DONG 2 MP1: ;XU LY DICH CHUYEN DU LIEU HIEN THI CHO DONG 1 246 MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD SHIFT: ACALL DISP_FLINE ;HIEN THI DONG 1 MOV R1,#50 ;DELAY 500MS DEL500: MOV TH0,#HIGH(-10000) MOV TL0,#LOW(-10000) ACALL DELAY DJNZ R1,DEL500 ;THOI GIAN DUNG YEN CUA MOT TRANG THAI MAN HINH LCD INC DPTR ;TANG GIA TRI DPTR DE DICH CHUYEN DONG CHU MOV A,DPL ;KIEM TRA DA DICH XONG DONG CHU RA MAN HINH LCD CJNE A,#LOW(FLINE_DATA+55),SHIFT MOV A,DPH CJNE A,#HIGH(FLINE_DATA+55),SHIFT SJMP MP1 ;*************************************************** LCDINIT: ;CTC KHOI TAO LCD CLR RS ;RS = 0 - GUI LENH CLR RW ;RW = 0 - WRITE LCD MODE SETB EN ;E = 1 - ENABLE MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-4100) MOV TL0,#LOW(-4100) ACALL DELAY ;DELAY 4.1MS MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-100) MOV TL0,#LOW(-100) ACALL DELAY ;DELAY 100US MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#01H ;CODE = 01H - XOA LCD ACALL SENDCOMMAND ;GUI LENH RA LCD 247 MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD RET ;*************************************************** SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD CLR RS ;RS = 0 - GUI LENH SJMP PULSE_EN SENDDATA: SETB RS ;RS = 1 - GUI DU LIEU NOP PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD CLR RW ;RW = 0 - WRITE LCD MODE CLR EN ;EN = 0 NOP SETB EN ;EN = 1 - XUNG ENABLE NOP ;KIEM TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN ;*********************************************************** ** ;MOV TH0,#HIGH(-1000) ;LENH NAY DUOC THAY THE CHO DOAN MA KIEM TRA DUOI DAY KHI ;MOV TL0,#LOW(-1000) ;CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW ;ACALL DELAY ;*********************************************************** ** MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP SETB RW ;RW = 1 - READ LCD MODE CLR RS ;RS = 0 - GUI LENH CLR EN ;EN = 0 NOP SETB EN ;EN = 1 - XUNG ENABLE NOP BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN MOV A,DATABUS ;DOC DU LIEU TU LCD JB ACC.7,BUSY ;KIEM TRA CO BUSY BUSY2: ;KIEM TRA CO BAO BAN (BUSY FLAG) LAN THU HAI MOV A,DATABUS ;DOC DU LIEU TU LCD 248 JB ACC.7,BUSY2 ;KIEM TRA CO BUSY LAN 2 CLR RW ;RW = 0 - WRITE LCD MODE (THOAT CHE DO READ, TRO VE CHE DO WRITE) ;*********************************************************** ** RET ;*************************************************** DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H ACALL SENDCOMMAND ;GUI LENH RA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H MOV R0,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR WR1: MOV A,R0 ;NAP OFFSET MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD ACALL SENDDATA ;GUI DU LIEU RA LCD INC R0 ;CHUYEN SANG DU LIEU KE TIEP CJNE R0,#16,WR1 ;KIEM TRA NAP DAY DU DU LIEU CHO MOT DONG MAN HINH - 16 CHU RET ;*************************************************** DELAY: 249 MOV TMOD,#01H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ;*************************************************** FLINE_DATA: ;DU LIEU HIEN THI DONG 1 DB '' DB 'WELLCOMETOMICROCONTROLLERSYSTEM-51' DB '' SLINE_DATA: ;DU LIEU HIEN THI DONG 2 DB 'DESIGNEDBY:PQT' END  Bài tập số 2: Nội dung: "Chương trình điều khiển LCD hiển thị hai dòng chữ “PULSE = ” và “DESIGNED BY PHAM QUANG TRI – ELECTRIC TRAINING CENTER - HO CHI MINH UNIVERSITY OF INDUSTRY” trên hai dòng của màn hình LCD với yêu cầu: số lượng xung đếm được (00 – 99) tại chân P3.0 sẽ được hiển thị trên dòng thứ nhất tiếp phía sau dòng chữ “PULSE =”, dòng chữ thứ hai sẽ dịch chuyển từ phải sang trái. Xung được tạo ra bằng cách nhấn nút nhấn KEY0" Lưu đồ giải thuật: 250 Chương trình điều khiển: ;*************************************************** ;CHUONG TRINH DIEU KHIEN LCD HIEN THI DONG CHU 1 HIEN THI XUNG, DONG CHU 2 DICH CHUYEN ;*************************************************** ;RS -> P0.0, RW -> P0.1, E -> P0.2 ;DATA BUS -> PORT 1 ;MOMENTARY SW -> PORT 3 (P3.0 -> ACT = 0) ;*************************************************** EN BIT P0.2 RW BIT P0.1 RS BIT P0.0 DATABUS EQU P1 ;*************************************************** ORG 00H MAIN: ACALL LCDINIT ;KHOI TAO LCD ACALL DISP_FLINE ;HIEN THI DONG 1 MOV R7,#0 ;SO XUNG BAN DAU MP1: MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD SHIFT: 251 ACALL DISP_SLINE ;HIEN THI DONG 2 ACALL DISP_PULSE ;HIEN THI SO XUNG JB P3.0,DEL500 ;TIEP TUC CHUONG TRINH KHI KHONG NHAN NUT NHAN JNB P3.0,$ ;CHO NHA NUT NHAN MOV A,R7 ;TANG GIA TRI KHI CO NHAN NUT NHAN ADD A,#1 DA A MOV R7,A MOV R1,#100 ;DELAY 500MS DEL500: MOV TH0,#HIGH(-5000) MOV TL0,#LOW(-5000) ACALL DELAY DJNZ R1,DEL500 ;THOI GIAN DUNG YEN CUA MOT TRANG THAI MAN HINH LCD INC DPTR ;TANG GIA TRI DPTR DE DICH CHUYEN DONG CHU MOV A,DPL ;KIEM TRA DA DICH XONG DONG CHU RA MAN HINH LCD CJNE A,#LOW(SLINE_DATA+106),SHIFT MOV A,DPH CJNE A,#HIGH(SLINE_DATA+106),SHIFT SJMP MP1 ;*************************************************** LCDINIT: ;CTC KHOI TAO LCD CLR RS ;RS = 0 - GUI LENH CLR RW ;RW = 0 - WRITE LCD MODE SETB EN ;E = 1 - ENABLE MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-4100) MOV TL0,#LOW(-4100) ACALL DELAY ;DELAY 4.1MS MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-100) MOV TL0,#LOW(-100) ACALL DELAY ;DELAY 100US MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 252 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#01H ;CODE = 01H - XOA LCD ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD RET ;*************************************************** SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD CLR RS ;RS = 0 - GUI LENH SJMP PULSE_EN SENDDATA: SETB RS ;RS = 1 - GUI DU LIEU NOP PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD CLR RW ;RW = 0 - WRITE LCD MODE CLR EN ;EN = 0 NOP SETB EN ;EN = 1 - XUNG ENABLE NOP ;KIEM TRA CO BAO BAN (BUSY FLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN ;*********************************************************** ** ;MOV TH0,#HIGH(-1000) ;LENH NAY DUOC THAY THE CHO DOAN MA KIEM TRA DUOI DAY KHI ;MOV TL0,#LOW(-1000) ;CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW ;ACALL DELAY ;*********************************************************** ** MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP SETB RW ;RW = 1 - READ LCD MODE CLR RS ;RS = 0 - GUI LENH CLR EN ;EN = 0 NOP SETB EN ;EN = 1 - XUNG ENABLE NOP 253 BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN MOV A,DATABUS ;DOC DU LIEU TU LCD JB ACC.7,BUSY ;KIEM TRA CO BUSY BUSY2: ;KIEM TRA CO BAO BAN (BUSY FLAG) LAN THU HAI MOV A,DATABUS ;DOC DU LIEU TU LCD JB ACC.7,BUSY2 ;KIEM TRA CO BUSY LAN 2 CLR RW ;RW = 0 - WRITE LCD MODE (THOAT CHE DO READ, TRO VE CHE DO WRITE) ;*********************************************************** ** RET ;*************************************************** DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H ACALL SENDCOMMAND ;GUI LENH RA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** DISP_PULSE: ;CTC HIEN THI SO XUNG TAI CHAN P3.0 MOV DATABUS,#88H ;CODE = 88H - DAT DDRAM DIA CHI HIEN THI SO XUNG - 08H ACALL SENDCOMMAND ;GUI LENH RA LCD ACALL BCDTOASCII ;GOI CHUONG TRINH GIAI MA BCD SANG ASCII MOV DATABUS,7FH ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD (HANG CHUC) ACALL SENDDATA MOV DATABUS,7EH ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD (HANG DON VI) 254 ACALL SENDDATA RET ;*************************************************** BCDTOASCII: ;CTC CHUYEN DOI TU SO BCD CHUA TRONG R7 (00 - 99) SANG MA ASCII (2 MA) MOV A,R7 ;LAY GIA TRI BCD (R7) CAN CHUYEN DOI ANL A,#0FH ;GIU LAI 4 BIT THAP (HANG DON VI) ADD A,#30H ;DOI SANG ASCII (ASCII = BCD + 30H) MOV 7EH,A ;CAT SO ASCII VAO VUNG NHO HANG DON VI MOV A,R7 ;LAY GIA TRI BCD (R7) CAN CHUYEN DOI ANL A,#0F0H ;GIU LAI 4 BIT CAO (HANG CHUC) SWAP A ADD A,#30H ;DOI SANG ASCII (ASCII = BCD + 30H) MOV 7FH,A ;CAT SO ASCII VAO VUNG NHO HANG CHUC RET ;*************************************************** WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H MOV R0,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR WR1: MOV A,R0 ;NAP OFFSET MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD ACALL SENDDATA ;GUI DU LIEU RA LCD INC R0 ;CHUYEN SANG DU LIEU KE TIEP CJNE R0,#16,WR1 ;KIEM TRA NAP DAY DU DU LIEU CHO MOT DONG MAN HINH - 16 CHU RET ;*************************************************** DELAY: ;CTC DELAY CO KET HOP KIEM TRA NUT NHAN P3.0 MOV TMOD,#01H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ;*************************************************** FLINE_DATA: ;DU LIEU HIEN THI DONG 1 DB 'PULSE=' 255 SLINE_DATA: ;DU LIEU HIEN THI DONG 2 DB '' DB 'DESIGNEDBYPHAMQUANGTRI' DB '-ELECTRICTRAININGCENTER-' DB 'HOCHIMINHUNIVERSITYOFINDUSTRY' DB '' END  Bài tập số 3: Nội dung: "Chương trình điều khiển LCD hiển thị dòng chữ “> KHOA DIEN TU <” và 8 ký tự người dùng tạo ra (ký tự không được thiết kế sẵn trên LCD) trên hai dòng của màn hình LCD" Lưu đồ giải thuật: Chương trình điều khiển: ;*************************************************** ;CHUONG TRINH DIEU KHIEN LCD HIEN THI 2 DONG CHU DUNG YEN ;DONG THU NHAT HIEN THI "> KHOA DIEN TU <" 256 ;DONG THU HAI HIEN THI CAC KY TU DO NGUOI SU DUNG TAO RA (8 KY TU) ;*************************************************** ;RS -> P0.0, RW -> P0.1, E -> P0.2 ;DATA BUS -> PORT 1 ;*************************************************** EN BIT P0.2 RW BIT P0.1 RS BIT P0.0 DATABUS EQU P1 ;*************************************************** ORG00H MAIN: ACALL LCDINIT ;KHOI TAO LCD ACALL CGRAM ;DINH NGHIA (THIET KE) CAC KIEU KY TU NGUOI DUNG ACALL DISP_FLINE ;HIEN THI DONG 1 ACALL DISP_SLINE ;HIEN THI DONG 2 SJMP $ ;*************************************************** LCDINIT: ;CTC KHOI TAO LCD CLR RS ;RS = 0 - GUI LENH CLR RW ;RW = 0 - WRITE LCD MODE SETB EN ;E = 1 - ENABLE MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-4100) MOV TL0,#LOW(-4100) ACALL DELAY ;DELAY 4.1MS MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV TH0,#HIGH(-100) MOV TL0,#LOW(-100) ACALL DELAY ;DELAY 100US MOV DATABUS,#38H ;CODE = 38H - 8 BIT, 16 CHAR/LINE, MATRIX 5x7 ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#0CH ;CODE = 0CH - CHO PHEP LCD HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DATABUS,#01H ;CODE = 01H - XOA LCD ACALL SENDCOMMAND ;GUI LENH RA LCD 257 MOV DATABUS,#06H ;CODE = 06H - TU TANG DIA CHI HIEN THI, TAT DICH CHUYEN HIEN THI ACALL SENDCOMMAND ;GUI LENH RA LCD RET ;*************************************************** SENDCOMMAND: ;CTC GUI LENH (SENDCOMMAND) VA GUI DU LIEU (SENDDATA) RA LCD CLR RS ;RS = 0 - GUI LENH SJMP PULSE_EN SENDDATA: SETB RS ;RS = 1 - GUI DU LIEU NOP PULSE_EN: ;TAO XUNG ENABLE DE CHUYEN THONG TIN (COMMAND/DATA) VAO LCD CLR RW ;RW = 0 - WRITE LCD MODE CLR EN ;EN = 0 NOP SETB EN ;EN = 1 - XUNG ENABLE NOP ;KIEM TRA CO BAO BAN (BUSYFLAG) DE DAM BAO HOAN TAT VIEC LCD GHI NHAN THONG TIN GUI DEN ;*********************************************************** ** ;MOV TH0,#HIGH(-1000) ;DOAN LENH NAY DUOC THAY THE CHO DOAN LENH KIEM TRA DUOI DAY ;MOV TL0,#LOW(-1000) ;KHI CHAY CHUONG TRINH NAY TRONG PHAN MEM MO PHONG TOPVIEW ;ACALL DELAY ;*********************************************************** ** MOV DATABUS,#0FFH ;CAU HINH PORT 1 CHO CHE DO PORT NHAP SETB RW ;RW = 1 - READ LCD MODE CLR RS ;RS = 0 - GUI LENH CLR EN ;EN = 0 NOP SETB EN ;EN = 1 - XUNG ENABLE NOP BUSY: ;BUSY = 0 -> HOAN TAT, BUSY = 1 -> DANG THUC HIEN MOV A,DATABUS ;DOC DU LIEU TU LCD JB ACC.7,BUSY ;KIEM TRA CO BUSY BUSY2: ;KIEM TRA CO BAO BAN (BUSYFLAG) LAN THU HAI MOV A,DATABUS ;DOC DU LIEU TU LCD 258 JB ACC.7,BUSY2 ;KIEM TRA CO BUSYLAN 2 CLR RW ;RW = 0 - WRITE LCD MODE ;*********************************************************** ** RET ;*************************************************** CGRAM: ;CTC DAT DIA CHI BAT DAU CUA BO NHO CGRAM (VUNG NHO CHUA CAC KY TU DO NGUOI SU DUNG TAO RA). MOV DATABUS,#40H ;CODE = 40H - DAT CGRAM CO DIA CHI BAT DAU LA 00H ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DPTR,#CGRAM_DATA ;NAP DIA CHI VUNG DU LIEU CUA CAC KY TU DO NGUOI DUNG THIET KE RA. ACALLWRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** DISP_FLINE: ;CTC DAT DIA CHI BAT DAU DONG 1 VA NAP DU LIEU DONG 1 VAO DDRAM MOV DATABUS,#80H ;CODE = 80H - DAT DDRAM DIA CHI BAT DAU CUA DONG 1 - 00H ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DPTR,#FLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 1 CUA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** DISP_SLINE: ;CTC DAT DIA CHI BAT DAU DONG 2 VA NAP DU LIEU DONG 2 VAO DDRAM MOV DATABUS,#0C0H ;CODE = C0H - DAT DDRAM DIA CHI BAT DAU CUA DONG 2 - 40H ACALL SENDCOMMAND ;GUI LENH RA LCD MOV DPTR,#SLINE_DATA ;NAP DIA CHI VUNG DU LIEU DONG 2 CUA LCD ACALL WRITE ;GUI VUNG DU LIEU SANG LCD RET ;*************************************************** WRITE: ;CTC GUI DU LIEU SANG LCD, KET THUC GUI DU LIEU KHI DU LIEU GUI DI LA 99H MOV A,#0 ;OFFSET DAU TIEN TRONG VUNG DU LIEU CUA DPTR MOVC A,@A+DPTR ;LAY DU LIEU TU VUNG DU LIEU 259 CJNE A,#99H,WRITE_CONT ;KIEM TRA LAY HET DU LIEU TRONG VUNG DU LIEU - 99H RET WRITE_CONT: ;KHONG PHAI LA DU LIEU KET THUC - CHUA LAY HET DU LIEU MOV DATABUS,A ;CHUYEN DU LIEU CAN GUI RA PORT DEN LCD ACALL SENDDATA ;GUI DU LIEU RA LCD INC DPTR ;CHUYEN SANG DU LIEU KE TIEP SJMP WRITE ;QUAY TRO VE DE GUI DU LIEU KE TIEP ;*************************************************** DELAY: MOV TMOD,#01H SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 RET ;*************************************************** FLINE_DATA: ;DU LIEU HIEN THI DONG 1 DB'>KHOADIENTU<' DB99H ;MA KET THUC DONG (TU CHON) SLINE_DATA: ;DU LIEU HIEN THI DONG 2 DB00H,01H,02H,03H,04H,05H,06H,07H DB99H ;MA KET THUC DONG (TU CHON) CGRAM_DATA: ;DU LIEU HIEN THI CAC KY TU DAC BIET (DO NGUOI SU DUNG TU QUI DINH) FONT1: DB0AH,15H,11H,11H,0AH,04H,00H,00H ;HINH TRAI TIM XUOI. FONT2: DB04H,0AH,11H,11H,15H,0AH,00H,00H ;HINH TRAI TIM NGUOC. FONT3: DB04H,0EH,15H,04H,04H,04H,04H,00H ;HINH MUI TEN HUONG LEN. FONT4: DB04H,04H,04H,04H,15H,0EH,04H,00H ;HINH MUI TEN HUONG XUONG. FONT5: DB18H,18H,1FH,1FH,1FH,18H,18H,00H ;HINH CHU T NAM NGANG. FONT6: DB1FH,1FH,03H,03H,03H,1FH,1FH,00H ;HINH CHU U NAM NGANG. 260 FONT7: DB0AH,15H,0AH,15H,0AH,15H,0AH,00H ;HINH CARO 1. FONT8: DB15H,0AH,15H,0AH,15H,0AH,15H,00H ;HINH CARÒ 2. DB99H ;MA KET THUC (TU CHON) END 3.7.6.2. Bài tập ứng dụng.  Bài 1: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “KHOA CONG NGHE” và “DIEN TU” đứng yên trên hai dòng của màn hình LCD.  Bài 2: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “KHOA CONG NGHE DIEN TU – BO MON DIEN TU CONG NGHIEP” và “DH CONG NGHIEP” trên hai dòng của màn hình LCD với yêu cầu: dòng chữ thứ nhất dịch chuyển liên tục từ phải sang trái, dòng chữ thứ hai đứng yên.  Bài 3: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “TRUONG DAI HOC CONG NGHIEP THANH PHO HO CHI MINH” và “KHOA CONG NGHE DIEN TU – BO MON DIEN TU CONG NGHIEP” trên hai dòng của màn hình LCD với yêu cầu: hai dòng chữ đồng thời dịch chuyển liên tục từ phải sang trái.  Bài 4: Hãy viết chương trình điều khiển LCD hiển thị một số ký tự đặc biệt như:  trên hai dòng của màn hình LCD.  Bài 5: Hãy viết chương trình điều khiển LCD hiển thị một số ký tự đặc biệt như: á à ả ã ạ â ấ ầ ẩ ẫ ậ ắ ằ ẳ ẵ ặ đ é è ẻ ẽ ẹ ê ế ề ể ễ ệ í ì ỉ ĩ ị ó ò ỏ õ ọ ô ố ồ ổ ỗ ộ ơ ớ ờ ở ỡ ợ ú ù ủ ũ ụ ư ứ ừ ử ữ ự ý ỳ ỷ ỹ ỵ trên hai dòng của màn hình LCD.  Bài 6: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ “HO CHI MINH UNIVERSITY OF INDUSTRY – ELECTRONIC TRAINNING CENTER” và “IN 1 = IN 2 = ” trên hai dòng của màn hình LCD với yêu cầu: dòng chữ thứ nhất sẽ dịch chuyển từ phải sang trái, số lượng xung đếm được tại chân P3.0 (IN 1) và chân P3.1 (IN 2) sẽ được hiển thị trên dòng thứ nhất tiếp phía sau dòng chữ “UP = DOWN= ”. Xung được tạo ra bằng cách nhấn nút nhấn KEY0.  Bài 7: Hãy viết chương trình điều khiển LCD hiển thị hai dòng chữ tiếng Việt có dấu (tự chọn nội dung hiển thị) trên hai dòng của màn hình LCD. 3.8. Điều khiển và giao tiếp với nút nhấn – bàn phím. Mục đích: 261  Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào vi điều khiển và sử dụng mô hình thí nghiệm để kiểm chứng.  Điều khiển thiết bị ngoại vi bằng các port của vi điều khiển.  Điều khiển các thiết bị ngoại vi bằng bàn phím (bàn phím thiết kế theo kiểu ma trận).  Trình bày kỹ thuật quét phím cho dạng bàn phím ma trận 16 phím (4 hàng x 4 cột).  Trình bày một số ứng dụng trong kỹ thuật điều khiển bàn phím. Yêu cầu:  Nắm vững tập lệnh của vi điều khiển MCS-51.  Biết cách viết các chương trình điều khiển bàn phím ma trận.  Nắm được sơ đồ và nguyên lý hoạt động của khối bàn phím ma trận trên mô hình thí nghiệm.  Nắm được nguyên lý và kỹ thuật quét phím cho các dạng bàn phím ma trận.  Biết cách viết các chương trình ứng dụng có sử dụng bàn phím ma trận để điều khiển các thiết bị ngoại vi khác nhau. 3.8.1. Sơ đồ nguyên lý. 3.8.1.1. Sơ đồ nguyên lý. SW43 0 C3 J223 POWER 1 2 3 VCC GND GND +5V C0 R2 R1 C1 R0 C3 C2 R3 R234 10K 1 2 3 4 5 6 7 8 9 VCC R2 R1 R3 C1 C3 R0 C0 C2 R1 R2 C2 C1 R3 C3 C0 R0 SW37 F2 SW45 F4 C2 SW39 8 C1 SW30 1 SW33 F1 C3 C0 C2 SW44 ENTER C0 C1 R2 R3 SW41 F3 R0 R1 R3 J222 KEYPAD 1 2 3 4 5 6 7 8 SW31 2 R2 SW34 4 SW42 ESC R1 R0 SW36 6 SW40 9SW38 7 J224 KEY PAD 1 2 3 4 5 6 7 8 SW32 3 SW35 5 Hình 3.8.1: Sơ đồ nguyên lý khối bàn phím (Keypad). 3.8.1.2. Sơ đồ bố trí linh kiện. 262 Hình 3.8.2: Khối bàn phím (Keypad). BÀI THỰC HÀNH Viết chương trình, mô phỏng và lắp ráp mạch điều khiển bàn phím và hiển thị mã của phím nhấn trên 8 LED dưới dạng số BIN (LED sáng = mức 1, LED tắt = mức 0), không phím nào được nhấn thì mã phím là FFH (KEYPAD được nối với Port0, LED được nối với Port1) 3.8.2. Lưu đồ giải thuật.  Bước 1: Vẽ lưu đồ giải thuật của chương trình điều khiển. 263 Hình 3.8.3: Lưu đồ giải thuật của chương trình. 3.8.3. Chương trình điều khiển. Sử dụng phần mềm Topview Simulation để thực hiện việc viết chương trình và biên dịch, kiểm tra lỗi cú pháp của chương trình.  Bước 2: Khởi động phần mềm Topview Simulation.  Bước 3: Mở chức năng soạn thảo một chương trình mới và đặt tên tập tin chương trình là: D1.ASM  Bước 4: Viết chương trình điều khiển dưới đây vào máy tính. ;*************************************************** ;CHUONG TRINH DIEU KHIEN BAN PHIM MA TRAN 4 X 4. ;*************************************************** ;KET NOI: LED ->PORT1 (CO DEM DAO), KEYPAD ->PORT0. ;*************************************************** ORG 00H MAIN: LCALL SCANKEYPAD ;QUET KEYPAD JC MP1 ;KIEM TRA CO NHAN PHIM (C = 1) MOV A,#0FFH ;KHONG NHAN PHIM A = FFH MP1: ;CO NHAN PHIM A = MA PHIM MOV P1,A ;XUAT MA PHIM RA LED HIEN THI DANG SO BIN LJMP MAIN ;QUAY LAI KIEM TRA KEYPAD TIEP ;*************************************************** SCANKEYPAD: ;CTC QUET BAN PHIM MA TRAN 4 X 4, CO CHONG DOI. PUSH 03H 264 MOV R3,#50 ;SO LAN LAP DE CHONG DOI BACK: ACALL GETKEY ;GOI CTC QUET PHIM JNC NOPRESSED ;C = 0 -> THOAT KHI KHONG CO PHIM NHAN. DJNZ R3,BACK ;C = 1 -> CO PHIM NHAN, GIAM SO LAN LAP DE CHONG DOI NOPRESSED: POP 03H RET ;*************************************************** GETKEY: PUSH 05H PUSH 06H PUSH 07H MOV A,#0EFH ;BAT DAU TAI COT 0 MOV R6,#4 ;R6 LAM BO DEM COT TEST: MOV P0,A ;TICH CUC COT MOV R7,A ;LUU ACC MOV A,P0 ;DOC LAI TU PORT 1 ANL A,#0FH ;CACH LY CAC HANG CJNE A,#0FH,KEYPRESSED ;HANG TICH CUC ? MOV A,R7 ;N -> DI CHUYEN TOI RL A ;COT KE TIEP DJNZ R6,TEST CLR C ;KHONG CO PHIM DUOC NHAN HAY NHAN NHIEU PHIM CUNG LUC SJMP EXIT ;THOAT VOI C = 0 KEYPRESSED: MOV R7,A ;LUU TRONG R7 MOV A,#4 ;CHUAN BI TINH CLR C ;TRONG SO CUA COT SUBB A,R6 ;4 - R6 = TRONG SO MOV R6,A ;LUU TRONG R6 MOV A,R7 ;PHUC HOI MA QUET MOV R5,#4 ;DUNG R5 LAM BO DEM AGAIN: RRC A ;QUAY CHO DEN KHI = 0 JNC DONE ;THUC THI XONG KHI C = 0 INC R6 ;CONG 4 CHO DEN KHI TIM THAY HANG TICH CUC INC R6 INC R6 265 INC R6 DJNZ R5,AGAIN DONE: SETB C ;CO PHIM NHAN -> C = 1 MOV A,R6 ;MA TRONG A EXIT: POP 07H POP 06H POP 05H RET END  Bước 5: Lưu chương trình trên vào máy tính.  Bước 6: Thực hiện biên dịch và kiểm tra lỗi chương trình. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do cú pháp của các lệnh không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5. o Nếu không có lỗi xuất hiện thì phần mềm sẽ tự động tạo tập tin mã máy với tên là: D1.HEX và thực hiện tiếp theo các phần nội dung dưới đây. 3.8.4. Mô phỏng hoạt động. Sử dụng phần mềm ISIS 7 Professional (Protues 7.10) để thực hiện việc mô phỏng quá trình hoạt động của hệ thống vi điều khiển.  Bước 7: Khởi động phần mềm ISIS 7 Professional (Protues 7.10).  Bước 8: Vẽ sơ đồ thiết kế mạch mô phỏng điều khiển bàn phím như Hình 3.8.4 dưới đây. 266 AD7 AD0 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 AD6 AD5 AD4 AD3 AD2 AD1 A D 7 AD0 AD1 AD2 AD3 A D 4 A D 5 A D 6 D 0 D0 D0 D1 D1 D2 D2 D3 D3 D4 D4 D5 D5 D6 D6 D7 D7 D 7 D 6 D 5 D 4 D 3 D 2 D 1 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1 AT89C51 C1 33p C2 33p X1 12MHz C3 10uF R1 10k +5V D1 R2 330 +5V D2 R3 330 +5V D3 R4 330 +5V D4 R5 330 +5V D5 R6 330 +5V D6 R7 330 +5V D7 R8 330 +5V D8 R9 330 +5V 1B 1 2B 2 3B 3 4B 4 5B 5 6B 6 7B 7 8B 8 1C 18 2C 17 3C 16 4C 15 5C 14 6C 13 7C 12 8C 11 COM 10 U2 ULN2803 2 3 4 5 6 7 8 9 1 RP1 10K + 5 V MA ÏCH Ñ I EÀU K HI EÅN BA ØN PHÍ M MA T R A ÄN 4 x 4 2 3 4 5 6 7 8 9 1 RP2 10K 7 8 9 654 2 3 # 1 0* A B C D A B C D 1 2 43 +5V +5V Hình 3.8.4: Sơ đồ nguyên lý mô phỏng hệ thống điều khiển.  Mạch mô phỏng này đã được thiết kế sẵn và lưu trong máy tính với tên tập tin là: D.DSN. Vì thế người học có thể tự vẽ thiết kế mạch mô phỏng hoặc lấy mạch mô phỏng có sẵn trong cơ sở dữ liệu của môn học.  Bước 9: Chọn tập tin chương trình cần mô phỏng (tập tin mã máy đã được tạo ra từ Bước 6) cho hệ thống vi điều khiển: D1.HEX  Bước 10: Thực hiện chạy mô phỏng và quan sát trực tiếp kết quả trên màn hình máy tính. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thông thường do giải thuật chương trình không chính xác hoặc do mạch mô phỏng vẽ không chính xác, cần phải được kiểm tra lại. Sau khi hoàn tất việc hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 5 (do giải thuật chương trình không chính xác) hoặc Bước 8 (do mạch mô phỏng vẽ không chính xác). o Nếu không có lỗi xuất hiện thì thực hiện tiếp theo các phần nội dung dưới đây. 3.8.5. Lắp mạch và nạp chương trình điều khiển. Sử dụng các khối "Microcontroller Unit Slot", "Keypad", "Point LED" và "Power Supply" có sẵn trên mô hình thực hành vi điều khiển để lắp ráp mạch theo thiết kế bên trên. 267  Bước 11: Kết nối các khối trên mô hình như Hình 3.8.5 để tạo thành hệ thống mạch điều khiển như bên trên. o Tắt nguồn AC cấp cho mô hình thực hành. o Dùng dây bus 8 nối J64 (PORT1) ở khối vi điều khiển với J11 (BAR LED 1) ở khối dãy LED. o Dùng dây bus 8 nối J63 (PORT0 / DATA) ở khối vi điều khiển với J15 (KEYBOARD) ở khối phím ma trận. o Dùng dây bus 3 nối J103 (POWER) ở khối dãy LED với nguồn +5V ở khối nguồn. Hình 3.8.5: Sơ đồ kết nối mạch trên mô hình. Sử dụng phần mềm Flash Magic để thực hiện việc nạp chương trình cho vi điều khiển P89V51RB2 trên mô hình thực hành.  Bước 12: Bật nguồn AC cấp cho mô hình thực hành.  Bước 13: Khởi động phần mềm Flash Magic.  Bước 14: Kiểm tra cấu hình phần mềm (loại vi điều khiển, cổng COM, tốc độ truyền, chuẩn giao tiếp,...)  Bước 15: Chọn tập tin chương trình điều khiển (tập tin mã máy đã được tạo ra từ Bước 6): D1.HEX  Bước 16: Nạp chương trình vào vi điều khiển. 268  Bước 17: Nhấn nút "Master Reset" ở khối "Microcontroller Unit Slot" để chạy chương trình và quan sát trực tiếp kết quả trên mô hình thực hành. o Nếu có bất kỳ lỗi nào xuất hiện thì thực hiện việc hiệu chỉnh khắc phục các lỗi này. Nguyên nhân phát sinh lỗi thường do việc lắp ráp phần cứng không chính xác hoặc các linh kiện bị hư hỏng, cần phải được kiểm tra lại. Sau khi hoàn tất việc kiểm tra và hiệu chỉnh sai sót thì quay trở về thực hiện từ Bước 15. o Nếu không có lỗi xuất hiện thì hoàn tất bài thực hành. 3.8.6. Bài tập thực hành. 3.8.6.1. Bài tập mẫu.  Bài tập số 1: Nội dung: "Chương trình điều khiển bàn phím và biểu diễn các kiểu hiển thị trên tám LED thông qua các phím được nhấn (KEYPAD được nối với Port0, LED được nối với Port1): Nhấn phím “F1”: 8 LED sáng tắt 3 lần. Nhấn phím “F2”: 8 LED sáng dần và tắt dần. Nhấn phím “F3”: 8 LED đếm lên nhị phân. Nhấn phím “F4”: 8 LED sáng dồn." Lưu đồ giải thuật: 269 Chương trình điều khiển: ;*************************************************** ;CHUONG TRINH DIEU KHIEN LED HIEN THI CAC KIEU KHAC NHAU KHI ;TA NHANCAC PHIM TREN BAN PHIM MA TRAN 4 X 4. ;*************************************************** ;KET NOI: LED ->PORT1 (CO DEM DAO), KEYPAD ->PORT0. ;*************************************************** ORG 00H MAIN: MOV P1,#00H ;LED TAT LCALL SCANKEYPAD ;QUET KEYPAD CJNE A,#00H,NEXT1 ;KHONG PHAI PHIM F1 -> KIEM TIEP LCALL CHOPTAT ;PHIM F1 DUOC NHAN -> CHAY CHUONG TRINH CON TUONG UNG NEXT1: CJNE A,#04H,NEXT2 ;KHONG PHAI PHIM F2 -> KIEM TIEP 270 LCALL SANGDAN ;PHIM F2 DUOC NHAN -> CHAY CHUONG TRINH CON TUONG UNG NEXT2: CJNE A,#08H,NEXT3 ;KHONG PHAI PHIM F3 -> KIEM TIEP LCALL DEMLEN ;PHIM F3 DUOC NHAN -> CHAY CHUONG TRINH CON TUONG UNG NEXT3: CJNE A,#0CH,NEXT4 ;KHONG PHAI PHIM F4 -> KIEM TIEP LCALL SANGDON ;PHIM F4 DUOC NHAN -> CHAY CHUONG TRINH CON TUONG UNG NEXT4: LJMP MAIN ;QUAY LAI KIEM TRA KEYPAD TIEP ;*************************************************** SCANKEYPAD: ;CTC QUET BAN PHIM MA TRAN 4 X 4, CO CHONG DOI. PUSH 03H MOV R3,#50 ;SO LAN LAP DE CHONG DOI BACK: ACALL GETKEY ;GOI CTC QUET PHIM JNC NOPRESSED ;C = 0 -> THOAT KHI KHONG CO PHIM NHAN. DJNZ R3,BACK ;C = 1 -> CO PHIM NHAN, GIAM SO LAN LAP DE CHONG DOI NOPRESSED: POP 03H RET ;*************************************************** GETKEY: PUSH 05H PUSH 06H PUSH 07H MOV A,#0EFH ;BAT DAU TAI COT 0 MOV R6,#4 ;R6 LAM BO DEM COT TEST: MOV P0,A ;TICH CUC COT MOV R7,A ;LUU ACC MOV A,P0 ;DOC LAI TU PORT 1 ANL A,#0FH ;CACH LY CAC HANG CJNE A,#0FH,KEYPRESSED ;HANG TICH CUC ? MOV A,R7 ;N -> DI CHUYEN TOI RL A ;COT KE TIEP DJNZ R6,TEST CLR C ;KHONG CO PHIM DUOC NHAN HAY NHAN NHIEU PHIM CUNG LUC 271 SJMP EXIT ;THOAT VOI C = 0 KEYPRESSED: MOV R7,A ;LUU TRONG R7 MOV A,#4 ;CHUAN BI TINH CLR C ;TRONG SO CUA COT SUBB A,R6 ;4 - R6 = TRONG SO MOV R6,A ;LUU TRONG R6 MOV A,R7 ;PHUC HOI MA QUET MOV R5,#4 ;DUNG R5 LAM BO DEM AGAIN: RRC A ;QUAY CHO DEN KHI = 0 JNC DONE ;THUC THI XONG KHI C = 0 INC R6 ;CONG 4 CHO DEN KHI TIM THAY HANG TICH CUC INC R6 INC R6 INC R6 DJNZ R5,AGAIN DONE: SETB C ;CO PHIM NHAN -> C = 1 MOV A,R6 ;MA TRONG A EXIT: POP 07H POP 06H POP 05H RET ;*************************************************** CHOPTAT: ;CTC DIEU KHIEN 8 LED SANG TAT MOV P1,#0FFH ;LED SANG LCALLDELAY500MS MOV P1,#00H ;LED TAT LCALL DELAY500MS MOV P1,#0FFH ;LED SANG LCALL DELAY500MS MOV P1,#00H ;LED TAT LCALL DELAY500MS MOV P1,#0FFH ;LED SANG LCALL DELAY500MS MOV P1,#00H ;LED TAT LCALL DELAY500MS RET ;*************************************************** DEMLEN: ;CTC DIEU KHIEN 8 LED DEM LENNHI PHAN PUSH ACC 272 MOV A,#00H ;LED TAT DL: MOV P1,A LCALL DELAY500MS INC A ;TANG NHI PHAN CJNE A,#00H,DL ;KIEM TRA DEM LEN HOAN TAT POP ACC RET ;*************************************************** SANGDAN: ;CTC DIEU KHIEN 8 LED SANG DAN VA TAT DAN PUSH ACC MOV A,#00H ;KHOI DONG GIA TRI BAN DAU SD1: SETB C ;C=1 MOV P1,A ;HIEN THI LCALLDELAY500MS RLC A ;DICH BIT 1 SANG TRAI KEM C, SANG DAN JNC SD1 ;CHUA SANGHET THI LAM TIEP SD2: CLR C ;C=0 MOV P1,A ;HIEN THI LCALLDELAY500MS RLC A ;DICH BIT 1 SANG TRAI KEM C, TAT DAN JC SD2 ;CHUA TAT HET THI LAM TIEP POP ACC RET ;*************************************************** SANGDON: PUSH ACC MOV R0,#08H ;LUU SO LAN DICH BIT MOV R1,#00H ;TRANG THAI LED KHI DONLAN DAU TIEN LAP2: MOV R2,00H MOV R3,#01H LAP1: MOV A,R3 ORL A,R1 MOV P1,A ;HIEN THI LCALL DELAY500MS MOV A,R3 ;DON LED RL A MOV R3,A DJNZ R2,LAP1 ;CHUA DON XONG? QUAY LAI 273 DEC R0 ;GIAM SO LANDON LED SETB C ;THAY DOI TRANG THAI LED CHO LANDON TIEP THEO MOV A,R1 RRC A MOV R1,A CJNE R0,#00H,LAP2 ;CHUA HOAN TAT CHU TRINH? QUAY LẠI POP ACC RET ;*************************************************** DELAY500MS: ;CTC TAO THOI GIAN TRE 500MS PUSH 00H MOV R0,#100 MOV TMOD,#01H DEL1: MOV TH0,#HIGH(-5000) MOV TL0,#LOW(-5000) SETB TR0 JNB TF0,$ CLR TR0 CLR TF0 DJNZ R0,DEL1 POP 00H RET END 3.8.6.2. Bài tập ứng dụng.  Bài 1: Hãy viết chương trình điều khiển và biểu diễn các kiểu hiển thị của chuỗi ký tự “DIEN-TU” trên tám LED 7 đoạn. Tự lựa chọn phương pháp kết nối bàn phím và LED 7 đoạn. o Nhấn phím “ENTER”: hiển thị chuỗi. o Nhấn phím “ESC”: không hiển thị chuỗi. o Nhấn phím “1”: sáng tắt chuỗi liên tục. o Nhấn phím “2”: dịch chuyển chuỗi từ phải sang trái liên tục. o Nhấn phím “3”: dịch chuyển chuỗi từ trái sang phải liên tục.  Bài 2: Hãy viết chương trình điều khiển và biểu diễn các kiểu hiển thị của một số chuỗi ký tự trên tám LED 7 đoạn. Tự lựa chọn phương pháp kết nối bàn phím và LED 7 đoạn. 274 o Nhấn phím “ESC”: không hiển thị chuỗi. o Nhấn phím “1”: hiển thị chuỗi “COCACOLA”. o Nhấn phím “2”: hiển thị chuỗi “PEPSI”. o Nhấn phím “3”: hiển thị chuỗi “FANTA”. o Nhấn phím “4”: hiển thị chuỗi “TRIBECO”. o Nhấn phím “5”: hiển thị chuỗi “NUOCSUOI”.  Bài 3: Hãy viết chương trình điều khiển và biểu diễn các kiểu hiển thị của LED ma trận. Tự lựa chọn phương pháp kết nối bàn phím và LED ma trận. o Nhấn phím “ESC”: không hiển thị. o Nhấn phím “1”: hiển thị đếm BCD từ 0 lên 9 trên LED ma trận. o Nhấn phím “2”: hiển thị đếm BCD từ 9 xuống 0 trên LED ma trận. o Nhấn phím “3”: hiển thị các ký tự từ A đến Z trên LED ma trận. o Nhấn phím “4”: hiển thị các ký tự từ Z đến A trên LED ma trận.  Bài 4: Hãy viết chương trình điều khiển và biểu diễn các kiểu hiển thị của chuỗi ký tự “DAI HOC CONG NGHIEP TP HO CHI MINH” trên LED ma trận. Tự lựa chọn phương pháp kết nối bàn phím và LED ma trận. o Nhấn phím “ESC”: không hiển thị chuỗi. o Nhấn phím “1”: dịch chuyển chuỗi từ phải sang trái liên tục. o Nhấn phím “2”: dịch chuyển chuỗi từ trái sang phải liên tục.

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

  • pdfgiao_trinh_vi_dieu_khien.pdf