📄 kbd.c
字号:
/* vim: set sw=8 ts=8 si : *//********************************************** Author: Guido Socher, Copyright: GPL * * read the keyboard**********************************************/#include <avr/io.h>#include "avr_compat.h"#include "lcd.h"// it looks like output port settings need time to propagate. Maybe// caused by input capacitors on the lcd which connected there too.static void kbd_wait(void){ unsigned char i=100; while(i){i--;}}void init_kbd(void) { /* init lcd sets those already so we comment them out here: sbi(DDRB,PB7); // output line sbi(DDRB,PB2); // output line sbi(DDRB,PB1); // output line sbi(DDRB,PB0); // output line */ cbi(DDRB,PINB5); // input line cbi(DDRB,PINB3); // input line sbi(PORTB,PINB5); // internal pullup resistor on sbi(PORTB,PINB3); // internal pullup resistor on}unsigned char check_u_button(int *u) { // check U+ button: sbi(PORTB,PB7); sbi(PORTB,PB2); sbi(PORTB,PB1); cbi(PORTB,PB0); kbd_wait(); if (bit_is_clear(PINB,PINB5)){ (*u)++; return(1); } // check U- button: sbi(PORTB,PB7); sbi(PORTB,PB2); cbi(PORTB,PB1); sbi(PORTB,PB0); kbd_wait(); if (bit_is_clear(PINB,PINB5) && (*u)>0){ (*u)--; if((*u)<0){ (*u)=0; } return(1); } return(0);}unsigned char check_i_button(int *i) { // check I+ button: sbi(PORTB,PB7); cbi(PORTB,PB2); sbi(PORTB,PB1); sbi(PORTB,PB0); kbd_wait(); if (bit_is_clear(PINB,PINB5)){ (*i)++; return(1); } // check I- button: cbi(PORTB,PB7); sbi(PORTB,PB2); sbi(PORTB,PB1); sbi(PORTB,PB0); kbd_wait(); if (bit_is_clear(PINB,PINB5) && (*i)>0){ (*i)--; if((*i)<0){ (*i)=0; } return(1); } return(0);}unsigned char check_store_button(void) { // check store button: cbi(PORTB,PB2); kbd_wait(); if (bit_is_clear(PINB,PINB3)){ return(1); } return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -