Xử lí nút ấn button
Lập trình giao tiếp, xử lí button với vi điều khiển như thế nào?
Nút ấn, trong thuật ngữ điện tử còn gọi là Button. Nó được sử dụng rất nhiều trong các project vi điều khiển. Button giúp chúng ta dễ dàng trong việc chọn lựa một hay nhiều điều kiện đầu vào nào đó để vi điều khiển xử lí cho kết quả đầu ra.
Cụ thể trong ví dụ này chúng ta thực hiện một yêu cầu như sau: mỗi khi PORTB.f1 thay đổi trạng thái logic (0<->1) thì Led ở PORTB.f3 cũng thay đổi trạng thái theo.
Với yêu cầu trên ta có thể viết một đoạn code bằng ngôn ngữ C như sau:
if(PORTB.f1==0){
PORTB.f3=1;
delay_ms(200);
}
if(PORTB.f1==1){
PORTB.f3=0;
delay_ms(200);
}
Sau đây là một project hoàn chỉnh được viết bằng MikroC Pro:
/*Project simple button
CMU: 16f887A, craystal: 8 MHz
Author: Huynh Minh Trung
Web: giaoan.link
Description: Thuc hanh cach su dung button tren vi dieu khien
*/
void main() {
TRISB=0x02; //Portb.f1 là input, lại các pin khác của portb là output
PORTB=0x00; // Xóa trạng thái của portb
do{
if(PORTB.f1==0){
PORTB.f3=1;
delay_ms(200);
}
if(PORTB.f1==1){
PORTB.f3=0;
delay_ms(200);
}
}while(1);
}
Trong đoạn code trên chúng ta đã sử dụng hai hàm if để kiểm tra trạng thái của Button được kết nối vào PORTB.f1 (pin1) của vi điều khiển 16f877A. Kết quả nhận được như ý muốn, có nghĩa là khi trạng thái logic của PORTB.f1 là 0 thì Led ở PORTB.f3 sáng, ngược lại khi trạng thái logic của PORTB.f1 là 1 thì Led ở PORTB.f3 tắt. Tuy đã thực hiện đúng yêu cầu đặt ra nhưng code vẫn còn dài. Trong trình biên dịch MikroC có một thư viện Button sẽ giúp chúng ta kiểm tra trạng thái logic trên một pin của vi điều khiển một cách dễ dàng và ngắn gọn, sau đây là cấu trúc của hàm:
- port: một trong các port của vi điều khiển, ví dụ như PORTA, PORTB…
- pin: vị trí pin mà button kết nối vào, ví dụ như nếu pin 1 thì ta điền số 1 vào đó, pin thứ 2 thì điền số 2….
- time: thời gian trễ, tính bằng mili giây
- active_stase: trạng thái logic cần kiểm tra 0 hay 1
if(Button(&PORTB, 1, 1, 0)){
PORTB.f3=~PORTB.f3;
delay_ms(200);
}
Sau đây là một project hoàn chỉnh được viết theo hàm Button được cung cấp trong thư viện của trình biên dịch MikroC:
/*Project simple button
CMU: 16f887A, craystal: 8 MHz
Site: giaoan.link
Description: Thuc hanh cach su dung button tren vi dieu khien
*/
void main() {
int a;
TRISB=0x02; //Portb.f0 input, con lai la output
PORTB=0x00; // Xoa Portb
do{
if(Button(&PORTB, 1, 1, 0)){
PORTB.f3=~PORTB.f3; //Đảo trạng thái PORTB.f3
delay_ms(200);
}
}while(1);
}
Bạn thấy đó, với MikroC chúng ta có rất nhiều hàm để tối ưu code, thuận tiện hơn trong lập trình.
Như vậy, trong ví dụ đơn giản về Button giúp bạn hiểu được cách xử lí một điều kiện trên vi điều khiển, cách cấu hình (config) các pin input và output trên vi điều khiển, cũng như học được cách thực hành hàm Button trong MikroC. Trong ví dụ tiếp theo chúng ta sẽ học về led 7 segment và cách quét led, sau đó sẽ tạo một project phức tạp hơn, bao gồm Button và Led 7 Segment. Bạn có thể tải project simple button gồm file C, Hex, và file mô phỏng ở link dưới.