Tiểu luận Màn hình quảng cáo ở chế độ văn bản sử dụng màn hình LCD có sử dụng giao tiếp bàn phím

Theo nguyên lý và thiết kế phần cứng của m ạch quảng cáo, chúng ta xẽ xây dựng thu ật toán cho chương trình đi ều khiển để nạp vào vi đi ều khiển AT89C51. Trong sơ đồ nguyên lý, dữ li ệu từ Port 2 sẽ được xuất các chân dữ li ệu tương ứng của LCD Ba chân p3.0,p3.1,p3.4 xẽ được nối v ới ch ân RS,EN,RW của LCD Port 1 có 8 chân được sử dụng để l ối v ới các chân của bàn phím .Như vậy mục đí ch chương trình sẽ là - Đi ều khiển việc nhập dữ li ệu từ bàn phím vào vi đi ều khiển +trước ti ên xác định phím nào được bấm bằng việc cho các hành nối đất v à các cột được nối ở mức cao +sau đó xác định m ã ASCII của phím đựơc ấn và gửi đến vi xử lý - Đi ều khiển để dòng chữ nhập từ bàn phím khi nhấn phím # thì kết thúc nhập và cho dòng chữ nhập từ bàn phím nhấp nháy trên màn hình LCD sau đó cho chữ chạy từ trái qua ph ải

