Thông tin tài liệu:
Hướng dẫn sử dụng Kit 89Bài 7 :Quét led điều khiển Led 7 đoạnMục đích: Nắm vững kĩ thuật quét Led. Ứng dụng quét Led vào việc điều khiển 8 led 7 đoạn. Yêu cầu: Viết module điều khiển Led 7 đoạn có thể dùng lại cho các ứng dụng khác. Đưa ra hàm xuất giá trị số nguyên ra led 7 đoạn tại bất kì vị trí nào.7.1 Nguyên lý quét led 7 đoạnĐể hiện thị 1 led 7 đoạn, ta cần 8 chân để gửi dữ liệu cho nó. Như vậy, với 8 led 7 đoạn, theo kết...
Nội dung trích xuất từ tài liệu:
Hướng dẫn sử dụng Kit 89 - Bài 7 Hướng dẫn sử dụng Kit 89Bài 7 : Quét led điều khiển Led 7 đoạnMục đích: Nắm vững kĩ thuật quét Led. Ứng dụng quét Led vào việc điều khiển 8 led 7 đoạn.Yêu cầu: Viết module điều khiển Led 7 đoạn có thể dùng lại cho các ứng dụng khác. Đưa ra hàm xuất giá trị số nguyên ra led 7 đoạn tại bất kì vị trí nào.7.1 Nguyên lý quét led 7 đoạn Để hiện thị 1 led 7 đoạn, ta cần 8 chân để gửi dữ liệu cho nó. Như vậy, với 8 led 7đoạn, theo kết nối bình thường,ta cần tổng cộng 56 đường tín hiệu để thắp sáng 8 ledcùng lúc. Để khắc phục việc tốn tài nguyên này, người ta dùng kĩ thuật quét led. Tại 1 thờiđiểm, chỉ có 1 led sáng. Tại thời điểm t1 chỉ có led 1 sáng, tại thời điểm t2 = t1 + t0 chỉ cóled 2 sáng, khi t0 rất nhỏ, mắt người không thể nhận biết được độ nhấp nháy giữa 2 lầnluân chuyển, và sẽ có cảm giác là 2 đèn sáng cùng lúc. Để quét led, sơ đồ nguyên lý sẽ được mắc như trên. Port 2 gọi là port dữ liệu, dữliệu này sẽ được nối với tất cả các led. Port 1 dùng để chọn led, cực E của transitor đượcnối với chân mass của led 7 đoạn. Port 1 bằng 1 tại bit nào thì transitor tương ứng sẽ dẫn. Giả sử Port 1 = 0x80,transitor T4 dẫn, dòng data sẽ đi qua led 7 đoạn nối với T4 xuống đất, và led này sẽ sáng,các led còn lại thì không.BKIT HARDWARE CLUB – www.bkit4u.com 47 Hướng dẫn sử dụng Kit 89 Khi số lượng led càng nhiều, ta phải tính toán để tìm ra số t0 hợp lý.Thôngthường, khoảng thời gian tối đa giữa led đầu tiên và led cuối cùng trong khi quét led phảinhỏ hơn 1/50 giây (50Hz). Để quét 8 led 7 đoạn trong bài thí nghiệm này, ta sẽ dùng 1 buffer có 8 phần tử,rồi định kì xuất từng phần tử ra led 7 đoạn tương ứng. Việc thay đổi dữ liệu trong buffernày sẽ do các hàm được cung cấp cho người dùng sử dụng cập nhật. Ta sẽ dùng ngắt timer để định kì gọi hàm scan_led7(), hàm này có chức năng xuất1 giá trị trong buffer ra led tưng ứng, sau mỗi lần gọi, index sẽ tăng lên 1, đến khi bằng 8sẽ quay trở về 0.7.2 Kết nối phần cứng Gạt switch 4 lên ON để kích hoạt led 7 đoạn.7.3 Viết chương trình Để module này có thể dùng lại cho các ứng dụng khác, ta sẽ hiện thực các hàmdưới đây : void init_led7() : Khởi tạo các thông số ban đầu void clear_led7() : Xoá dữ liệu đang hiển thị trên led 7 đoạn void set_position(unsigned int pos) : Thiết lập vị trí xuất dữ liệu, vị trí 0 là ledngoài cùng bên trái. unsigned int get_position() : Truy xuất vị trí đang xuất dữ liệu. void put_number(unsigned int num) : Xuất giá trị num (là số unsigned int) ra led7 đoạn từ vị trí hiện tại. void put_string(char strNum[]) : Xuất giá trị strNum (là giá trị char) ra led 7đoạn từ vị trí hiện tại. void scan_led7() : Xuất dữ liệu từ buffer ra led 7 đoạn. Các hàm interface này được khai báo trong file led7.h. File led7.c sẽ hiện thực cáchàm này.7.3.1 Hàm init_led7() void init_led7() { P0 = 0x00; //data port P2 = 0x00; //selected port position = 0; //output index led7_index = 0; //scan index is_valid_data = 1; //flag to check if data is valid } P0 : Port để xuất dữ liệu cho led 7 đoạn, khởi tạo 0x00 tức là không có led nàotrong led 7 đoạn sáng. P2 : Port để chọn led 7 đoạn nào trong 8 led sẽ nhận data từ Port 0, tức cực mức 1,P2 = 0x01 (0000 0001)tức là led 7 đoạn ngoài cùng bên trái sẽ sáng, P2 = 0x20 (00000010) tức là led thứ 2 tính từ trái sẽ sáng.BKIT HARDWARE CLUB – www.bkit4u.com 48 Hướng dẫn sử dụng Kit 89 position : vị trí bắt đầu hiển thị giá trị, chẳng hạn người dùng mún hiển thị số 123từ vị trí thứ 2 tính từ trái thì phải thiết lập position là 1 (position = 0 là led ngoài cùng bêntrái). Biến position này người dùng phải dùng hàm set_positon thì mới thay đổi được (chitiết xem bên dưới). led7_index : vị trí sẽ xuất data, biến này được dùng trong hàm scan_led, ngườidùng không can thiệp vào biến này được. is_valid_data : biến dùng trong hàm scan_led, biến này để tạm dừng việc quét ledtrong khi đang thay đổi buffer hiển thị, người dùng cũng không can thiệp được vào biếnnày.7.3.2 Hàm clear_led7() void clear_led7() { led7_buffer[0] = 0x00; led7_buffer[1] = 0x00; led7_buffer[2] = 0x00; led7_buffer[3] = 0x00; led7_buffer[4] = 0x00; led7_buf ...