Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. /*
  2. * clcd.c
  3. *
  4. * Created: 2019-07-06 오후 3:07:03
  5. * Author: user
  6. */
  7.  
  8. #include "clcd.h"
  9. #include "uart.h"
  10.  
  11. #define F_SCL 100000UL // SCL frequency
  12.  
  13. #define RS1_EN1 0x05
  14. #define RS1_EN0 0x01
  15. #define RS0_EN1 0x04
  16. #define RS0_EN0 0x00
  17. #define BackLight 0x08
  18.  
  19. uint8_t I2C_addr_PCF8574 = (0x20 << 1);
  20.  
  21. /*
  22. RS 0
  23. RW 1
  24. E 2
  25. BT 3
  26. */
  27.  
  28. void twi_transmit(uint8_t data)
  29. {
  30. while(i2c_transmit(I2C_addr_PCF8574, &data, 1));
  31. }
  32.  
  33. void i2c_lcd_init(void)
  34. {
  35. i2c_init();
  36. _delay_ms(2000);
  37.  
  38. i2c_lcd_command_8(0x30); _delay_ms(10);
  39. i2c_lcd_command_8(0x30); _delay_ms(5);
  40. i2c_lcd_command_8(0x30); _delay_us(100);
  41. i2c_lcd_command_8(0x20); _delay_us(100);
  42.  
  43. printf("Before Initialize... \r\n");
  44. i2c_lcd_command(0x28); _delay_us(50); // function set(4-bit, 2 line, 5x7 dot) i2c_lcd_command(0x0C); _delay_us(50); // display control(display ON, cursor OFF)
  45. i2c_lcd_command(0x08); _delay_us(50); // display control(display ON, cursor OFF)
  46. i2c_lcd_command(0x01); _delay_ms(3); // clear display
  47. i2c_lcd_command(0x06); _delay_us(50); // entry mode set(increment, not shift)
  48. i2c_lcd_command(0x0C); _delay_us(50); // entry mode set(increment, not shift)
  49.  
  50. printf("Connect Ok\r\n");
  51. }
  52.  
  53. void i2c_lcd_command_8(uint8_t command)
  54. {
  55. uint8_t c_buf[2];
  56.  
  57. c_buf[0] = (command&0xF0) | RS0_EN1 | BackLight;
  58. c_buf[1] = (command&0xF0) | RS0_EN0 | BackLight;
  59.  
  60. twi_transmit(c_buf[0]); _delay_ms(1);
  61. twi_transmit(c_buf[1]); _delay_ms(1);
  62. }
  63.  
  64. void i2c_lcd_command(uint8_t command)
  65. {
  66. uint8_t c_buf[4];
  67.  
  68. c_buf[0] = (command &0xF0) | RS0_EN1 | BackLight;
  69. c_buf[1] = (command &0xF0) | RS0_EN0 | BackLight;
  70.  
  71. c_buf[2] = ((command <<4)&0xF0) | RS0_EN1 | BackLight;
  72. c_buf[3] = ((command <<4)&0xF0) | RS0_EN0 | BackLight;
  73.  
  74. twi_transmit(c_buf[0]); _delay_ms(1);
  75. twi_transmit(c_buf[1]); _delay_ms(1);
  76. twi_transmit(c_buf[2]); _delay_ms(1);
  77. twi_transmit(c_buf[3]); _delay_ms(1);
  78. }
  79.  
  80. void i2c_lcd_data(uint8_t data)
  81. {
  82. uint8_t d_buf[4];
  83.  
  84. d_buf[0] = (data &0xF0) | RS0_EN1 | BackLight;
  85. d_buf[1] = (data &0xF0) | RS0_EN0 | BackLight;
  86.  
  87. d_buf[2] = ((data <<4)&0xF0) | RS0_EN1 | BackLight;
  88. d_buf[3] = ((data <<4)&0xF0) | RS0_EN0 | BackLight;
  89.  
  90. twi_transmit(d_buf[0]); _delay_ms(1);
  91. twi_transmit(d_buf[1]); _delay_ms(1);
  92. twi_transmit(d_buf[2]); _delay_ms(1);
  93. twi_transmit(d_buf[3]); _delay_ms(1);
  94. }
  95.  
  96. void i2c_lcd_goto_XY(uint8_t row, uint8_t col)
  97. {
  98. uint8_t address = (0x40 * row) + col;
  99. uint8_t command = 0x80 | address;
  100.  
  101. i2c_lcd_command(command);
  102. }
  103.  
  104. void i2c_lcd_string(uint8_t row, uint8_t col, char *string)
  105. {
  106. i2c_lcd_goto_XY(row, col);
  107. while(*string) {
  108. i2c_lcd_data(*string++);
  109. }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement