Mua linh kiện điện tử tại Điện tử Nhật Tùng
Khóa học Vi điều khiển có phí Hình thức học: Video hoặc Kèm trực tiếp ===>>>> Kích vào hình để được biết thêm chi tiếtTable of Contents
Tải File bài giải
Pass giải nén: Huynhnhattung.com
===>>> Nếu bạn chưa có phần mềm giải nén:
Video Hiển thị LCD1602 Tiếng Việt, Tạo xung PWM chỉnh nút nhấn
Blog Hiển thị LCD1602 Tiếng Việt, Tạo xung PWM chỉnh nút nhấn
Đề bài hiển thị LCD1602 Tiếng Việt:
Bài giải hiển thị LCD1602 Tiếng Việt:
Phần cứng chương trình hiển thị LCD1602 Tiếng Việt:
- Đề yêu cầu sử dụng điều chế độ rộng xung PWM với duty cố định. Khi tạo xung CCP PWM nếu sử dụng hổ trợ từ phần mềm CCS hoặc từ nhà sản xuất thì chỉ có thể tạo được thông qua 2 chân CCP1 và CCP2. Ngoài ra người lập trình vẫn có khả năng tạo xung từ bất kể chân I/O nào có thể sử dụng delay, timer0, timer1,… Theo đề chân tạo xung bắt buộc vào chân RC2 đồng nghĩa với việc tạo xung bằng CCP1.
- Sử dụng dao động ngoài thạch anh 4M gắn vào chân OSC1 OSC2. Đây là mô phỏng nên mình lười không gắn vào.
- Màn hình LCD1602 hiển thị các thông tin, và việc sử dụng giao tiếp 4bit cũng góp phần vào việc tối ưu phần cứng. Khi lắp phần cứng phải có thêm nguồn và biến trở phân áp để hệ thống được hoàn thiện hơn.
- Các linh kiện chính cần sử dụng tham khảo tại.
Thông số kỹ thuật | Mua Linh kiện |
Pic16F887 | Pic16F887 |
LCD1602 | LCD1602 |
Module L298 | Module L298 |
Điện trở | Điện trở |
Nút nhấn | Nút nhấn |
Thạch anh | Thạch anh |
Phần mềm hiển thị LCD1602 Tiếng Việt:
Khai báo thư viện tiền sử lý của hiển thị LCD1602 Tiếng Việt:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887
- Hiện đan dùng thạch anh ngoài và thạch anh ngoài 4M bằng lệnh #Fuses hs và #delay(clock=4M)
- Hai nút nhấn được gắn vào chân RB0, RB1 dùng để chuyển hiệu ứng cho LCD1602 đồng thời mở hoặc tắt điều chế băm xung CCP PWM.
- Các ký tự Tiếng Việt “ý, ù,….” hay các hình như cái chuông, ngôi sao, trái tim,… đều không có sản trong bảng mã ASCII tức không được lưu sẵn trong bộ nhớ DDRAM của LCD1602, vì thế để sử dụng được các ký hiệu đặc biệt như trên phải sử dụng bộ nhớ CGRAM đây là bộ nhớ hổ trợ người dùng tự tạo các ký tự mong muốn theo các yêu cầu đã đưa ra. Nhưng ngược lại bộ nhớ CGRAM rất giới hạn, chỉ có thể lưu được 64byte ký tự tức chỉ có thể tạo được 8 ký tự mong muốn, mỗi ký tự sẽ mang một ma trận 5×8 theo khởi tạo của LCD1602.
- Ví dụ nhỏ. Tạo ký tự chữ “ỳ” để hiển thị tên “Huỳnh Nhật Tùng” xem bảng bên dưới, sau đó chỉ cần tạo mảng để lưu mã vào. Tương tự có thể tạo cho các ký tự còn lại tùy theo yêu cầu đưa ra.
- Các biến duty, i, tt hổ trợ chương trình hoạt động
Chương trình con xuất dữ liệu bằng hiển thị LCD1602 Tiếng Việt:
- Theo yêu cầu đề bài đưa ra chỉ xét khi nhấn nút 1 và nhấn nút 2 với hiển thị theo thông tin yêu cầu.
- Vì vậy khi khởi động lên sẽ có hai trường hợp sảy ra: Trường hợp 1: Không cần hiển thị gì màn hình LCD1602 trống Trường hợp 2: Hiển thị lời kêu gọi nhấn nút nhấn 1 hoặc nút nhấn 2.
- Khi tt=0 tức mới khởi động lên hiển thị lời kêu gọi. Các địa chỉ 0x80, 0xC0 lần lượt là vị trí đầu của hàng 1 và hàng 2 LCD1602. Các bạn có thể tham khảo bảng địa chỉ tại đây.
- Khi có nhấn nút tức tt=1 thì hiển thị thông tin gồm Họ và tên Tiếng Việt, MSSV lên màn hình LCD1602. Theo mãng tạo ở trên thì ký tự chữ “ù” nằm ở vị trí đầu tiên tức ô địa chỉ số 0 trong bộ nhớ CGRAM, chứ “ỳ” nằm ở vị trí thứ hai tức ô địa chỉ thứ 1 trong bộ nhớ CGRAM (phần này xem kỹ trong chương trình chính sẽ rõ hơn). Đồng thời tắt xung bằng lệnh xuất CCP_OFF và cho duty=0, để kỹ hơn tức xung chắc chắn tắt thì xuất output_low(pin_c2); đây được xem là tạo tính an toàn khi thực hiện.
- Khi tt=2 hiển thị thông tin tần số 5Khz của điều chế độ rộng xung CCP PWM và tỉ lệ phần trăm duty =70% sử dụng. Cách tính xem phần chương trình chính.
- Sau đó xuất mở xung CCP_PWM và tỉ lệ phần trăm duty=70% tương ứng giá trị duty=560.
Chương trình chính thực hiện toàn bộ hoạt động của vi điều khiển dùng Hiển thị LCD1602 Tiếng Việt
- Bắt đầu chương trình chính phải khởi tạo ngõ vào ra cho vi điều khiển. Một chân của vi điều khiển thì làm nhiệm vụ I/O vì thế phải khỏi tạo. Port B dùng cho nút nhấn để đưa vào Vi điều khiển vì thế khởi tạo giá trị là 0xff, Port D, Port C xuất cho led đơn tức đưa tín hiệu từ Vi điều khiển ra ngoài nên khởi tạo là 0x00.
- Khởi tạo ban đầu cho LCD1602 như lựa chọn giao tiếp 4bit, mở con trở, xóa các ký tự, di chuyển con trỏ,…. để phù hợp với yêu cầu đưa ra.
- Khi sử dụng điều chế độ rộng xung do vi điều khiển hổ trợ thì sử dụng Timer2. Cách tính: Tần số yêu cầu f=5KHz => T=0.2ms. PR2 = 0.2ms/((1/4M)*4*1)-1 = 199. Sử dụng bộ chia 1. Vẫn có thể sử dụng bộ chia 4 thì giá trị sẽ tạo ra là 49. Duty = 0.2ms/((1/4M)*1) = 800. Tức giá trị cực đại của duty=800. Theo đề yêu cầu giá trị phần trăm duty=70%.
- Ban đầu tắt tạo xung. Chờ khi nhấn nút sẽ cho phép phát xung theo yêu cầu đề bài.
- Địa chỉ bắt đầu của bộ nhớ CGRAM là 0x40. Vì vậy theo mãng đã lưu ở khai báo gồm 16byte và lưu lần lượt vào 2 ô địa chỉ của bộ nhớ CGRAM, mỗi ô sử dụng 8byte vừa đủ cho một ký tự tự tạo.
Bắt đầu thì không sử dụng gì nên cho tt=0.
- Kiểm tra nếu có nhấn nút 0 thì trả về giá trị tt=1; nhấn nút 1 trả về tt=2; Nút nhấn sẽ giúp tạo ra sản phẩm, việc còn lại là đi lấy sản phẩm đó làm điều kiện để sử dụng cho chương trình hiển thị, sau đó chỉ cần gọi hàm hiển thị đã trang bị trước đó thì hệ thống hoạt động đúng yêu cầu đưa ra.
Chúc các bạn có một kỳ thi thành công…!!!