intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Dùng 8051 điều khiển chạy chữ trên màn hình LCD

Chia sẻ: Vu Manh Chuan | Ngày: | Loại File: DOC | Số trang:23

1.184
lượt xem
535
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Đầ tài chạy chữ trên màn hình LCD ứng dụng IC 8051. Giới thiệu IC 8051 - Giới thiệu các lấy linh kiện - Mô tả về LCD - Sơ đồ giao tiếp - Chương trình mô phỏng - Chạy mô phòng

Chủ đề:
Lưu

Nội dung Text: Dùng 8051 điều khiển chạy chữ trên màn hình LCD

  1. Dùng 8051 điều khiển chạy chữ trên màn hình LCD Họ và tên: LÊ NGỌC PHÚC     Lớp: CDDT9QN MSSV: 0782743                                                                              BÀI TIỂU LUẬN VI XỬ LÝ          ĐỀ TÀI : Chạy chữ trên màn hinh LCD, ứng dụng IC 8051                                        MỤC LỤC 1. Giới thiệu IC 8051 2. Giới thiệu cách lấy linh kiện 3. Mô tả về LCD 4. Sơ đồ giao tiếp 5. Chương trình mô phỏng 6. Chạy mô phỏng   1. Giới thiệu IC 8051: 1.1Giới thiệu họ MSC­51:     MCS­51 là họ IC vi điều khiển do hãng I ntel sản xuất. Các IC tiêu biểu cho họ là 8051 và 8031.  Các sản phẩm MSC­51 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên Byte và các toán  số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế đọ truy xuất dữ liệu nhanh trên RAM  nội.   AT89C51 cung cấp nhungx đặc tính chuẩn như sau : 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình  nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2 TIMER/COUNTER 16 Bit,  vecto ngắt có cấu trúc  2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và dao động ON­ CHIP. Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số và  hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiện công suất, chế độ chờ (IDLE MODE) sẽ  dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngát tiếp tục hoạt  động. Chế độ giảm công suất sẽ lưu nội dung RAM những sẽ treo bộ dao động làm khả năng hoạt  động của tất cả những chức năng khác cho đến khi Reset hệ thống.  1.2 Sơ đồ khối của AT89C51 :     http://photo.zing.vn/photo/gallery/detail.5387929.html                           1. 3 Sơ đồ chân của AT89C51     http://photo.zing.vn/photo/gallery/detail.5387932.html                       1.4Chức năng các chân của AT89C51 ­89C51cos tất cả 40 chaancos chức năng như các đường xuất nhập. trong đó có 24 chân có tác  dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi dường có thể hoạt động như đường xuất nhập  hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ. a/.Các port: Port 0: Port 0 là port có hai chức năng ở các chân 32­39 của  89C51. trong các thiết kế cỡ nhỏ không dùng  bộ nhớ mở rộng, nó có chức năng như các đường IO. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng,  nó được kết hợp giữa bus địa chỉ và bus dữ liệu. b/.Port 1:
  2. ­port 1 là port IO trên các chân 1­8. các chân được kí hiệu p1.0, p1.1, p1.2, có thể dùng cho giao  tiếp với các thiết bị ngoài nếu cần. port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho  giao tiếp với các thiết bị bên ngoài. c/.Port 2: ­port 2 là 1 port có tác dụng kép trên các chân 21­28 được dùng như các đường xuất nhập hoặc là  byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng. d/.Port 3: Port 3 là port có tác dụng kép trên các chân 10­17. các chân của port này có nhiều chức năng, các  công dụng chuyển đổi có liên hệ với các đặc tính dặt biệt của 89C51 như ở bản sau:     http://photo.zing.vn/photo/gallery/detail.5387937.html      * Các ngõ tín hiệu điều khiển:     Ngõ tín hiệu PSEN: ­ PSEN là tín hiêu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường  được nói đén chân OE của Eprom cho phép đọc các byte mở rộng . ­ PSEN ở mức thấp trong thời gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình  được đọc từ Eprom qua bus dữ liệu  và được chốt từ thanh ghi lệnh bên trong 8951 để giải mã lệnh.  Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.     Ngõ tín hiệu điều khiển ALE(Address latch Enable): ­ Khi 89C51 truy xuất bộ nhớ bên ngoài, port 0 có chức năng là bus địa chỉ và bus dữ liệu do đó  phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển  để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt. ­ Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 dóng vai trò là địa chỉ thấp nên  chốt địa chỉ hoàn toàn tự động. ­ Bộ dao động được tích hợp bên trong 89C51, khi sử dungj89C51 người thiết kế chỉ cần kết nối  thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho 89C51 là  12Mhz. ­ Chân 40 (vcc)được nối lên nguồn.các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động  trên chíp và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. chân ALE được  dùng làm ngõ vào xung lập trình cho Eprom trong 89C51.    Ngõ tín hiệu EA\(External Access): ­ Tín hiệu vào EA\ ở chân 31 thường được mất lên mức 1 hoặc mức 0. nếu ở mức 1, 89C51 thi hành  chương trình từ ROM nội trong khoảng địa chỉ thấp 8KB. Nếu ở mức 0, 89c51 sẽ thi hành chương  trình từ bộ nhớ mở rộng. chân EA\ được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong  89c51.    Ngõ tín hiệu RST (Reset): ­ Ngõ vào RST ở chân 9 là ngõ vào reset của 89C51. khi ngõ vào tín hiệu này đưa lên cao ít nhất là  2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. khi  cấp điện mạch tự động Reset.     Các ngõ vào bộ dao động X1, X2:nguồn 5V . 2.Giới thiệu cách lấy linh kiện  • Bước 1: Click vào biểu tượng trên thanh công cụ,     http://photo.zing.vn/photo/gallery/detail.5387719.html tiếp theo click vào chữ P,ta sẽ thấy một bảng sau:   http://photo.zing.vn/photo/gallery/detail.5387725.html Pick Device/Symbol  từ Menu lệnh hoặc chọn  Library 
  3.    http://photo.zing.vn/photo/gallery/detail.5387729.html     Hoặc ta có thể bấm phím P trên bàn phím. • Bước 2:  Chọn linh kiện 80C51 như sau:     http://photo.zing.vn/photo/gallery/detail.5387733.html               Nhấp đúp vào dòng chữ 80C51, ta sẽ thấy:     http://photo.zing.vn/photo/gallery/detail.5387741.html                             Sau đó nhấp vào chữ 80C51, ta được:     http://photo.zing.vn/photo/gallery/detail.5387745.html                  Sau đó, chúng ta nhấp chột trái vào vùng đặt linh kiện thì chip 80C51 sẽ hiện ra:      http://photo.zing.vn/photo/gallery/detail.5387745.html                             Tương tự cho tụ điện, thạch anh, LCD… Ta nhấn phím P trên bàn phím, sau đó, gõ vào keywords từ capacitor, crystal, LCD…         http://photo.zing.vn/photo/gallery/detail.5387767.html Ta chọn LCD 14 chân:    http://photo.zing.vn/photo/gallery/detail.5387776.html   • Bước 3: Ta chọn nguồn và mass bằng cách: Click vào biểu tượng:   trên thanh công cụ,    http://photo.zing.vn/photo/gallery/detail.5387782.html   Thì hộp thoại sau xuất hiện:   http://photo.zing.vn/photo/gallery/detail.5387792.html         Ta sẽ chọn nguồn khi click vào Power, mass khi click vào Ground. Đến đây ta sẽ có:      http://photo.zing.vn/photo/gallery/detail.5387798.html    ­Nếu chúng ta muốn xoay linh kiện thì ta nhấn vào biểu tượng:      thì các linh kiện sẽ xoay theo ý  muốn của ta.  3.   Mô tả về LCD Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần các đèn Led. Mô tả các chân, loại 14 chân. ­VCC: cấp nguồn dương ­VSS: cấp nguồn âm ­VEE: điều khiển độ tương phản của LCD ­Chân chọn thanh ghi RS( Register Select)
  4. Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi này như sau:  Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như  xóa màn hình, đưa con trỏ về đầu dòng…Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người  dùng gửi dữ liệu cần hiển thị trên LCD. ­Chân đọc/ghi (R/W) Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông tin từ nó khi R/ W=1 ­Chân cho phép E (Enable) Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ  liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này  để LCD chốt dữ liệu trên các chân dữ liệu. Xung này phải rộng tối thiểu là 450 ns. ­Chân D0~D7: Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung của các thanh  ghi trong LCD. Để hiển thị các chữ  cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a  đến f và các con số từ 0~9 đến các chân này khi bật RS=1 Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu  dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để xem LCD có  sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và RS=0 như sau: Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận  bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra  cờ bận trước khi ghi bất khì dữ liệu nào lên LCD  http://photo.zing.vn/photo/gallery/detail.5387811.html
  5. Chân Kí hiệu I/O Mô tả 1 VSS - Đất 2 VCC - Dương 5V 3 VEE - Cấp nguồn điều khiển phản 4 RS I RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu. 5 R/W I R/W=1 đọc dữ liệu. R/W=0 ghi 6 E I/O Cho phép 7 DB0 I/O Các bit dữ liệu 8 DB1 I/O Các bit dữ liệu 9 DB2 I/O Các bit dữ liệu 10 DB3 I/O Các bit dữ liệu 11 DB4 I/O Các bit dữ liệu 12 DB5 I/O Các bit dữ liệu 13 DB6 I/O Các bit dữ liệu 14 DB7 I/O Các bit dữ liệu  Các mã lệnh LCD
  6. Mã Lệnh đến thanh ghi của LCD Hex 1 Xóa màn hình hiển thị 2 Trở về đầu dòng 4 Giảm con trỏ (dịch con trỏ sang trái) 5 Tăng con rỏ (dịch con trỏ sang phải) 6 Dịch hiển thị sang phải 7 Dịch hiển thị sang trái 8 Tắt con trỏ, tắt hiển thị A Tắt hiển thị, bật con trỏ C Bật hiển thị, tắt con trỏ E Bật hiển thị, nhấp nháy con trỏ F Tắt hiển thị, nhấp nháy con trỏ 10 Dịch vị trí con trỏ sang trái 14 Dịch vị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải 80 Ép con trỏ Vũ đầu dòng thứ nhất C0 Ép con trỏ Vũ đầu dòng thứ hai 38 Hai dòng ma trận 4. Sơ đồ giao tiếp         Cách nối dây: Nhấn vào biểu tượng   , tiến hành nối bằng cách nhấp chuột vào chân linh kiện và rê đến chỗ cần  nối. muốn tạo đường bus thì nhấn vào biểu tượng         http://photo.zing.vn/photo/gallery/detail.5387842.html   Sau khi nối hoàn chỉnh bản vẽ sẽ tương tự như sau:       http://photo.zing.vn/photo/gallery/detail.5387852.html   5.Chương trình mô phỏng                               $mod51     ; Chương trình hiển thị LCD
  7.          ; Tần số thạch anh 12MHz    ;Khái báo thanh ghi địa chỉ LCD LCD_CMD_WR equ  0 LCD_DATA_WR equ 1 LCD_BUSY_RD equ 2 LCD_DATA_RD equ 3 ;LCD Commands LCD_CLS  equ 1 LCD_HOME equ 2 LCD_SETMODE equ 4 LCD_SETVISIBLE equ 8 LCD_SHIFT equ 16 LCD_SETFUNCTION equ 32 LCD_SETCGADDR equ 64 LCD_SETDDADDR equ 128     ;Vị trí chương trình nhảy đến khi reset  org 0000h  jmp start    ;nhảy đến chương trình chính      ;Bắt đầu chương trình chính  org 0100h string1a:db ' !!XIN CHAO!! '   db 0 string1b:db '!! XIN CHAO !! '   db 0 string2:db ' tat ca cac ban... '  db 0 string3:db ' Day la tieu luan '  db 0 string4:db '   cua Ngoc Phuc !'  db 0 string5:db 'Em ten la:'  db 0 string6:db '*Le Ngoc Phuc*'  db 0 string7:db '*Ma So Sinh Vien*'  db 0 string8: db '  0782743  '  db 0 string9: db ' Lop 5CDCQDT09'  db 0 string10: db 'Truong Cong Nghiep'  db 0 string11: db 'TP Ho Chi Minh.' db 0 string12: db 'Em chan thanh'  db 0 string13: db 'cam on thay:'
  8.  db 0 string14: db '*TranNguyenBaoTran*'  db 0 string15: db 'da giup do em'  db 0 string16: db 'thuc hien tieu'  db 0 string17: db 'luan nay!!'  db 0 string18: db 'Cam on cac ban da'  db 0 string19: db 'quan tam theo doi'  db 0 string20: db '  $THE_END$ '  db 0 string22: db 'De tai: Chay chu ',0 string23: db 'Tren man hinh LCD'   db 0 string24: db ' ung dung IC 8051'   db 0 string25: db 'mo phong bang'  db 0 string26: db 'phan mem Proteus  '   db 0      start: mov A,#038h       ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit    call wrcmd     ;gọi chương trình con gửi lệnh  loop: mov A,#LCD_SETVISIBLE+6  ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:             call wrcmd    ;gọi chương trình con gửi lệnh   mov R7,#2   ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp  loop2:   mov DPTR,#string1a    ;Đưa dòng chữ 1a vào con trỏ đại chỉ   call wrstr  ;gọi chương trình con xuất dòng chữ tới LCD     mov DPTR,#200        &nb sp;  ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi 200 mS    call wtms                         ;Gọi chương trình con đợi 200mS    mov A,#LCD_CLS   ;Xóa màn hình LCD  mov DPTR,#string1b  call wrstr   mov DPTR,#200   call wtms  mov A,#LCD_CLS   ; Xóa màn hình LCD 
  9.  call wrcmd  djnz R7,loop2                                       ;  lặp lại 2 lần  mov DPTR,#string1a  call wrstr   mov DPTR,#400   call wtms  mov A,#LCD_SETDDADDR+64        ; ; Đưa giá trị lệnh 40H vào A   call wrcmd  mov DPTR,#string2  call wrslow   mov DPTR,#200   call wtms  mov A,#LCD_CLS                          ;Clear screen     mov A,#LCD_SETDDADDR+64        ;   ;Đưa giá trị lệnh 40H vào A  call wrcmd  mov A,#LCD_CLS  ;Clear screen  call wrcmd  mov DPTR,#string3  call wrslow         mov A,#LCD_SETDDADDR+64    ;Đưa giá trị lệnh 0FH vào A   call wrcmd  mov DPTR,#string4  call wrslow  mov A,#LCD_CLS  mov A,#LCD_SETDDADDR+64  call wrcmd  mov A,#LCD_CLS  call wrcmd  mov DPTR,#string5  call wrslow  mov A,#LCD_SETDDADDR+64  call wrcmd  mov DPTR,#string6  call wrslow  mov A,#LCD_CLS  mov A,#LCD_SETDDADDR+64  call wrcmd  mov A,#LCD_CLS  call wrcmd  mov DPTR,#string7  call wrslow  mov A,#LCD_SETDDADDR+64
  10.   call wrcmd  mov DPTR,#string8  call wrslow  mov A,#LCD_CLS  mov A,LCD_SETDDADDR+64  call wrcmd  mov A,#LCD_CLS  call wrcmd  mov DPTR,#string9  lcall delay1  mov DPTR,#string10  lcall delay1  mov DPTR,#string11  lcall delay1  mov DPTR,#string22  lcall delay1  mov DPTR,#string23  lcall delaylc  mov DPTR,#string24  lcall delay1  mov DPTR,#string25  lcall delaylc  mov DPTR,#string26  acall delay1  mov DPTR,#string12  lcall delay1  mov DPTR,#string13  lcall delaylc  mov DPTR,#string14  lcall delay1  mov DPTR,#string15  lcall delaylc  mov DPTR,#string16  lcall delay1  mov DPTR,#string17  lcall delaylc  mov DPTR,#string18  lcall delay1  mov DPTR,#string19  lcall delaylc  mov R7,#20 loop1:   mov DPTR,#string20  call wrstr   mov DPTR,#1000   call wtms  mov A,#LCD_CLS   ;Clearscreen  call rcmd  mov DPTR,#string20  call wrstr
  11.   mov DPTR,#1000   call wtms  mov A,#LCD_CLS   ;Clear screen  call wrcmd  djnz R7,loop1  mov DPTR,#string20  call wrstr   mov DPTR,#400   call wtms  mov A,#LCD_SETDDADDR+64  call wrcmd ;*******************************************    mov A,#LCD_SETVISIBLE+7;Show theblink cursor as well.  call wrcmd   mov DPTR,#2000   call wtms  mov A,#LCD_CLS   ;Clear screen  call wrcmd  jmp loop     ;Chương trình con viết chuỗi ký tự trong DPTR          wrstr: mov R0,#LCD_DATA_WR wrstr1: clr A  movc A,@A+DPTR  jz wrstr2  movx @R0,A  call wtbusy  inc DPTR  push DPL  push DPH  pop DPH  pop DPL   jmp wrstr1 wrstr2: ret    ;Chương trình con viết chuỗi ký tự trong DPTR theo từng ký tự nhảy ra wrslow: mov R0,#LCD_DATA_WR wrslw1: clr A  movc A,@A+DPTR  jz wrslw2  movx @R0,A  call wtbusy  inc DPTR  push DPL  push DPH
  12.         mov DPTR,#100         call wtms  pop DPH  pop DPL   jmp wrslw1 wrslw2: ret    ;chương trình con gởi một lệnh trong thanh chứa A ra LCD: wrcmd: mov R0,#LCD_CMD_WR       &nbs p; ;đưa địa chỉ WR lệnh vào R0    movx @R0,A                      ;xuất lệnh nằm trong thanh chứa A ra LCD    jmp wtbusy                        ;Kiểm tra LCD bận  ;chương trình con ghi một ký tự lên LCD: wrchar: mov R0,#LCD_DATA_WR       ; đưa địa chỉ WR dữ liệu vào R0   movx @R0,A                          ;xuất ký tự nằm trong thanh chứa A ra LCD   ;Chương trình con đợi LCD hết bận wtbusy: mov R1,#LCD_BUSY_RD  movx A,@r1  jb ACC.7,wtbusy  ret ;Chương trình con đợi tổng số giây có trong thanh chúa A  wtsec: push ACC  call wtms  pop ACC   dec A  jnz wtsec  ret    ;Chương trình con đợi tổng số mS có trong con trỏ DPTR  wtms:   xrl DPL,#0FFh   ;không thể sử dụng lệnh DEC DPTR, do đó vòng lặp sử dụng 2 lớp lặp tăng  xrl DPH,#0FFh   ;and incrementing instead.  inc DPTR wtms1: mov TL0,#low(­1200)  ;100 xung = 1ms ở tần số thạch anh 1.2MHz  mov TH0,#high(­1200)   mov TMOD,#1   ;Timer 0 mode 1  setb TCON.4   ;Timer 0 runs wtms2: jnb TCON.5,wtms2   clr TCON.4   ;Timer 0 stops  clr TCON.5  inc DPTR  mov A,DPL  orl A,DPH  jnz wtms1  ret delaylc:
  13.  call wrslow         mov A,#LCD_SETDDADDR+64   call wrcmd  ret delay1:    call wrslow  mov A,#LCD_CLS  mov A,#LCD_SETDDADDR+64  call wrcmd  mov A,#LCD_CLS  call wrcmd ret     END 6. Chạy mô phỏng:             http://photo.zing.vn/photo/gallery/detail.5345279.html         http://photo.zing.vn/photo/gallery/detail.5345378.html         http://photo.zing.vn/photo/gallery/detail.5345333.html         http://photo.zing.vn/photo/gallery/detail.5345320.html         http://photo.zing.vn/photo/gallery/detail.5345290.html         http://photo.zing.vn/photo/gallery/detail.5345346.html            http://photo.zing.vn/photo/gallery/detail.5345362.html          http://photo.zing.vn/photo/gallery/detail.5345304.html                                                                                                              phuc_1076116 Hiện đã có 2 ý kiến thảo luận về bài viết này. Mời bạn cùng trao đổi! Về đầu trang In bài viết Thảo luận về bài viết  Gửi qua email phuc_1076116                                                      MỤC LỤC 1.Giới thiệu cách lấy linh kiện……………………….trang 2 2.Mô tả về LCD………………………………………trang6 3.Sơ đồ giao tiếp……………………………………..trang 9
  14. 4.Chương trình mô phỏng……………………………trang 10 5.Chạy mô phỏng…………………………………….trang 17   1.Giới thiệu cách lấy linh kiện  • Bước 1: Click vào biểu tượng trên thanh công cụ,   tiếp theo click vào chữ P,ta sẽ thấy một bảng sau:   Pick Device/Symbol  từ Menu lệnh hoặc chọn  Library                Hoặc ta có thể bấm phím P trên bàn phím. • Bước 2:  Chọn linh kiện 80C51 như sau:               Nhấp đúp vào dòng chữ 80C51, ta sẽ thấy:                              Sau đó nhấp vào chữ 80C51, ta được:                  Sau đó, chúng ta nhấp chột trái vào vùng đặt linh kiện thì chip 80C51 sẽ hiện ra:                              Tương tự cho tụ điện, thạch anh, LCD… Ta nhấn phím P trên bàn phím, sau đó, gõ vào keywords từ capacitor, crystal, LCD…               Ta chọn LCD 14 chân:   • Bước 3: Ta chọn nguồn và mass bằng cách: Click vào biểu tượng:   trên thanh công cụ,   Thì hộp thoại sau xuất hiện:         Ta sẽ chọn nguồn khi click vào Power, mass khi click vào Ground. Đến đây ta sẽ có:    ­Nếu chúng ta muốn xoay linh kiện thì ta nhấn vào biểu tượng:      thì các linh kiện sẽ  xoay theo ý muốn của ta.
  15.  2.   Mô tả về LCD Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần  các đèn Led. Mô tả các chân, loại 14 chân. ­VCC: cấp nguồn dương ­VSS: cấp nguồn âm ­VEE: điều khiển độ tương phản của LCD ­Chân chọn thanh ghi RS( Register Select) Có hai thanh ghi rất quan trọng trong LCD, chân RS được dùng để chọn thanh ghi  này như sau: Nếu RS =0 thì thanh ghi mà lệnh được chọn để cho phép người dùng  gửi một lệnh chẳng hạn như xóa màn hình, đưa con trỏ về đầu dòng…Nếu RS=1 thì  thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD. ­Chân đọc/ghi (R/W) Đầu đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W=0 hoặc đọc thông  tin từ nó khi R/W=1 ­Chân cho phép E (Enable) Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu  của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống thấp  phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung này phải  rộng tối thiểu là 450 ns. ­Chân D0~D7: Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội dung  của các thanh ghi trong LCD. Để hiển thị các chữ  cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ  A đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1 Cũng như các mã lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con  trỏ về vị trí đầu dòng hoặc nhấp nháy con trỏ.Chúng ta cũng sử dụng RS=0 để kiểm  tra bit cờ bận để xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được  đọc khi R/W=1 và RS=0 như sau: Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc bên trong và  sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận thông tin mới.  Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD     Chân  Kí hiệu I/O Mô tả 1 VSS ­ Đất 2 VCC ­ Dương 5V 3 VEE ­ Cấp nguồn điều khiển  phản 4 RS I RS=0 chon thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu. 5 R/W I R/W=1 đọc dữ liệu. R/W=0 ghi 6 E I/O Cho phép 7 DB0 I/O Các bit dữ liệu 8 DB1 I/O Các bit dữ liệu 9 DB2 I/O Các bit dữ liệu 10 DB3 I/O Các bit dữ liệu 11 DB4 I/O Các bit dữ liệu 12 DB5 I/O Các bit dữ liệu 13 DB6 I/O Các bit dữ liệu
  16. 14 DB7 I/O Các bit dữ liệu  Các mã lệnh LCD Mã Hex Lệnh đến thanh ghi của LCD 1 Xóa màn hình hiển thị 2 Trở về đầu dòng 4 Giảm con trỏ (dịch con trỏ sang trái) 5 Tăng con rỏ (dịch con trỏ sang phải) 6 Dịch hiển thị sang phải 7 Dịch hiển thị sang trái 8 Tắt con trỏ, tắt hiển thị A Tắt hiển thị, bật con trỏ C Bật hiển thị, tắt con trỏ E Bật hiển thị, nhấp nháy con trỏ F Tắt hiển thị, nhấp nháy con trỏ 10 Dịch vị trí con trỏ sang trái 14 Dịch vị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải 80 Ép con trỏ Vũ đầu dòng thứ nhất C0 Ép con trỏ Vũ đầu dòng thứ hai 38 Hai dòng ma trận  3. Sơ đồ giao tiếp         Cách nối dây: Nhấn vào biểu tượng   , tiến hành nối bằng cách nhấp chuột vào chân linh kiện và rê  đến chỗ cần nối. muốn tạo đường bus thì nhấn vào biểu tượng      Sau khi nối hoàn chỉnh bản vẽ sẽ tương tự như sau:                                 4.Chương trình mô phỏng $mod51     ; Chương trình hiển thị LCD          ; Tần số thạch anh 12MHz    ;Khái báo thanh ghi địa chỉ LCD LCD_CMD_WR equ  0 LCD_DATA_WR equ 1 LCD_BUSY_RD equ 2 LCD_DATA_RD equ 3 ;LCD Commands LCD_CLS  equ 1 LCD_HOME equ 2 LCD_SETMODE equ 4 LCD_SETVISIBLE equ 8 LCD_SHIFT equ 16 LCD_SETFUNCTION equ 32 LCD_SETCGADDR equ 64 LCD_SETDDADDR equ 128
  17.     ;Vị trí chương trình nhảy đến khi reset  org 0000h  jmp start    ;nhảy đến chương trình chính      ;Bắt đầu chương trình chính  org 0100h string1a:db ' !!XIN CHAO!! '   db 0 string1b:db '!! XIN CHAO !! '   db 0 string2:db ' tat ca cac ban... '  db 0 string3:db ' Day la tieu luan '  db 0 string4:db '   cua Ngoc Phuc !'  db 0 string5:db 'Em ten la:'  db 0 string6:db '*Le Ngoc Phuc*'  db 0 string7:db '*Ma So Sinh Vien*'  db 0 string8: db '  0782743  '  db 0 string9: db ' Lop 5CDCQDT09'  db 0 string10: db 'Truong Cong Nghiep'  db 0 string11: db 'TP Ho Chi Minh.' db 0 string12: db 'Em chan thanh'  db 0 string13: db 'cam on thay:'  db 0 string14: db '*TranNguyenBaoTran*'  db 0 string15: db 'da giup do em'  db 0 string16: db 'thuc hien tieu'  db 0 string17: db 'luan nay!!'  db 0 string18: db 'Cam on cac ban da'  db 0 string19: db 'quan tam theo doi'  db 0 string20: db '  $THE_END$ '  db 0 string22: db 'De tai: Chay chu ',0 string23: db 'Tren man hinh LCD'
  18.   db 0 string24: db ' ung dung IC 8051'   db 0 string25: db 'mo phong bang'  db 0 string26: db 'phan mem Proteus  '   db 0      start: mov A,#038h       ;Gửi lệnh 038h đến LCD thông báo LCD sử dụng BUS 8bit    call wrcmd     ;gọi chương trình con gửi lệnh  loop: mov A,#LCD_SETVISIBLE+6  ;gửi lệnh 0Eh vào LCD để LCD được kích hoạt:             call wrcmd    ;gọi chương trình con gửi lệnh   mov R7,#2   ;Đưa 2 vào R7 để thực hiện 2 lần vòng lặp  loop2:   mov DPTR,#string1a    ;Đưa dòng chữ 1a vào con trỏ đại chỉ   call wrstr  ;gọi chương trình con xuất dòng chữ tới LCD     mov DPTR,#200        &nb sp;  ;đưa 200 vào con trỏ địa chỉ để thực hiện việc đợi  200 mS    call wtms                        ;Gọi chương trình con đợi 200mS    mov A,#LCD_CLS   ;Xóa màn hình LCD  mov DPTR,#string1b  call wrstr   mov DPTR,#200   call wtms  mov A,#LCD_CLS   ; Xóa màn hình LCD   call wrcmd  djnz R7,loop2                                         ;  lặp lại 2 lần  mov DPTR,#string1a  call wrstr   mov DPTR,#400   call wtms  mov A,#LCD_SETDDADDR+64        ; ; Đưa giá trị lệnh 40H vào A   call wrcmd  mov DPTR,#string2  call wrslow   mov DPTR,#200
  19.   call wtms  mov A,#LCD_CLS                           ;Clear screen     mov A,#LCD_SETDDADDR+64        ;   ;Đưa giá trị lệnh 40H vào A  call wrcmd  mov A,#LCD_CLS  ;Clear screen  call wrcmd  mov DPTR,#string3  call wrslow         mov A,#LCD_SETDDADDR+64    ;Đưa giá trị lệnh 0FH vào A   call wrcmd  mov DPTR,#string4  call wrslow  mov A,#LCD_CLS  mov A,#LCD_SETDDADDR+64  call wrcmd  mov A,#LCD_CLS  call wrcmd  mov DPTR,#string5  call wrslow  mov A,#LCD_SETDDADDR+64  call wrcmd  mov DPTR,#string6  call wrslow  mov A,#LCD_CLS  mov A,#LCD_SETDDADDR+64  call wrcmd  mov A,#LCD_CLS  call wrcmd  mov DPTR,#string7  call wrslow  mov A,#LCD_SETDDADDR+64   call wrcmd  mov DPTR,#string8  call wrslow  mov A,#LCD_CLS  mov A,LCD_SETDDADDR+64  call wrcmd  mov A,#LCD_CLS  call wrcmd  mov DPTR,#string9  lcall delay1  mov DPTR,#string10  lcall delay1  mov DPTR,#string11  lcall delay1  mov DPTR,#string22
  20.  lcall delay1  mov DPTR,#string23  lcall delaylc  mov DPTR,#string24  lcall delay1  mov DPTR,#string25  lcall delaylc  mov DPTR,#string26  acall delay1  mov DPTR,#string12  lcall delay1  mov DPTR,#string13  lcall delaylc  mov DPTR,#string14  lcall delay1  mov DPTR,#string15  lcall delaylc  mov DPTR,#string16  lcall delay1  mov DPTR,#string17  lcall delaylc  mov DPTR,#string18  lcall delay1  mov DPTR,#string19  lcall delaylc  mov R7,#20 loop1:   mov DPTR,#string20  call wrstr   mov DPTR,#1000   call wtms  mov A,#LCD_CLS   ;Clearscreen  call rcmd  mov DPTR,#string20  call wrstr   mov DPTR,#1000   call wtms  mov A,#LCD_CLS   ;Clear screen  call wrcmd  djnz R7,loop1  mov DPTR,#string20  call wrstr   mov DPTR,#400   call wtms  mov A,#LCD_SETDDADDR+64  call wrcmd
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2