Advertisement
Guest User

Untitled

a guest
Dec 15th, 2016
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program other
  2.  
  3. ' Declarations section
  4. dim Data_Pin as sbit at RA0_bit
  5. dim Clk_Pin as sbit at RA1_bit
  6. dim Enable_Pin as sbit at RA2_bit
  7.  
  8. 'Always mention this definition statement
  9. dim Low_Nibble, High_Nibble, p, q,  Mask, N,t, RS, Flag, temp as byte
  10. dim Message1 as string[20]
  11. dim Message2 as string[20]
  12.  
  13. sub procedure Write_LCD_Nibble(dim N as byte)
  14.  Enable_Pin = 0
  15.  '****** Write RS *********
  16.  Clk_Pin = 0
  17.  Data_Pin = RS
  18.  Clk_Pin = 1
  19.  Clk_Pin = 0
  20.  '// ****** End RS Write
  21.  
  22.  'Shift in 4 bits
  23.  Mask = 8
  24.   for t=0 to 4
  25.    Flag = N and Mask
  26.    if Flag =0 then
  27.       Data_Pin = 0
  28.    else
  29.        Data_Pin = 1
  30.    end if
  31.    Clk_Pin = 1
  32.    Clk_Pin = 0
  33.    Mask = Mask >> 1
  34.   next t
  35. '  // One more clock because SC and ST clks are tied
  36.   Clk_Pin = 1
  37.   Clk_Pin = 0
  38.   Data_Pin = 0
  39.   Enable_Pin = 1
  40.   Enable_Pin = 0
  41. end sub
  42. '// ******* Write Nibble Ends
  43.  
  44.  sub procedure Write_LCD_Data(dim D as byte)
  45.    RS = 1   'It is Data, not command
  46.    Low_Nibble = D and 15
  47.    High_Nibble = D/16
  48.    Write_LCD_Nibble(High_Nibble)
  49.    Write_LCD_Nibble(Low_Nibble)
  50.  end sub
  51.  
  52. sub procedure Write_LCD_Cmd(dim C as  byte)
  53.    RS = 0  'It is command, not data
  54.    Low_Nibble = C and 15
  55.    High_Nibble = C/16
  56.    Write_LCD_Nibble(High_Nibble)
  57.    Write_LCD_Nibble(Low_Nibble)
  58. end sub
  59.  
  60. sub procedure Initialize_LCD()
  61.    Delay_ms(50)
  62.    Write_LCD_Cmd(0x20) ' Wake-Up Sequence
  63.    Delay_ms(50)
  64.    Write_LCD_Cmd(0x20)
  65.    Delay_ms(50)
  66.    Write_LCD_Cmd(0x20)
  67.    Delay_ms(50)
  68.    Write_LCD_Cmd(0x28)  '4-bits, 2 lines, 5x7 font
  69.    Delay_ms(50)
  70.    Write_LCD_Cmd(0x0C)  ' Display ON, No cursors
  71.    Delay_ms(50)
  72.    Write_LCD_Cmd(0x06)   ' Entry mode- Auto-increment, No Display shifting
  73.    Delay_ms(50)
  74.    Write_LCD_Cmd(0x01)
  75.    Delay_ms(50)
  76. end sub
  77.  
  78. sub procedure Position_LCD(dim x, y as  byte)
  79.    temp = 127 + y
  80.    if x = 2 then
  81.       temp = temp + 64
  82.    end if
  83.    Write_LCD_Cmd(temp)
  84. end sub
  85. sub procedure Write_LCD_Text( dim ptr as ^byte)
  86.    dim temp as byte
  87.    temp = ptr
  88.    while temp > 0
  89.      Write_LCD_Data(temp)
  90.      inc(temp)
  91.    wend
  92. end sub
  93.  
  94. main:
  95. Message1 = "3-Wire LCD"
  96. Message2 = "using 74HC595"
  97.  
  98. CMCON = 7  'Disable Comparators
  99. TRISB = 0  'All Outputs
  100. TRISA = 0
  101. PORTB = 0
  102. Initialize_LCD()
  103.  
  104. while (TRUE)
  105.    Position_LCD(1,4)
  106.    Write_LCD_Text(@Message1)
  107.    Position_LCD(2,2)
  108.    Write_LCD_Text(@Message2)
  109.    Delay_ms(1500)
  110.    Write_LCD_Cmd(0x01)  ' Clear LCD
  111.    delay_ms(1000)
  112. wend
  113. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement