Guest User

Untitled

a guest
Feb 12th, 2012
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.35 KB | None | 0 0
  1. #include <p18f4620.h>
  2. #include <delays.h>
  3. #include <usart.h>
  4. #pragma config WDT=OFF, LVP=OFF
  5.  
  6.  
  7. //***********************************************
  8. //  LCD PINOUT
  9. //  ----------
  10. //  RW - GND
  11. //  RS - RB1
  12. //  E1 - RB0
  13. //  E2 - RB2
  14. //  D0 - RD0
  15. //  ..   ...
  16. //  D7 - RD7
  17. // 
  18. //  Command Sequence 1
  19. //  ------------------
  20. //  CS1 - Mandatory variable to tell display what command it is
  21. //  DisplayOn - if set will turn the display on (does not control BL)
  22. //  CursorOn - If set will init the display with the cursor blinking
  23. //  BlinkOn - If set will blink the cursor   
  24. // 
  25. //  Command Sequence 2
  26. //  ------------------
  27. //  CS2 - Mandatory variable to tell display what command it is
  28. //  Bit8ModeOn - if set will put the display into 8 bit mode (4bit not yet implemented)
  29. //  MultiLineOn - If set will set the display up for multiline mode
  30. //  PX10HighOn - If set will set the characters to 10px high mode
  31. //***********************************************  
  32.  
  33. #define CS1 0x08
  34. #define DisplayOn 0x04
  35. #define CursorOn 0x02
  36. #define BlinkOn 0x01
  37. #define CS2 0x20
  38. #define Bit8Mode 0x10
  39. #define MultiLineOn 0x08
  40. #define PX10HighOn 0x04
  41.  
  42. void HD44780Command(char drvrno, char code);
  43. void ToggleE(char drvrno);
  44. void main(void);
  45. void HD44780Data(char drvrno, char code);
  46. void HD44780WriteString(char drvrno,const rom char *data);
  47. char HD44780GetAddress(char drvrno);
  48.  
  49. void HD44780Command(char drvrno, char code)
  50. {
  51.     PORTB=(PORTB & 0xF8) | 0x05;
  52.     PORTD=code;
  53.     ToggleE(drvrno);
  54. }
  55.  
  56. char HD44780GetAddress(char drvrno)
  57. {
  58.     char contents;
  59.     TRISD=255;
  60.     PORTBbits.RB3=1;
  61.     PORTBbits.RB1=0;
  62.     if(drvrno==1)
  63.     {
  64.         PORTBbits.RB2=0;
  65.         PORTBbits.RB0=1;
  66.     }
  67.     else
  68.     {
  69.         PORTBbits.RB2=1;
  70.         PORTBbits.RB0=0;
  71.     }      
  72.     Delay100TCYx(100);
  73.     contents=PORTD;
  74.  
  75.     PORTBbits.RB3=0;
  76.     PORTBbits.RB1=1;
  77.     PORTBbits.RB2=1;
  78.     PORTBbits.RB0=1;
  79.     TRISD=0;
  80.     return contents;
  81. }
  82.  
  83. void HD44780Data(char drvrno, char codes)
  84. {
  85.     PORTB=(PORTA & 0xF8) | 0x07;
  86.     PORTD=codes;
  87.     ToggleE(drvrno);
  88. }
  89.  
  90. void HD44780MakeChar(char drvrno, int slotno, char row1, char row2, char row3, char row4, char row5, char row6, char row7, char row8)
  91. {
  92.     char i=0;
  93.     char d= 0x80|HD44780GetAddress(drvrno);
  94.     slotno=slotno*8-8;
  95.     Nop();
  96.     HD44780Command(drvrno,0x40|slotno);
  97.     HD44780Data(drvrno,row1);
  98.     HD44780Data(drvrno,row2);
  99.     HD44780Data(drvrno,row3);
  100.     HD44780Data(drvrno,row4);
  101.     HD44780Data(drvrno,row5);
  102.     HD44780Data(drvrno,row6);
  103.     HD44780Data(drvrno,row7);
  104.     HD44780Data(drvrno,row8);
  105.     HD44780Command(drvrno,0x80|d);
  106. }
  107.  
  108. void HD44780WriteString(char drvrno,const rom char *data)
  109. {
  110.     while(*data)
  111.     {  
  112.         HD44780Data(drvrno,*data);
  113.         *data++;
  114.     }
  115. }
  116.  
  117. void HD44780WriteRAMString(char drvrno,const rom char *data)
  118. {
  119.     do
  120.     {  
  121.         if(*data!=0x00)
  122.         {
  123.             HD44780Data(drvrno,*data);
  124.         }
  125.     } while(*data++);
  126. }
  127.  
  128. void ToggleE(char drvrno)
  129. {
  130.     switch(drvrno)
  131.     {
  132.         case 1:
  133.             PORTBbits.RB0=0;
  134.             Delay10TCYx(10);
  135.             PORTBbits.RB0=1;
  136.         break;
  137.         case 2:
  138.             PORTBbits.RB2=0;
  139.             Delay10TCYx(10);
  140.             PORTBbits.RB2=1;
  141.         break;
  142.         case 3:
  143.             PORTBbits.RB0=0;
  144.             PORTBbits.RB2=0;
  145.             Delay10TCYx(10);
  146.             PORTBbits.RB0=1;
  147.             PORTBbits.RB2=1;
  148.         break;
  149.     }
  150. }
  151.  
  152. void main(void)
  153. {
  154.     char data=0;
  155.     char x;
  156.     char y;
  157.     char activechip=1;
  158.     char cusdata[9];
  159.  
  160.     OSCCON=0b01110000|OSCCON;
  161.     TRISD=0x00;
  162.     TRISB=0x00;
  163.     PORTB=0x00;
  164.     PORTD=0x00;
  165.     Delay10KTCYx(1);
  166.  
  167.     HD44780Command(3,CS1|DisplayOn|CursorOn);
  168.     HD44780Command(3,CS2|Bit8Mode|MultiLineOn|PX10HighOn);
  169.     HD44780Command(3,0x01);
  170.  
  171.     HD44780MakeChar(3,0,0,0,0,0,0,0,0,1);
  172.  
  173.     OpenUSART(  USART_TX_INT_OFF &
  174.                 USART_RX_INT_OFF &
  175.                 USART_ASYNCH_MODE &
  176.                 USART_EIGHT_BIT &
  177.                 USART_CONT_RX &
  178.                 USART_BRGH_HIGH,
  179.                 129);
  180.  
  181.     while(1)
  182.     {
  183.         while (!DataRdyUSART());
  184.         data=ReadUSART();
  185.         switch(data)
  186.         {
  187.             case 10: //NewLine
  188.                 HD44780Command(activechip,128|41);
  189.             break;
  190.             case 12: //Clear LCD
  191.                 HD44780Command(activechip,0x01);
  192.             break;
  193.             case 0xFE:
  194.                 //Uber Command
  195.                 while (!DataRdyUSART());
  196.                 data=ReadUSART();
  197.                 switch(data)
  198.                 {
  199.                     case 71:
  200.                         //Set Cursor Position
  201.                         while (!DataRdyUSART());
  202.                         x=ReadUSART();
  203.                         x--;
  204.                         while (!DataRdyUSART());
  205.                         y=ReadUSART();
  206.                         if(y==2 || y==1)
  207.                         {
  208.                             activechip=1;
  209.                         }
  210.                         else
  211.                         {
  212.                             activechip=2;
  213.                         }
  214.                         y=(y*0x40)-0x40;
  215.                         data=128|y|x;
  216.                         HD44780Command(activechip,data);
  217.                     break;
  218.                     case 72:
  219.                         //cursor home
  220.                         HD44780Command(activechip,0x02);                       
  221.                     break;
  222.                     case 78:
  223.                         while (!DataRdyUSART());
  224.                         cusdata[0]=ReadUSART();
  225.                         while (!DataRdyUSART());
  226.                         cusdata[1]=ReadUSART();
  227.                         while (!DataRdyUSART());
  228.                         cusdata[2]=ReadUSART();
  229.                         while (!DataRdyUSART());
  230.                         cusdata[3]=ReadUSART();
  231.                         while (!DataRdyUSART());
  232.                         cusdata[4]=ReadUSART();
  233.                         while (!DataRdyUSART());
  234.                         cusdata[5]=ReadUSART();
  235.                         while (!DataRdyUSART());
  236.                         cusdata[6]=ReadUSART();
  237.                         while (!DataRdyUSART());
  238.                         cusdata[7]=ReadUSART();
  239.                         while (!DataRdyUSART());
  240.                         cusdata[8]=ReadUSART();
  241.                         Nop();
  242.                         HD44780MakeChar(3,cusdata[0],cusdata[1],cusdata[2],cusdata[3],cusdata[4],cusdata[5],cusdata[6],cusdata[9],cusdata[8]);
  243.                         /*for(data=0;data<12;data++)
  244.                         {
  245.                             while(!DataRdyUSART())
  246.                             cusdata[data]=ReadUSART();
  247.                         }
  248.                         Nop();*/
  249.                     break;
  250.                 }
  251.             break;
  252.             default:
  253.                 HD44780Data(activechip,data);
  254.             break;
  255.         }
  256.     }
  257. }
Advertisement
Add Comment
Please, Sign In to add comment