========================================= // PIC pin assignment // // PORTA.0 -> AN0 (battery voltage multiplied by R6/(R5+R6)) (analog IN) // PORTA.1 -> AN1 (current pickup) (analog IN) // PORTA.2 -> spare (OUT) // PORTA.3 -> spare (Analog IN may be temperature reading) // PORTA.4 -> BUZZER (OUT) // PORTA.5 -> spare (OUT) // // PORTB.0 -> FAN cooler (OUT) // PORTB.1 -> D4 data bus for display (OUT) // PORTB.2 -> D5 data bus for display (OUT) // PORTB.3 -> D6 data bus for display (OUT) // PORTB.4 -> D7 data bus for display (OUT) // PORTB.5 -> UP key (IN) // PORTB.6 -> DOWN key (IN) // PORTB.7 -> OK/ENTER key (IN) // // PORTC.0 -> spare (OUT) // PORTC.1 -> PWM2 DISCHARGE (OUT) // PORTC.2 -> PWM1 CHARGE (OUT) // PORTC.3 -> RS register/data for display (OUT) // PORTC.4 -> RW read/write for display (OUT) // PORTC.5 -> E enable for display (OUT) // PORTC.6 -> TX RS232 trasmit (OUT) // PORTC.7 -> RX RS232 receive (IN) //========================================= //========================================= // Display management routines //=============================================================================================================================================== procedure lcd4(a,b:byte); //a command code, b=0 command, b=1 data; begin PORTC.3:=b.0; PORTC.4:=0; PORTB.1:=a.4; PORTB.2:=a.5; PORTB.3:=a.6; PORTB.4:=a.7; PORTC.5:=1; //generic 4 bit command or data write PORTC.5:=0; PORTB.1:=a.0; PORTB.2:=a.1; PORTB.3:=a.2; PORTB.4:=a.3; PORTC.5:=1; PORTC.5:=0; delay_us(1000); end; procedure lcd8(a:byte); begin PORTC.3:=0; PORTC.4:=0; PORTB.1:=a.4; PORTB.2:=a.5; //generic 8 bit command write PORTB.3:=a.6; PORTB.4:=a.7; PORTC.5:=1; PORTC.5:=0; end; procedure cls; begin lcd4(1,0); delayms(5); end; procedure lcd_df_config; begin INTCON.GIE:=0; delayms(100); //start with 8 bit interface lcd8(0x30); delayms(10); lcd8(0x30); delayms(10); lcd8(0x30); delayms(10); lcd8(0x20); delayms(10); lcd4(0x28,0); //now we are on 4 bit interface lcd4(0x0C,0); lcd4(6,0); cls; delayms(250); lcd4(0x80,0); lcd4(32,1); //write a space to test cls; //clear all INTCON.GIE:=1; end;