6.3.1. Hiện tượng rung phím
Với kỹ thuật quét phím ta có thể xác định được các phím được nhấn. Tuy nhiên nếu chỉ sử dụng kỹ thuật quét phím thôi thì khi nhấn một phím nào đó ta có thể nhận được nhiều hơn một tín hiệu báo phím được nhấn. Các tín hiệu đó có thể là của cùng một phím nhưng được báo nhiều lần hoặc là của các phím lân cận phím đó. Hiện tượng này gọi là rung phím và nhiễu. Làm thế nào để khắc phục vấn đề này? Một vấn đề khác là điều gì sẽ xảy ra khi ta giữ một phím trong trường hợp này ta nên hiểu là chỉ có một tín hiệu phím nhấn hay vô số tín hiệu phím nhấn? hay thời gian nhấn phím là bao lâu?.Để giải quyết vấn đề này ta sử dụng kỹ thuật chống rung phím.:
6.3.2. Kỹ thuật chống rung phím
Có 2 kỹ thuật chống rung phím là kỹ thuật chống rung bằng phần mềm và kỹ thuật chống rung bằng phần cứng. Trong bài thí nghiệm này ta chỉ khảo sát kỹ thuật chống rung bằng phần mềm. Ý tưởng chính ở đây là sau một khoảng thời gian đủ nhỏ ta đọc dữ liệu vào nhiều ô nhớ. Bằng cách so sánh đối chiếu các thanh ghi này để biết dữ liệu đọc vào đúng hay sai.
Cụ thể là ởđây ta sử dụng các ô nhớ:
- Để chống rung phím ta sử dụng các thanh ghi: Pre2, Pre1, Current.
- Ta sử dụng thanh ghi KeyEffective để lưu các phím hiệu dụng (nhận đúng)
- Old_KeyEffective và HoldKey để kiểm tra các phím được nhấn lần đầu tiên và các phím được giữ.
Giải thuật thực hiện là: đưa giá trị đọc được vào thanh ghi current, hai thanh ghi Pre2 và Pre1 chứa giá trị được đọc vào ở hai lần trước đó. Sau đó đối chiếu giá trị của ba thanh ghi này, nếu có sự khác biệt thì vẫn đọc tiếp. Ngược lại nếu ba thanh ghi này có cùng giá trị (giống nhau), thì giá trị trên current sẽ được chuyển sang giá trị hiệu dụng (đưa vào thanh ghi KeyEffective) giá trị này được xem là giá trị đúng (đã qua xử lý chống rung). Thanh ghi Old_KeyEffective giữ giá trị hiệu dụng ở lần kế trước đó nhờ có thanh ghi này mà việc xác định phím nào được nhấn đầu tiên và phím nào được giữ khá dễ dàng. So sánh giá trị trong thanh ghi KeyEffective và Old_KeyEffective nếu có phím nào có sự chuyển dịch từ 1 xuống 0 nghĩa là lần đầu tiên được nhấn (tích cực mức 0), ngược lại nếu 0 và 0 nghĩa là phím được giữ các trường hợp còn lại (1 và 1, 0 và 1) nghĩa là phím không được nhấn.
Current Pre1 Pre2 PORT
Current = Pre1 = Pre2 KeyEffective
KeyEffective Old_KeyEffective
KeyEff Old Ghi chú 0 1 first time HoldKey 0 0 hold key 1 0 no button 1 1 no button
Hàm xử lý việc giữ phím:
Cài đặt timer cho việc quét phím:
Hàm đáp ứng ngắt quãng timer:
6.4. Bài tập
6.4.1. Bài tập 1
Thực hiện việc quét phím trên ma trận 4x4. Chương trình nhận 1 phím bất kỳ, thực hiện việc đếm vòng (tăng lên 1 khi có 1 phím được nhấn), hiển thị lên 4 LED trên board thí nghiệm. Cho biết:
- Port J được dùng để quét phím
- Các LED 1, 2, 3, 4 tương ứng với các bit PI.0, PI.1, PI.2, và PI.3
6.4.2. Bài tập 2
Tạo hiệu ứng lighriver trên 8 LED của board mở rộng. Chương trình nhận vào 4 phím: - Phím thứ nhất làm đổi chiều lighriver. - Phím thứ 2 làm dừng lighriver. - Phím thứ 3 làm tắt tất cả các đèn. - Phím thứ 4 làm reset lại hiệu ứng lighriver 6.4.3. Bài tập 3
Thực hiện việc quét ma trận phím (4x4). Xuất giá trị quét được và số lần nhấn phím ra LED 7 đoạn.
- Sử dụng port J của vi điều khiển H8SX/1582 để quét phím - Sử dụng kỹ thuật quét phím và chống rung phím nhấn trên. - Sử dụng timer 0, kênh 0 để lập trình quét phím
- Port P2 và P3 là các cổng xuất cho LED 7. P2 xuất dữ liệu, P3 chọn LED
6.4.4. Bài tập 4
Quét phím và xuất số thứ tự của phím ra ma trận LED (sinh viên tự quyết định số thứ tự của phím, cũng như từ mã của ma trận LED cần xuất ra ma trận LED). Cho biết:
- Port I: chọn cột cho ma trận LED - Port D: điều khiển LED đỏ
Bài 7: Khảo sát bộ truyền nhận nối tiếp SCI của H8SX/1582
7.1 Nội dung
Phần hướng dẫn này sẽ giải thích các vấn đề sau đây:
• Khảo sát bộ truyền nhận nối tiếp của vi điều khiển H8SX/1582 • Giới thiệu kỹ thuật giao tiếp nối tiếp giữa 2 thiết bị
• Sử dụng bộ SCI của H8SX/1582 viết và thực thi chương trình truyền nhận dữ liệu trên Starter Kit và máy tính.