sbit LCD_RS at LATD2_bit; sbit LCD_EN at LATD3_bit; sbit LCD_D4 at LATD4_bit; sbit LCD_D5 at LATD5_bit; sbit LCD_D6 at LATD6_bit; sbit LCD_D7 at LATD7_bit; sbit LCD_RS_Direction at TRISD2_bit; sbit LCD_EN_Direction at TRISD3_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; //-------------------- keypad --------------------// int states[16]; void put_char(int i,unsigned int *port,unsigned int pin, char c) { if(Button(port, pin, 1, 1)) states[i] = 1; if(Button(port, pin, 1, 0) && states[i]) { if(c >= '0' && c <= '9' || c == ' ') Lcd_Chr_CP(c); else Lcd_Cmd(c); states[i] = 0; } } void main() { Lcd_Init(); TRISE |= 0b0000000011110000; TRISF |= 0b0000000011110000; TRISG |= 0b1111000000001111; do { put_char(1,&PORTE, 4, '1'); put_char(2,&PORTF, 4, '2'); put_char(3,&PORTG, 0, '3'); put_char(4,&PORTE, 5, '4'); put_char(5,&PORTF, 5, '5'); put_char(6,&PORTG, 1, '6'); put_char(7,&PORTE, 6, '7'); put_char(8,&PORTf, 6, '8'); put_char(9,&PORTG, 2, '9'); put_char(10,&PORTF, 7, '0'); put_char(11,&PORTG, 14, ' '); put_char(12,&PORTE, 7, _Lcd_Move_Cursor_Left); put_char(13,&PORTG, 3, _Lcd_Move_Cursor_Right); put_char(14,&PORTG, 12, _Lcd_First_Row); put_char(15,&PORTG, 13, _Lcd_Second_Row); put_char(0,&PORTG, 15, _Lcd_Clear); }while(1); }