Hình 5-1 Lưu đồ thuật toán chương trình MONITOR cho PIC MASTER
5.1.4. Đọc bàn phím
Các phím điều khiển được nối vào PORT A (Từ A0 đến A4) của PIC MASTER, do vậy việc đọc các phím chính là đọc trạng thái của PORT A.
Để tạo ra được các MENU trên màn hình LCD, điều trước tiên là chúng ta phải đọc được bàn phím và quản lý được con trỏ đang nhấp nháy tại vị trí nào trên màn hình LCD.
Các phím đều được thiết kế " Treo cao, quét thấp", do đó khi NSD ấn phím thì PIN tương ứng của PIC MASTER sẽ có giá trị bằng 0 ( Mức thấp); Ngược lại khi NSD không ấn phím đó, thì PIN tương ứng của PIC MASTER có giá trị bằng 1 (Mức cao).
Đoạn mã nguồn CCS trong chương trình MONITOR của PIC MASTER dưới đây, sẽ thực hiện đọc bàn phím điều khiển bao gồm các phím:
- Phím chọn MENU. - Phím di chuyển con trỏ. - Phím tăng 1 đơn vị (+1). - Phím giảm 1 đơn vị (-1). - Phím tăng 20 đơn vi (+20). - Phím giảm 20 đơn vị (-20).
- Phím xác nhận sự thay đổi ( ENTER).
//======================DOC BAN PHIM HL HUBAO============== void docphim_thubao()
{
signed int8 ts;
doc_phim=input_A(); //doc ban phim ts=0;
if (doc_phim !=31) {xuat=1; delay_ms(150);} //phai xuat lai LCD if (doc_phim==29) {++contro1;} //di chuyển con trỏ.
if (doc_phim==27) {ts=1;} //tăng 1 đơn vị [+-->] if (doc_phim==25 && contro1==3) {ts=20;} //tăng 20 đơn vị if (doc_phim==25 && contro1==4) {ts=20;} // tăng 20 đơn vị if (doc_phim==25 && contro1==9) {ts=20;} / tăng 20 đơn vị if (doc_phim==25 && contro1==6) {ts=20;} // tăng 20 đơn vị if (doc_phim==25 && contro1==7) {ts=20;} // tăng 20 đơn vị if (doc_phim==25 && contro1==8) {ts=20;} / tăng 20 đơn vị if (doc_phim==23) {ts=-1;} //giảm 1 đơn vị
if (doc_phim==21 && contro1==3 && bd>20) {ts=-20;} //giảm 20đơn vị if (doc_phim==21 && contro1==4 && bd1>20) {ts=-20;} // giảm 20đơn vị if (doc_phim==21 && contro1==9 && td>20) {ts=-20;} // giảm 20đơn vị if (doc_phim==21 && contro1==6 && nd>20) {ts=-20;} // giảm 20đơn vị if (doc_phim==21 && contro1==7 && nd1>20) {ts=-20;} // giảm 20đơn vị if (doc_phim==21 && contro1==8 && sai>20) {ts=-20;} // giảm 20đơn vị if (doc_phim==15) // ấn ENTER
{ if (chu>4) {doc_epROM(kenh_thu);} //doc bd trong epROM -> slave ghi_hlthu(); i2c_thubao(kenh_thu);
}
if (ts!=0) {
switch (contro1)
{ case 1: kenh_thu=kenh_thu+ts; break; //kenh ra case 2: chu=chu+ts; break; //loai dien
case 3: bd=bd+ts; break; //ban dien bat dau
case 4: bd1=bd1+ts; break; //ban dien ket thuc case 5: msg=msg+ts; break; //phat dau dien ? case 6: nd=nd+ts; break; //nhom dien bat dau case 7: nd1=nd1+ts; break; //nhom ket thuc case 8: sai=sai+ts; break; //nhom dinh chinh case 9: td=td+ts; break; //toc do ban dau case 10: td1=td1+ts; break; //tu tang toc do case 11: dta=dta+ts; break; //do dai ta= ? tich } ts=0; } if (contro1>11) { contro1=1; } if (kenh_thu<1) {kenh_thu=1;} if (kenh_thu>15) {kenh_thu=15;} if (chu<1) {chu=1;} if (chu>6) {chu=6;}
if (chu<5) {bien16=999;} else {bien16=100; bd1=bd;} //ban dien trong ROM luon 100 nhom va phat 1 ban.
if (bd<1) { bd=1;} if (bd>bien16) {bd=bien16;} if (bd1<bd) {bd1=bd;} if (bd1>bien16) {bd1=bien16;} if (msg<1) {msg=1;} if (msg>2) {msg=2;} if (nd<1) {nd=1;} if (nd>100) {nd=100;} if (nd1<nd) {nd1=nd;} if (nd1>100) {nd1=100;} if (sai<1) {sai=1;}
if (sai>101) {sai=101;} if (td<20) {td=20;} if (td>255) {td=255;} if (td1<1) {td1=1;}
if (td1>10) {td1=10;} //khi tinh thi - 1 if (dta<2) {dta=2;}
if (dta>20) {dta=20;}
if (doc_phim==30) //[Mode] sang HL phat bao. { chedo=48+1; contro1=1; xuat=2; th_bao=15; //thongbao(); } }