pdf27 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2653 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tiểu luận Màn hình quảng cáo ở chế độ văn bản sử dụng màn hình LCD có sử dụng giao tiếp bàn phím, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Bài tập lớn môn Vi Xử Lý 1 Tiểu luận Màn hình quảng cáo ở chế độ văn bản sử dụng màn hình LCD có sử dụng giao tiếp bàn phím Bài tập lớn môn Vi Xử Lý 2 LỜI NÓI ĐẦU Trong sự phát triển của kỹ thuật điện tử ngày nay việc sử dụng các con vi điều khiển trong các hệ thống điện tử rất phổ biến cả về số lượng các ứng dụng của nó trên nhiều thiết bị điện tử từ dân dụng cho đến chuyên dụng, trong nhiều lĩnh vực như đo lường, điều khiển, v.v nhờ vào nhiều ưu điểm của nó. Cùng với nó là sự phát triển kỹ thuật số với nền tảng là các mạch logic số dựa trên sự kết hợp của các cổng logic cơ bản mà ngày nay đã được tích hợp trong các IC số. Việc sử dụng màn hình LCD để hiển thị thông tin nhằm mục đích thông báo, quảng cáo, tại các nơi công cộng đã được sử dụng rất rộng rãi. Trên cơ sở những kiến thức đã được học trong môn học kỹ thuật vi xử lý và Kỹ thuật số chúng em đã thiết kế một mạch logic số sử dụng vi điều khiển với tên đề tài đầy đủ là: Màn hình quảng cáo ở chế độ văn bản sử dụng màn hình LCD có sử dụng giao tiếp bàn phím với mục đích là tìm hiểu thêm về vi điều khiểnvà lĩnh vực kỹ thuật số, nâng cao kiến thức của mình. Do kiến thức còn hạn hẹp và thời gian thực hiện không được nhiều nên đề tài của chúng em còn rất nhiều sai sót, hạn chế. Mặc dù đã cố gắng phần nào thiết kế và tính toán một cách chi tiết các mạch, các thông số nhưng đôi khi còn mang tính lý thuyết, chưa thực tế. Chúng em mong có sự góp ý và sửa chữa để đề tài này có tính khả thi hơn về cả phương diện kinh tế cũng như kỹ thuật. Hà Nội 4/2006 Nhóm sinh viên thực hiện: HOÀNG NGỌC ANH DƯƠNG THÀNH PHAO NGUYỄN HOÀNG HẢI A NGUYỄN HOÀNG HẢI B NGUYỄN HỮU HẢI Lớp Điện Tử 2-K48 ĐHBKHN PHẦN I:VI ĐIỀU KHIỂN 8051 Bài tập lớn môn Vi Xử Lý 3 Bộ vi điều khiển 8051 là thành viên đầu tiên của họ 8051 Bố trí bên trong của sơ đồ khối 8051. 1.Bên trong 8051. Trong phần này chúng ta nghiên cứu các thanh ghi chính của 8051 và trình bày cách sử dụng với các lệnh đơn giản MOV và ADD. 1.1 Các thanh ghi. Trong CPU các thanh ghi được dùng để lưu cất thông tin tạm thời, những thông tin này có thể là một byte dữ liệu cần được sử lý hoặc là một địa chỉ đến dữ liệu cần được nạp. Phần lớn các thanh ghi của 8051 là các thanh ghi 8 bit. Trong 8051 chỉ có một kiểu dữ liệu: Loại 8 bit, 8 bit của một thanh ghi được trình bày như sau: với MSB là bit có giá trị cao nhất D7 cho đến LSB là bit có giá trị thấp nhất D0. (MSB - Most Sigfican bit và LSB - Leart Significant Bit). Với một kiểu dữ liệu 8 bit thì bất kỳ dữ liệu nào lớn hơn 8 bit đều phải được chia thành các khúc 8 bit trước khi được xử lý. Vì có một số lượng lớn các thanh ghi trong 8051 ta sẽ tập trung vào một số thanh ghi công dụng chung đặc biệt trong các chương kế tiếp. CO U N TER IN PU TS OSC INTERRUP T CONTROL 4 I/O PORTS BUS CONTROL SERIAL PORT EXTERNAL INTERRUPTS CPU ON - CHIP RAM ETC TIMER 0 TIMER 1 ADDRESS/DAT A TXD RXD P P P P D7 D6 D5 D4 D3 D2 D1 D0 Bài tập lớn môn Vi Xử Lý 4 Các thanh ghi được sử dụng rộng rãi nhất của 8051 là A (thanh ghi tích luỹ), B, R0 - R7, DPTR (con trỏ dữ liệu) và PC (bộ đếm chương trình). Tất cả các dữ liệu trên đều là thanh g hi 8 bit trừ DPTR và PC là 16 bit. Thanh ghi tích luỹ A được sử dụng cho tất cả mọi phép toán số học và lô-gíc. 2. Mô tả chân của 8051. Mặc dù các thành viên của họ 8051 (ví dụ 8751, 89C51, DS5000). Tuy nhiên, vì hầu hết các nhà phát triển chính sử dụng chíp đóng vỏ 40 chân với hai hàng chân DIP nên ta chỉ tập chung mô tả phiên bản này. Sơ đồ bố trí chân của 8051. Trên hình là sơ đồ bố trí chân của 8051. Ta thấy rằng trong 40 chân thì có 32 chân dành cho các cổng P0, P1, P2 và P3 với mỗi cổng có 8 chân. Các chân còn lại được dành cho nguồn VCC, đất GND, các chângiao động XTAL1 và XTAL2 tái lập RST cho phép chốt địa chỉ ALE truy cập được địa chỉ ngoài EA , cho phép cất chương trình PSEN . Trong 8 chân này thì 6 chân VCC , GND, XTAL1, XTAL2, RST và EA được các họ P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST P0.0 (AD0) Vcc 1 2 3 5 6 4 7 8 9 11 12 10 13 14 15 17 18 16 19 20 40 39 38 36 35 37 34 33 32 30 29 31 28 27 26 24 23 25 22 21 8051 (8031) P0.1 (AD1) P0.2 (AD2) P0.4 (AD4) P0.5 (AD5) P0.3 (AD3) PSEN P0.6 (AD6) P2.5 (A13) P2.3 (A11) P2.1 (A9) P2.7 (A15) P2.4(A12) P2.6 (A14) P2.0 (AB) P2.2 (A10) (RXD) P3.0 (TXD) P3.1 (NT0) P3.2 (NT1) P3.3 (T0) P3.4 (T1) P3.5 (WR) P3.6 (RD) P3.7 XTAL XTAL1 GND P0.6 (AD6) EA/CP ALE/PRO Bài tập lớn môn Vi Xử Lý 5 8031 và 8051 sử dụng. Hay nói cách khác là chúng phải được nối để cho hệ thống làm việc mà không cần biết bộ vi điều khiển thuộc họ 8051 hay 8031. Còn hai chân khác là PSEN và ALE được sử dụng chủ yếu trong các hệ thống dựa trên 8031. CÁC CHẾ ĐỘ ĐÁNH ĐỊA CHỈ CỦA 8051 Các chế độ đánh địa chỉ khác nhau của bộ vi xử lý được xác định như nó được thiết kế và do vậy người lập trình không thể đánh địa chỉ khác nhau là: 1. tức thời 2. Theo thanh ghi 3. Trực tiếp 4. gián tiếp qua thanh ghi 5. Theo chỉ số 1 Các chế độ đánh địa chỉ tức thời và theo thanh ghi 1.1 Chế độ đánh địa chỉ tức thời Trong chế độ đánh địa chỉ này toán hạng nguồn là một hằng số. Và như tên gọi của nó thì khi một lệnh được hợp dịch toán hạng đi tức thi ngay sau mã lệnh. Lưu ý rằng trước dữ liệu tức thời phải được đặt dấu (#) chế độ đánh địa chỉ này có thể được dùng để nạp thông tin vào bất kỳ thanh ghi nào kể cả thanh ghi con trỏ dữ liệu DPTR. 1.2 chế độ đánh địa chỉ theo thanh ghi: Chế độ đánh địa chỉ theo thanh ghi liên quan đến việc sử dụng các thanh ghi để dữ liệu cần được thao tác các ví dụ về đánh địa chỉ theo thanh ghi như sau: MOV A, RO ; Sao nội dung thanh ghi RO vào thanh ghi A Cũng nên lưu ý rằng các thanh ghi nguồn và đích phải phù hợp về kích thước. Hay nói cách khác, nếu viết “ MOV DPTR, A” sẽ cho một lỗi vì nguồn là thanh ghi 8 bit và đích lại là thanh ghi 16 bit. Xét đoạn mã sau: MOV DPTR, #25F5H Để ý rằng ta có thể chuyển dữ liệu giữa thanh ghi tích luỹ A và thanh ghi Rn (n từ 0 đến 7) nhưng việc chuyển dữ liệu giữa các thanh ghi Rn thì không được phép. Ví dụ, lệnh “MOV R4, R7” là không hợp lệ. 2 Truy cập bộ nhớ sử dụng các chế độ đánh địa chỉ khác nhau. 2.1 Chế độ đánh địa chỉ trực tiếp. Như đã nói ở chương 2 trong 8051 có 128 byte bộ nhớ RAM. Bộ nhớ RAM được gán các địa chỉ từ 00 đến FFH và được phân chia như sau: 1. Các ngăn nhớ từ 00 đến 1FH được gán cho các băng thanh ghi và ngăn xếp. 2. Các ngăn nhớ từ 20H đến 2FH được dành cho không gian đánh địa chỉ theo bit để lưu các dữ liệu 1 bit. 3. Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1byte. Mặc dù toàn bộ byte của bộ nhớ RAM có thể được truy cập bằng chế độ đánh địa chỉ trực tiếp, nhưng chế độ này thường được sử dụng nhất để truy cập các ngăn nhớ RAM từ 30H đến 7FH. Đây là do một thực tế là các ngăn nhớ dành cho băng ghi được truy cập bằng thanh ghi theo các tên gọi của chúng là R0 - R7 còn các ngăn nhớ khác của RAM thì không có tên như vậy. Trong chế độ đánh địa chỉ trực tiếp thì dữ liệu ở trong một ngăn nhớ RAM mà địa chỉ của nó được biết và địa chỉ này được cho như là Bài tập lớn môn Vi Xử Lý 6 một phần của lệnh. Khác với chế độ đánh địa chỉ tức thì mà toán hạng tự nó được cấp với lệnh. Dấu (# 0 là sự phân biệt giữa hai chế độ đánh địa chỉ. *Các thanh ghi có thể đánh địa chỉ theo bit. Xét theo chế độ đánh địa chỉ trực tiếp thì cần phải lưu ý rằng giá trị địa chỉ được giới hạn đến 1byte, 00 - FFH. Điều này có nghĩa là việc sử dụng của chế độ đánh địa chỉ này bị giới hạn bởi việc truy cập các vị trí ngăn nhớ của RAM và các thanh ghi với địa chỉ được cho bên trong 8051. 2.3 Ngăn xếp và chế độ đánh địa chỉ trực tiếp. Một công dụng chính khác của chế độ đánh địa chỉ trực tiếp là ngăn xếp. Trong họ 8051 chỉ có chế độ đánh địa chỉ trực tiếp là được phép đẩy vào ngăn xếp. Do vậy, một lệnh như “PVSH A” là không hợp lệ. Việc đẩy thanh ghi A vào ngăn xếp phải được viết dưới dạng “PVAH 0E0H” với 0E0H là địa chỉ của thanh ghi A. Tương tự như vậy để đẩy thanh ghi R3 rãnh 0 vào ngăn xếp ta phải viết là “PVSH 03”. Chế độ đánh địa chỉ trực tiếp phải được sử dụng cho cả lệnh POP. Vì dụ “POP 04” sẽ kéo đỉnh của ngăn xếp vào thanh ghi R4 rãnh 0. 2.4 chế độ đánh địa chỉ gián tiếp thanh ghi. Trong chế độ này, một thanh ghi được sử dụng như một con trỏ đến dữ liệu. Nếu dữ liệu ở bên trong CPU thì chỉ các thanh ghi R0 và R1 được sử dụng cho mục đích này. Hay nói cách khác các thanh ghi R2 - R7 không có thể dùng được để giữ địa chỉ của toán hạng nằm trong RAM khi sử dụng chế độ đánh địa chỉ này khi Ro và R1 được dùng như các con trỏ, nghĩa là khi chúng giữ các địa chỉ của các ngăn nhớ RAM thì trước chúng phải đặt dấu (@) như chỉ ra dưới đây. MOV A, @ R0; Chuyển nội dung của ngăn nhớ RAM có địa chỉ trong RO và A Lưu ý rằng R0 cũng như R1 luôn có dấu “@” đứng trước. Khi không có dấu này thì đó là lệnh chuyển nội dung các thanh ghi Ro và R1 chứ không phải dữ liệu ngăn nhớ mà địa chỉ có trong R0 và R1. 12.1 Phối ghép một LCD với 8051. ở phần này ta sẽ mô tả các chế độ hoạt động của các LCD và sau đó mô tả cách lập trình và phối ghép một LCD tới 8051. 12.1.2 Các chân của LCD. Bảng 2.1: Mô tả các chân của LCD. Chân Ký hiệu I/O Mô tả 1 VSS - Đất 2 VCC - Dương nguồn 5v 3 VEE - Cấp nguồn điều khiển phản Bài tập lớn môn Vi Xử Lý 7 4 RS I RS = 0 chọn thanh ghi lệnh. RS = 1 chọn thanh 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 bít dữ liệu 8 DB1 I/O Các bít dữ liệu 9 DB2 I/O Các bít dữ liệu 10 DB3 I/O Các bít dữ liệu 11 DB4 I/O Các bít dữ liệu 12 DB5 I/O Các bít dữ liệu 13 DB6 I/O Các bít dữ liệu 14 DB7 I/O Các bít dữ liệu 15 A - Anode 16 K - Kathode LCD được nói trong mục này có 14 chân, chức năng của các chân được cho trong bảng 12.1. Vị trí của các chân được mô tả trên hình 12.1 cho nhiều LCD khác nhau. 1. Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: Cấp dương nguồn - 5v và đất tương ứng thì VEE được dùng để điều khiển độ tương phản của LCD. 2. Chân chọn thanh ghi RS (Register Select). Có hai thanh ghi rất quan trọng bên trong LCD, chân RS được dùng để chọn các 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ư xoá màn hình, đưa con trỏ về đầu dòng v.v… 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. 3. Chân đọc/ ghi (R/W). Đầu vào đọ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. 4. 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 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. Bài tập lớn môn Vi Xử Lý 8 5. Chân D0 - D7. Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lê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ố thì bật RS = 1. Cũng có các mã lệnh mà có thể được gửi đến LCD để xoá màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ. Bảng 12.2 liệt kê các mã lênh. Chúng ta cũng sử dụng RS = 0 để kiểm tra bít 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 = 0 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 kỳ dữ liệu nào lên LCD. 12.1.3 Gửi các lệnh và dữ liệu đến LCD với một độ trễ. Để gửi một lệnh bất kỳ từ bảng 12.2 đến LCD ta phải đưa chân RS về 0. Đối với dữ liệu thì bật RS = 1 sau đó gửi một sườn xung cao xuống thấp đến chân E để cho phép chốt dữ liệu trong LCD. Điều này được chỉ ra trong đoạn mã chương trình dưới đây (xem hình 12.2). Hình 12.2: Nối ghép LCD. 12.1.4 Gửi mã lệnh hoặc dữ liệu đến LCD có kiểm tra cờ Bảng 2.2: Các mã lệnh LCD. Mã (Hex) Lệnh đến thanh ghi của LCD 1 Xoá màn hình hiển thị P2.1 D0 P1.0 P1.0 P2.2 D7 R/W E RS VSS VEE VCC +5v 10K POT LCD 8051 Bài tập lớn môn Vi Xử Lý 9 2 Trở về đầu dòng 4 Giảm con trỏ (dịch con trỏ sang trái) 6 Tăng con trỏ (dịch con trỏ sang phải) 5 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 con trỏ, 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 Đa con trỏ về đầu dòng thứ nhất C0 Đa con trỏ về đầu dòng thứ hai 38 Hai dòng và ma trận 5  7 Đoạn chương trình trên đây đã chỉ ra cách gửi các lệnh đến LCD mà không có kiểm tra cờ bận (Busy Flag). Lưu ý rằng chúng ta phải đặt một độ trễ lớn trong quá ảtình xuất dữ liệu hoặc lệnh ra LCD. Tuy nhiên, một cách tốt hơn nhiều là hiển thị cờ bận trước khi xuất một lệnh hoặc dữ liệu tới LCD. Dưới đây là một chương trình như vậy. ; Kiểm tra cờ bận trước khi gửi dữ liệu, lệnh ra LCD Lưu ý rằng trong chương trình cờ bận D7 của thanh ghi lệnh. Để đọc thanh ghi lệnh ta phải đặt RS = 0, R/W = 1 và xung cao - xuống - thấp cho bít E để cấp thanh ghi lệnh cho chúng ta. Sau khi đọc thanh ghi lệnh, nếu bít D7 (cờ bận) ở mức cao thì LCD bận và không có thông tin (lệnh) nào được xuất đến nó chỉ khi nào D7 = 0 mới có thể gửi dữ liệu hoặc lệnh đến LCD. Lưu ý trong phương phát này không sử dụng độ trễ thời gian nào vì ta đang kiểm tra cờ bận trước khi xuất lệnh hoặc dữ liệu lên LCD. 13.2 Phối ghép 8051 với bàn phím. 13.2.1 Phối ghép bàn phím với 8051. ở mức thấp nhất các bàn phím được tổ chức dưới dạng một ma trận các hàng và các cột. CPU truy cập cả hàng lẫn cột thông qua các cổng. Do vậy, với hai cổng 8 bít thì Bài tập lớn môn Vi Xử Lý 10 có thể nối tới một bàn phím 8  8 tới bộ vi xử lý. Khi một phím được ấn thì một hàng và một cột được tiếp xúc, ngoài ra không có sự tiếp xúc nào giữa các hàng và các cột. Trong các bàn phím máy tính IBM PC có một bộ vi điều khiển (bao gồm một bộ vi xử lý, bộ nhớ RAM và EPROM và một số cổng tất cả được bố trí trên một chíp) chịu trách nhiệm phối ghép phần cứng và phần mềm của bàn phím. Trong những hệ thống như vậy, nó là chức năng của các chương trình được lưu trong EPROM của bộ vi điều khiển để quét liên tục các phím, xác định xem phím nào đã được kích hoạt và gửi nó đến bo mạch chính. Trong phần này nghiên cứu về cơ cấu 8051 quét và xác định phím. 13.2.2 Quét và xác định phím. VCC_CIRCLE 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2DO D1 D1 D2 D2 D3 D3 DO 0 1 2 3 4567 89AB CD EF CONG RA CONG VAO Hình 1.1: Nối ghép bàn phím ma trận tới các cổng. Các hàng được nối tới một đầu ra và các cột được nối tới một cổng vào. Nếu không có phím nào được ấn thì việc đóng cổng vào sẽ hoàn toàn là 1 cho tất cả các cột vì tất cả được nối tới dương nguồn VCC. Nếu tất cả các hàng được nối đất và một phím được ấn thì một trong các cột sẽ có giá trị 0 vì phím được ấn tạo đường xuống đất. Chức năng của bộ vi điều khiển là quét liên tục để phát hiện và xác định phím được ấn. 13.2.3 Nối đất các hàng và đọc các cột. Để phát hiện một phím được ấn thì bộ vi điều khiển nối đất tất cả các hàng bằng cách cấp 0 tơí chốt đầu ra, sau đó nó đọc các hàng. Nếu dữ được đọc từ các cột là D3 - D0 = 1101 thì không có phím nào được ấn và quá trình tiếp tục cho đến khi phát hiện một phím được ấn. Tuy nhiên, nếu một trong các bít cột có số 0 thì điều đó có nghĩa là Bài tập lớn môn Vi Xử Lý 11 việc ấn phím đã xảy ra. Ví dụ, nếu D3 - D0 = 1101 có nghĩa là một phím ở cột 1 được ấn. Sau khi một ấn phím được phát hiện, bộ vi điều khiển sẽ chạy quá trình xác định phím. Bắt đầu với hàng trên cùng, bộ vi điều khiển nối đất nó bằng cách chỉ cấp mức thấp tới chân D0, sau đó nó đọc các cột. Nếu dữ liệu đọc được là toàn số 1 thì không có phím nào của hàng này được ấn và quá trình này chuyển sang hàng kế tiếp. Nó nối đất hàng kế tiếp, đọc các cột và kiểm tra xem có số 0 nào không? Qúa trình này tiếp tục cho đến khi xác định được hàng nào có phím ấn. Sau khi xác định được hàng có phím được ấn thì công việc tiếp theo là tìm ra phím ấn thuộc cột nào. Điều này thật là dễ dàng vì bộ vi điều khiển biết tại thời điểm bất kỳ hàng nào và cột nào được truy cập. Hình 1.2: Lưu đồ tìm phím ấn Nối đất mọi hàng Đọc mọi cột Chờ nhả phím Nối đất hàng kế tiếp Nối đất mọi hàng Bắt đầu Mọi phím hở Đọc mọi cột Có phím ấn Đọc mọi cột Có phím ấn Có phím hở ở hàng này Tìm phím nào đợc ấn Tìm phím nào đợc ấn Trở về Có Không Không Có Không Có Không Có Bài tập lớn môn Vi Xử Lý 12 2.Giới thiệu về LCD 2.1 Mô tả các chân của LCD. Phần II: Sơ đồ khối của hệ thống Chức năng của các khối:  Khối nhập dữ liệu: Khối này dùng để nhập các thông tin cần hiển thị trên LCD như hình ảnh hoặc các ký tự. Việc nhập dữ liệu được thực hiện bằng bàn phím giao tiếp trực tiếp với mạch hoặc được thực hiện trong quá trình lập trình (nạp vào bộ nhớ của vi điều khiển).  Khối lưu trữ: chính là bộ nhớ ROM hoặc RAM, dùng để lưu trữ dữ liệu hiển thị trên LCD.  Khối xử lý trung tâm: dùng để xử lý dữ liệu, đưa ra khối giải mã.  Khối giải mã: dùng để giải mã địa chỉ dữ liệu dược đưa từ bộ vi xử lý ra.  Khối khuếch đại: tín hiệu đưa ra từ bộ vi xử lý thường rất nhỏ nên tín hiệu được khuyếch đại  Khối hiển thị: LCD hiển thị dữ liệu mà ta đã nhập vào. PHẦN III: Phương án Khối xử lý trung tâm Khối lưu trữ Khối giải mã Khối khuếch đại Khối hiển thị Khối nhập dữ liệu Bài tập lớn môn Vi Xử Lý 13 Do kiến thức còn hạn chế nên trong khoảng thời gian 2 học kỳ, chúng em quyết định làm phương án Nguyên lý làm việc của mạch: Khi khởi động mạch, khối xử lý trung tâm sẽ lấy dữ liệu lưu trữ từ bộ nhớ ROM. Để khối xử lý quy chiếu chính xác đến địa chỉ của dữ liệu lưu trữ trong ROM, ta dùng bộ giải mã địa chỉ. Sau khi bộ xử lý quy chiếu được đến dữ liệu trong ROM, dữ liệu được đưa từ ROM về bộ xử lý. Trong bộ vi xử lý, dữ liệu sẽ được xử lý (trễ, lặp, xuất ra các port,…) Dữ liệu khi nhập từ bàn phím được vi điều khiển quét và xãc định phím ấn xẽ gửi mã ASCII cuả phím ấn đến bộ vi xử lý Sau khi dữ liệu được xử lý ở bên trong bộ vi xử lý, nó sẽ được xuất ra các port của vi xử lý. Các port này lại được nối tới các chân tương ứng của màn hình LCD Lựa chọn linh kiện để lắp mạch:  1 IC AT89C51.  1 BÀN PHÍM 4X4 Khối nhập dữ liệu ( Bàn phím) Khối giải mã Khối khuếch đại Khối hiển thị Khối xử lý trung tâm Khối lưu trữ (ROM + RAM) Bài tập lớn môn Vi Xử Lý 14  1 LCD 16X2  1 BỘ DAO ĐỘNG THẠCH ANH TẦN SỐ 12 MHZ.  CÁC ĐIỆN TRỞ VÀ CÁC TỤ ĐIỆN PHẦN IV : THIẾT KẾ CHƯƠNG TRìNH CHO VI ĐIỀU KHIỂN I. THUẬT TOÁN Theo nguyên lý và thiết kế phần cứng của mạch quảng cáo, chúng ta xẽ xây dựng thuật toán cho chương trình điều khiển để nạp vào vi điều khiển AT89C51. Trong sơ đồ nguyên lý, dữ liệu từ Port 2 sẽ được xuất các chân dữ liệu tương ứng của LCD Ba chân p3.0,p3.1,p3.4 xẽ được nối với chân RS,EN,RW của LCD Port 1 có 8 chân được sử dụng để lối với các chân của bàn phím .Như vậy mục đích chương trình sẽ là - Điều khiển việc nhập dữ liệu từ bàn phím vào vi điều khiển +trước tiên xác định phím nào được bấm bằng việc cho các hành nối đất và các cột được nối ở mức cao +sau đó xác định mã ASCII của phím đựơc ấn và gửi đến vi xử lý - Điều khiển để dòng chữ nhập từ bàn phím khi nhấn phím # thì kết thúc nhập và cho dòng chữ nhập từ bàn phím nhấp nháy trên màn hình LCD sau đó cho chữ chạy từ trái qua phải Đầu tiên cần phải khai báo dữ liệu(nạp dữ liệu vào các ô nhớ của Rom 8951) được nhập theo tong byte.Các byte này xẽ được cất vào các ô nhớ liên tiếp của bộ nhớ rom của vi điều khiển 89c51 khi chúng ta muốn truy xuất dữ liệu thì chỉ việc truy xuất vào các ô nhớ đã đính địa chỉ Dữ liệu được truy xuất, đưa ra Port 2 để hiển thị chữ bằng cách sau: Theo nguyên tắc: địa chỉ = bộ đếm + con trỏ Con trỏ mà chúng ta sử dụng ở đây là con trỏ dữ liệu DPTR. Đầu tiên con trỏ sẽ được đặt ở địa chỉ đầu bảng dữ liệu, bộ đếm là đếm địa chỉ offset , chúng ta sẽ dựng thanh ghi A chứa địa chỉ này. Và lệnh sau sẽ truy xuất vào dữ liệu: MOVC A, @A+DPTR Khi đó chỉ việc xuất dữ liệu từ thanh chứa A ra Port 2 là được. Việc nhập dữ liệu từ bàn phím trước hết cho các hàng nối đất lấy các cột làm đầu vào xem có phím bấm chưa .Sau đó để xác định phím bấm ta cho tất cả các hàng nối ở mức cao lấy các cột làm đầu vào,sau đó cho hàng 1 nối đất và quét tất cả các cột xem nhấn ở đâu ,sau đó làm lại với các hàng còn lại .Rồi lấy mã ASCII của phím bấm gửi về vi điều khiển và xuất ra LCD,lưu ý 1 phím có thể hiển thị 4 ký tự Bài tập lớn môn Vi Xử Lý 15 SƠ ĐỒ THUẬT TOÁN CỦA CHƯƠNG TRÌNH Khởi tạo LCD Thông báo nhập dữ liệu Thực hiện giao tiếp với bàn phím Bắt đầu Nối đất tất cả các hàng Đọc tất cả các cột Tất cả các phím thả Đọc tất cả các cột Có phím nhấn Chờ phím nhấn xong Đọc tất cả các cột Có phím nhấn Xác định phím nhấn thuộc hàng nào Xác định phím nhấn thuộc cột nào Xác định vị trí phím nhấn Xác định phím đợc nhấn lần mấy Xác định từ mã Gửi lên LCD Có nhấn phím nếu kết thúc không Chạy quảng cáo Bài tập lớn môn Vi Xử Lý 16 II.SƠ ĐỒ NGUYÊN LÝ J1 CON14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 U2 AT89C52 9 18 19 20 29 30 31 40 1 2 3 4 5 6 7 8 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 39 38 37 36 35 34 33 32 RST XTAL2 XTAL1 G N D PSEN ALE/PROG EA/VPP V C C P1.0/T2 P1.1/T2-EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 R1 R SW1 J3 CON2 1 2 J2 1 2 3 4 5 6 7 8 C1 C3 + C5 + C6 + C7 C4 U4 LM7805 1 2 3 VI G N D VO Y2 1 2 3 654 8 9 = 7 +CON 0 A B C D 1 2 43 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 SS 1 V D D 2 V EE 3 LCD1 LM016L II. CHƯƠNG TRÌNH Chương trình được lập trình bằng ngôn ngữ lập trình là ASSEMBLY. ******************************************************** RS BIT P3.0 ;Bit P3.0 dung chon thanh ghi lenh/du lieu EN BIT P3.1 ;Bit P3.1 dung lam chan 'Cho phep' RW BIT P3.4 ;Bit P3.4 dieu khien viec doc/ghi du lieu Bài tập lớn môn Vi Xử Lý 17 C1 BIT P1.2 ;Cac bit P1.2, P1.1, P1.0 lan luot noi voi C2 BIT P1.1 ;cac cot tu 1 - 3 cua ban phim C3 BIT P1.0 H1 BIT P1.3 ;Cac bit P1.3 - P1.6 lan luot noi voi H2 BIT P1.4 ; cac hang tu 1 - 4 cua ban phim H3 BIT P1.5 H4 BIT P1.6 ORG 0 Mainpro: LCALL Hien_Promt LCALL Nhap_Dulieu LJMP QuangCao Hien_Promt: ;1-Hien thi dau nhac nap du lieu ;Khoi tao LCD MOV A,#38H ;Che do 2 dong ma tran 5x7 LCALL COMMAND ;Thuc hien lenh MOV A,#0EH ;Bat hien thi nhap nhay con tro LCALL COMMAND MOV A,#01H ;Xoa man hinh hien thi LCALL COMMAND ;gioi thieu cac thanh vien lam de tai MOV DPTR,#900H ;Nap con tro du lieu MOV R3,#7 ;R3 de chua so chuoi duoc hien thi AGAIN: LCALL GTTIEP ; GTIEP = gioi thieu tiep INC DPTR DJNZ R3,AGAIN LJMP Xoamanhinh GTTIEP: BACK1: CLR A MOVC A,@A+DPTR MOV R7,A ;Du cat vao R7 de phuc vu cho HIENTHI1 JZ TIEPTUC ;Chuyen sang nhap chuoi tiep theo LCALL HIENTHI1 LCALL DELAY LCALL DELAY INC DPTR SJMP BACK1 TIEPTUC: LCALL DELAY MOV A,#01 ;Xoa man hinh de hien thi chuoi moi Bài tập lớn môn Vi Xử Lý 18 LCALL COMMAND LCALL DELAY RET ; RET OF GTTIEP ;Chuong trinh con xuat lenh COMMAND: LCALL READY ;Kiem tra co ban neu san sang MOV P2,A ;thi chuyen ma lenh ra cong P2 CLR RS ;RS =0 Cho xuat lenh CLR RW ;RW = O De gi lenh toi LCD SETB EN ;Chan E nhan duoc mot xung cao CLR EN ;xuong thap cho phep LCD chot lenh RET ; ret of COMMAND xoamanhinh: ;giu prompt mot luc, roi xoa man hinh de nhap du lieu LCALL DELAY MOV A,#01 LCALL COMMAND LJMP Nhap_dulieu ;Chuong trinh con hien thi HIENTHI1: MOV A,#06H ;Chon huong hien thi sang ben phai LCALL COMMAND LCALL READY MOV P2,R7 SETB RS ;RS = 1 De cho phep xuat du lieu CLR RW ;RW = 0 De ghi du lieu ra LCD SETB EN ;Chan Enable nha mot xung cao CLR EN ;xuong thap de chot du lieu RET ;RET of HIENTHI1 ;Chuong trinh con tao tre DELAY: MOV R6,#255 VONG2:MOV R7,#255 HERE: DJNZ R7,HERE DJNZ R6,VONG2 RET ; Kiem tra co ban READY: SETB P2.7 ;lay P2.7- chan co ban lam dau vao CLR RS ; RS =0 de truy cap thanh ghi lenh SETB RW ; RW = 1 Doc thanh ghi lenh ;Doc thanh ghi lenh va kiem tra co lenh BACK: CLR EN SETB EN Bài tập lớn môn Vi Xử Lý 19 JB P2.7,BACK ;cho cho den khi LCD het ban RET ;Of ready ;CHUONG TRINH CON GIAO TIEP VOI BAN PHIM ;P1.1 P1.2 P1.3 duoc noi voi cac cot 3 2 1 ;P1.4 P1.5 P1.6 P1.7 duoc noi voi cac hang 1 2 3 4 Nhap_Dulieu: ;Doan nay phuc vu cho viec luu Du lieu vao vung RAM da nang MOV R1,#30H ;R1 dung lam con tro ram,phuc vu cho ; viec luu giu du lieu vao RAM MOV R2,#4FH ; do lon khong gian RAM dan nang Xoaram: MOV @R1,#20H ;20h ma ASCII cua ky tu trang ' ' INC R1 DJNZ R2,Xoaram MOV R1,#30H MOV R5,#0 ;dem so ky tu hien tai dang hien thi tren LCD ;doan nay chi nhan biet xem la co phim nhan chua ; nen ta tiep dat tat ca cac hang batdau: MOV P1,#00000111b ;De co the nhan biet duoc phim da nhan ; chua ta dat cac bit tuong ung voi ;cac cot lam dau vao va cac bit tuong ;ung voi hang duoc noi dat MOV R0,#0 ;vi moi phim co the hien thi 4 ky tu ;ta dung R0 de xac dinh so ky tu tren ; mot phim da duoc nhan la bao nhieu KT1: MOV A,P1 CJNE A,#00000111b,KT1 ;Kiem tra nha phim chua,neu chua ;kiem tra lai cho den khi nha phim KT2: LCALL DELAY MOV A,P1 ; De doc cac cot CJNE A,#00000111b,CHO1 ; Neu phim nhan cho xong SJMP KT2 ; Neu khong thi kiem tra lai xem no co duoc nhan ko CHO1: MOV R0,#0 LCALL DELAY ; Cho cho nhan xong CJNE A,#00000111b,CHO2 ;Neu co phim nhan thi nhay den ;CHO2 cho hien thi phim do va ;tiep tuc kiem tra xem phim do ; co duoc nhan tiep ngay khong Bài tập lớn môn Vi Xử Lý 20 SJMP KT2 CHO2: INC R0 ;Da co mot phim duoc nhan 1 lan LCALL HIEN ; hien thi ky tu do LCALL DELAY LCALL DELAY MOV P1,#00000111B ;kiem tra co phim nhan tiep khong LCALL DELAY MOV A,P1 CJNE A,#00000111b,CHO3 MOV A,R4 ;luu ky tu duoc hien thi cuoi ;cung cua phim nhan vao RAM MOV @R1,A INC R1 INC R5 ;Doan nay dung de dich man hinh hien thi sang phai khi so ;ky tu da hien thi lon hon 16 CLR C MOV A,R5 SUBB A,#16 JC TIEP1 MOV A,#18H LCALL COMMAND ;het doan dich hien thi sang phai TIEP1:MOV R0,#0 SJMP KT2 CHO3:MOV A,#10H LCALL COMMAND INC R0 LCALL HIEN LCALL DELAY LCALL DELAY MOV P1,#00000111B LCALL DELAY MOV A,P1 CJNE A,#00000111b,CHO4 MOV A,R4 MOV @R1,A INC R1 INC R5 CLR C MOV A,R5 SUBB A,#16 JC TIEP2 MOV A,#18H Bài tập lớn môn Vi Xử Lý 21 LCALL COMMAND TIEP2: MOV R0,#0 SJMP KT2 CHO4:MOV A,#10H LCALL COMMAND INC R0 LCALL HIEN LCALL DELAY LCALL DELAY MOV P1,#00000111B LCALL DELAY MOV A,P1 CJNE A,#00000111b,CHO5 MOV A,R4 MOV @R1,A INC R1 INC R5 CLR C MOV A,R5 SUBB A,#16 JC TIEP3 MOV A,#18H LCALL COMMAND TIEP3: MOV R0,#0 LJMP KT2 CHO5:MOV A,#10H LCALL COMMAND INC R0 LCALL HIEN LCALL DELAY LCALL DELAY MOV P1,#00000111B LCALL DELAY MOV A,P1 CJNE A,#00000111b,VONGVE MOV A,R4 MOV @R1,A INC R1 INC R5 CLR C MOV A,R5 SUBB A,#16 JC TIEP4 MOV A,#18H LCALL COMMAND Bài tập lớn môn Vi Xử Lý 22 TIEP4: MOV R0,#0 VONGVE: LJMP KT2 HIEN: Timhang: MOV P1,#11111111B ;DAU TIEN KO TIEP DAT HANG NAO ;VA DAT CAC COT LAM DAU VAO CLR H1 ;Tiep dat hang 1 MOV A,P1 ;Doc tat ca cac cot CJNE A,#11110111b,HG1 ;Hang 1 tim cot (ro rang la cac hang tuong ung voi 5 bit ;dau la co dinh=11110 do chi tiep dat hang1, tai day ;ta chi can quan tam den phim co phai o hang 1 khong thoi ; boi vay chi can co 1 trong 3 cot duoc nhan se lam cho ;1 cot tiep dat dan den 1 trong 3 bit dau =0 nhu vay ; khi do gia tri A se khac #11110111 chung to phim nhan ; o hang 1 va ta tiep tuc xac dinh phim do o cot nao MOV P1,#11111111B CLR H2 ;Tiep dat hang 2 MOV A,P1 ;Doc tat ca cac cot CJNE A,#11101111b,HG2 ;Hang 1 tim cot MOV P1,#11111111B CLR H3 ;Tiep dat hang 3 MOV A,P1 ;Doc tat ca cac cot CJNE A,#11011111b,HG3 ;Hang 3 tim cot MOV P1,#11111111B CLR H4 ;Tiep dat hang 4 MOV A,P1 ;Doc tat ca cac cot CJNE A,#10111111b,HG4 ;Hang 4 tim cot LJMP KT2 HG1: CJNE R0,#1,DT12 MOV DPTR,#DATA11 LJMP TIM ;Tim xem phim nhan o cot nao DT12: CJNE R0,#2,DT13 MOV DPTR,#DATA12 LJMP TIM DT13: CJNE R0,#3,DT14 MOV DPTR,#DATA13 LJMP TIM ;Neu khong phai la cac truong hop tren thi R0 = 4 ; ta tim luon den data14 DT14: MOV DPTR,#DATA14 Bài tập lớn môn Vi Xử Lý 23 LJMP TIM HG2: CJNE R0,#1,DT22 MOV DPTR,#DATA21 LJMP TIM DT22: CJNE R0,#2,DT23 MOV DPTR,#DATA22 SJMP TIM DT23: CJNE R0,#3,DT24 MOV DPTR,#DATA23 SJMP TIM DT24: MOV DPTR,#DATA24 SJMP TIM HG3: CJNE R0,#1,DT32 MOV DPTR,#DATA31 SJMP TIM DT32: CJNE R0,#2,DT33 MOV DPTR,#DATA32 SJMP TIM DT33: CJNE R0,#3,DT34 MOV DPTR,#DATA33 SJMP TIM DT34: MOV DPTR,#DATA34 SJMP TIM HG4: CJNE R0,#1,DT42 MOV DPTR,#DATA41 SJMP TIM DT42: CJNE R0,#2,DT43 MOV DPTR,#DATA42 SJMP TIM DT43: CJNE R0,#3,DT44 MOV DPTR,#DATA43 SJMP TIM DT44: MOV DPTR,#DATA44 SJMP TIM TIM: RRC A ;Kiem tra cot nao o muc thap nho co CY JNC LAYMA ;Neu bang 0 thi lay ma ASCII Bài tập lớn môn Vi Xử Lý 24 INC DPTR ;Trai lai tim cot ke SJMP TIM LAYMA:CLR A MOVC A,@A + DPTR JZ Ketthucnhap MOV R4,A CJNE A,#23h,SS2 ; a= '#' ,ta quy uoc la phim xoa SJMP backspace SS2 : CJNE A,#24h,SS3 ;quy uoc '$' la ma xuong dong LCALL Xuongdong SS3 : LCALL HienThiPhimNhan ;hien thi phim da nhan VE: RET ;OF HIEN BACKSPACE: ;doan nay de xoa ca ky tu do da duoc luu trong RAM DEC R1 DEC R5 DEC R1 DEC R5 MOV A,@R1 MOV R4,A ;Doan nay de xoa ky tu tren LCD MOV A,#10H ;dich con tro sang phai mot cot LCALL COMMAND MOV A,#20H ;chen ky tu trang vao vi tri do LCALL HIENTHIPHIMNHAN MOV A,#10H ;lui ve 1 cot LCALL COMMAND LJMP VE ketthucnhap: ;do khoang cach tu doan lay ma LJMP quangcao ;den doan quangcao nam ngoai ;dai cua lenh JZ nen ta dung ;doan nay de noi tiep xuongdong: MOV A,#0C0H LCALL COMMAND LJMP VE Hienthiphimnhan: LCALL READY MOV P2,A SETB RS ;RS = 1 De cho phep xuat du lieu CLR RW ;RW = 0 De ghi du lieu ra LCD SETB EN ;Chan Enable nha mot xung cao CLR EN ;xuong thap de chot du lieu Bài tập lớn môn Vi Xử Lý 25 LCALL DELAY RET QUANGCAO: MOV A,R5 MOV R3,A ;Xoa tung ky tu CHAY1: Mov a,#10h Lcall command MOV A,#20h LCALL HIENTHIPHIMNHAN Mov a,#10h Lcall command LCALL DELAY LCALL DELAY DJNZ R5,CHAY1 ;hien thi lai tung ky tu MOV R1,#30H HTL: MOV A,@R1 MOV R7,A LCALL Hienthi1 LCALL DELAY LCALL DELAY LCALL DELAY TIEP: INC R1 DJNZ R3,HTL MOV R4,#5 FOREVER: MOV R4,#5 NHAPNHAY: MOV A,#0AH ;Xoa man hinh hien thi LCALL COMMAND LCALL DELAY ;de man hinh tat mot luc LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY MOV A,#0eH ;Bat man hinh hien thi LCALL COMMAND LCALL DELAY ; de mot luc LCALL DELAY Bài tập lớn môn Vi Xử Lý 26 LCALL DELAY LCALL DELAY DJNZ R4,NHAPNHAY LCALL DELAY LCALL DELAY MOV R4,#40 ; vi LCD co 40 cot, nen cuoi cung ;hien thi se dich ve dung vi tri cu DichTrai: Mov A,#18H LCALL COMMAND LCALL DELAY LCALL DELAY LCALL DELAY DJNZ R4,DichTrai LCALL DELAY LCALL DELAY MOV R4,#40 DichPhai: Mov A,#1CH LCALL COMMAND LCALL DELAY LCALL DELAY DJNZ R4,DichPhai LJMP FOREVER ORG 900H DANHSACH: DB "Nhom thuc hien: ",0 SV1: DB "NGUYEN HOANG HAI",0 SV2: DB "HOANG NGOC ANH",0 SV3: DB "NGUYEN HUU HAI",0 SV4: DB "DUONG THANH PHAO",0 SV5: DB "NGUYEN HOANG HAI",0 DULIEU: DB "Nhap du lieu...",0 ORG 1000H DATA11: DB '1','2','3' DATA12: DB '1','A','D' DATA13: DB '1','B','E' DATA14: DB '1','C','F' DATA21: DB '4','5','6' DATA22: DB 'G','J','M' DATA23: DB 'H','K','N' Bài tập lớn môn Vi Xử Lý 27 DATA24: DB 'I','L','O' DATA31: DB '7','8','9' DATA32: DB 'P','T','W' DATA33: DB 'R','U','X' DATA34: DB 'S','V','Y' DATA41: DB '#',' ',0 DATA42: DB ' ','0',0 DATA43: DB '$','_',0 DATA44: DB '#','@',0 END 5 :Tài liệu tham khảo:  Kĩ thuật Vi xử lý -- Tác giả Văn Thế Minh--.  Cấu trúc và lập trình họ vi điều khiển 8051. -- Tác giả Nguyễn Tăng Cường, Phan Quốc Thắng --

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

  • pdfcua_phao_0093.pdf