Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <p18f4620.h>
- #include <delays.h>
- #include <usart.h>
- #pragma config WDT=OFF, LVP=OFF
- //***********************************************
- // LCD PINOUT
- // ----------
- // RW - GND
- // RS - RB1
- // E1 - RB0
- // E2 - RB2
- // D0 - RD0
- // .. ...
- // D7 - RD7
- //
- // Command Sequence 1
- // ------------------
- // CS1 - Mandatory variable to tell display what command it is
- // DisplayOn - if set will turn the display on (does not control BL)
- // CursorOn - If set will init the display with the cursor blinking
- // BlinkOn - If set will blink the cursor
- //
- // Command Sequence 2
- // ------------------
- // CS2 - Mandatory variable to tell display what command it is
- // Bit8ModeOn - if set will put the display into 8 bit mode (4bit not yet implemented)
- // MultiLineOn - If set will set the display up for multiline mode
- // PX10HighOn - If set will set the characters to 10px high mode
- //***********************************************
- #define CS1 0x08
- #define DisplayOn 0x04
- #define CursorOn 0x02
- #define BlinkOn 0x01
- #define CS2 0x20
- #define Bit8Mode 0x10
- #define MultiLineOn 0x08
- #define PX10HighOn 0x04
- void HD44780Command(char drvrno, char code);
- void ToggleE(char drvrno);
- void main(void);
- void HD44780Data(char drvrno, char code);
- void HD44780WriteString(char drvrno,const rom char *data);
- char HD44780GetAddress(char drvrno);
- void HD44780Command(char drvrno, char code)
- {
- PORTB=(PORTB & 0xF8) | 0x05;
- PORTD=code;
- ToggleE(drvrno);
- }
- char HD44780GetAddress(char drvrno)
- {
- char contents;
- TRISD=255;
- PORTBbits.RB3=1;
- PORTBbits.RB1=0;
- if(drvrno==1)
- {
- PORTBbits.RB2=0;
- PORTBbits.RB0=1;
- }
- else
- {
- PORTBbits.RB2=1;
- PORTBbits.RB0=0;
- }
- Delay100TCYx(100);
- contents=PORTD;
- PORTBbits.RB3=0;
- PORTBbits.RB1=1;
- PORTBbits.RB2=1;
- PORTBbits.RB0=1;
- TRISD=0;
- return contents;
- }
- void HD44780Data(char drvrno, char codes)
- {
- PORTB=(PORTA & 0xF8) | 0x07;
- PORTD=codes;
- ToggleE(drvrno);
- }
- void HD44780MakeChar(char drvrno, int slotno, char row1, char row2, char row3, char row4, char row5, char row6, char row7, char row8)
- {
- char i=0;
- char d= 0x80|HD44780GetAddress(drvrno);
- slotno=slotno*8-8;
- Nop();
- HD44780Command(drvrno,0x40|slotno);
- HD44780Data(drvrno,row1);
- HD44780Data(drvrno,row2);
- HD44780Data(drvrno,row3);
- HD44780Data(drvrno,row4);
- HD44780Data(drvrno,row5);
- HD44780Data(drvrno,row6);
- HD44780Data(drvrno,row7);
- HD44780Data(drvrno,row8);
- HD44780Command(drvrno,0x80|d);
- }
- void HD44780WriteString(char drvrno,const rom char *data)
- {
- while(*data)
- {
- HD44780Data(drvrno,*data);
- *data++;
- }
- }
- void HD44780WriteRAMString(char drvrno,const rom char *data)
- {
- do
- {
- if(*data!=0x00)
- {
- HD44780Data(drvrno,*data);
- }
- } while(*data++);
- }
- void ToggleE(char drvrno)
- {
- switch(drvrno)
- {
- case 1:
- PORTBbits.RB0=0;
- Delay10TCYx(10);
- PORTBbits.RB0=1;
- break;
- case 2:
- PORTBbits.RB2=0;
- Delay10TCYx(10);
- PORTBbits.RB2=1;
- break;
- case 3:
- PORTBbits.RB0=0;
- PORTBbits.RB2=0;
- Delay10TCYx(10);
- PORTBbits.RB0=1;
- PORTBbits.RB2=1;
- break;
- }
- }
- void main(void)
- {
- char data=0;
- char x;
- char y;
- char activechip=1;
- char cusdata[9];
- OSCCON=0b01110000|OSCCON;
- TRISD=0x00;
- TRISB=0x00;
- PORTB=0x00;
- PORTD=0x00;
- Delay10KTCYx(1);
- HD44780Command(3,CS1|DisplayOn|CursorOn);
- HD44780Command(3,CS2|Bit8Mode|MultiLineOn|PX10HighOn);
- HD44780Command(3,0x01);
- HD44780MakeChar(3,0,0,0,0,0,0,0,0,1);
- OpenUSART( USART_TX_INT_OFF &
- USART_RX_INT_OFF &
- USART_ASYNCH_MODE &
- USART_EIGHT_BIT &
- USART_CONT_RX &
- USART_BRGH_HIGH,
- 129);
- while(1)
- {
- while (!DataRdyUSART());
- data=ReadUSART();
- switch(data)
- {
- case 10: //NewLine
- HD44780Command(activechip,128|41);
- break;
- case 12: //Clear LCD
- HD44780Command(activechip,0x01);
- break;
- case 0xFE:
- //Uber Command
- while (!DataRdyUSART());
- data=ReadUSART();
- switch(data)
- {
- case 71:
- //Set Cursor Position
- while (!DataRdyUSART());
- x=ReadUSART();
- x--;
- while (!DataRdyUSART());
- y=ReadUSART();
- if(y==2 || y==1)
- {
- activechip=1;
- }
- else
- {
- activechip=2;
- }
- y=(y*0x40)-0x40;
- data=128|y|x;
- HD44780Command(activechip,data);
- break;
- case 72:
- //cursor home
- HD44780Command(activechip,0x02);
- break;
- case 78:
- while (!DataRdyUSART());
- cusdata[0]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[1]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[2]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[3]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[4]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[5]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[6]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[7]=ReadUSART();
- while (!DataRdyUSART());
- cusdata[8]=ReadUSART();
- Nop();
- HD44780MakeChar(3,cusdata[0],cusdata[1],cusdata[2],cusdata[3],cusdata[4],cusdata[5],cusdata[6],cusdata[9],cusdata[8]);
- /*for(data=0;data<12;data++)
- {
- while(!DataRdyUSART())
- cusdata[data]=ReadUSART();
- }
- Nop();*/
- break;
- }
- break;
- default:
- HD44780Data(activechip,data);
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment