Character_lcd(2760).c 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. #include "main.h"
  2. void LCD_16T202DA1EA_Init(void){
  3. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
  4. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
  5. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_RESET);
  6. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_SET);
  7. }
  8. typedef struct{
  9. uint16_t RW_PIN;
  10. uint16_t RS;
  11. uint16_t E;
  12. uint16_t Reset;
  13. uint16_t DB0;
  14. uint16_t DB1;
  15. uint16_t DB2;
  16. uint16_t DB3;
  17. uint16_t DB4;
  18. uint16_t DB5;
  19. uint16_t DB6;
  20. uint16_t DB7;
  21. GPIO_TypeDef * RW_PIN_Port;
  22. GPIO_TypeDef * RS_Port;
  23. GPIO_TypeDef * E_Port;
  24. GPIO_TypeDef * DB0_Port;
  25. GPIO_TypeDef * DB1_Port;
  26. GPIO_TypeDef * DB2_Port;
  27. GPIO_TypeDef * DB3_Port;
  28. GPIO_TypeDef * DB4_Port;
  29. GPIO_TypeDef * DB5_Port;
  30. GPIO_TypeDef * DB6_Port;
  31. GPIO_TypeDef * DB7_Port;
  32. }lcd_Pin_st;
  33. void LCD_M68_DataWrite_COMMAND_Init(void){
  34. LCD_M68_DataWrite_COMMAND2(Line_default,Instruction_CMD,0x0F);
  35. }
  36. void LCD_M68_DataWrite_Clear(void){
  37. LCD_M68_DataWrite_COMMAND2(Line_default,Instruction_CMD,0x01);
  38. }
  39. void LCD_M68_DataWrite_LineChage(LCD_line_t line){
  40. if(line == First_Line)
  41. LCD_M68_DataWrite_COMMAND2(Line_default,Instruction_CMD,0x80);
  42. else
  43. LCD_M68_DataWrite_COMMAND2(Line_default,Instruction_CMD,0xC0);
  44. }
  45. uint8_t LCD_Str_Filter(uint8_t* str){
  46. uint8_t len = 0;
  47. uint8_t temp_str[32] = {0,};
  48. while (str[len] != NULL) // 자른 문자열이 나오지 않을 때까지 반복
  49. {
  50. len++;
  51. }
  52. printf("data Lenth = %d \r\n",len);
  53. return len;
  54. }
  55. void LCD_M68_DataWrite_COMMAND(LCD_line_t line,uint8_t cmd,uint8_t* data){
  56. uint8_t len = 0;
  57. lcd_Pin_st lcdset;
  58. uint16_t temp_Pinbuf[8]={0,};
  59. GPIO_TypeDef* temp_Portbuf[8]={0,};
  60. lcdset.RW_PIN = GPIO_PIN_12;//pd
  61. lcdset.RS = GPIO_PIN_11;//pd
  62. lcdset.E = GPIO_PIN_13;//pd
  63. lcdset.DB0 = GPIO_PIN_14;//pd
  64. lcdset.DB1 = GPIO_PIN_15;//pd
  65. lcdset.DB2 = GPIO_PIN_2;//pg
  66. lcdset.DB3 = GPIO_PIN_3;//pg
  67. lcdset.DB5 = GPIO_PIN_4;//pg
  68. lcdset.DB4 = GPIO_PIN_5;//pg
  69. lcdset.DB6 = GPIO_PIN_6;//pg
  70. lcdset.DB7 = GPIO_PIN_7;//pg
  71. len = LCD_Str_Filter(&data[0]);
  72. for(uint8_t i = 0; i < len; i++){
  73. if(line != Line_default)
  74. LCD_M68_DataWrite_LineChage(line); // Line feed
  75. if(line == Second_Line)
  76. line = Line_default;
  77. HAL_GPIO_WritePin(GPIOD, lcdset.E|lcdset.RS|lcdset.RW_PIN|lcdset.DB0|lcdset.DB1 , GPIO_PIN_RESET);
  78. HAL_GPIO_WritePin(GPIOG, lcdset.DB2|lcdset.DB3|lcdset.DB4|lcdset.DB5|lcdset.DB6|lcdset.DB7, GPIO_PIN_RESET);
  79. //PIN Init
  80. if(cmd == Instruction_CMD){
  81. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_RESET); // Init Instruction CMD
  82. }else{
  83. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_SET); //Init Data CMD
  84. }
  85. memcpy(&temp_Pinbuf[0] ,&lcdset.DB0 ,8);
  86. memcpy(&temp_Portbuf[0],&lcdset.DB0_Port,8);
  87. HAL_GPIO_WritePin(GPIOD, lcdset.E , GPIO_PIN_SET);
  88. if(data[i] & 0x01)
  89. HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_SET);
  90. else
  91. HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_RESET);
  92. if(data[i] & 0x02)
  93. HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_SET);
  94. else
  95. HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_RESET);
  96. if(data[i] & 0x04)
  97. HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_SET);
  98. else
  99. HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_RESET);
  100. if(data[i] & 0x08)
  101. HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_SET);
  102. else
  103. HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_RESET);
  104. if(data[i] & 0x10)
  105. HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_SET);
  106. else
  107. HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_RESET);
  108. if(data[i] & 0x20)
  109. HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_SET);
  110. else
  111. HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_RESET);
  112. if(data[i] & 0x40)
  113. HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_SET);
  114. else
  115. HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_RESET);
  116. if(data[i] & 0x80)
  117. HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_SET);
  118. else
  119. HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_RESET);
  120. HAL_GPIO_WritePin(GPIOD, lcdset.E , GPIO_PIN_RESET); //Init E Line
  121. if(cmd == Instruction_CMD){
  122. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_SET); //Init Data CMD
  123. }else{
  124. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_RESET); // Init Instruction CMD
  125. }
  126. }
  127. }
  128. void LCD_M68_DataWrite_COMMAND2(LCD_line_t line,uint8_t cmd,uint8_t data){
  129. uint8_t len = 0;
  130. lcd_Pin_st lcdset;
  131. uint16_t temp_Pinbuf[8]={0,};
  132. GPIO_TypeDef* temp_Portbuf[8]={0,};
  133. lcdset.RW_PIN = GPIO_PIN_12;//pd
  134. lcdset.RS = GPIO_PIN_11;//pd
  135. lcdset.E = GPIO_PIN_13;//pd
  136. lcdset.DB0 = GPIO_PIN_14;//pd
  137. lcdset.DB1 = GPIO_PIN_15;//pd
  138. lcdset.DB2 = GPIO_PIN_2;//pg
  139. lcdset.DB3 = GPIO_PIN_3;//pg
  140. lcdset.DB5 = GPIO_PIN_4;//pg
  141. lcdset.DB4 = GPIO_PIN_5;//pg
  142. lcdset.DB6 = GPIO_PIN_6;//pg
  143. lcdset.DB7 = GPIO_PIN_7;//pg
  144. len = LCD_Str_Filter(&data);
  145. if(line != Line_default)
  146. LCD_M68_DataWrite_LineChage(line); // Line feed
  147. HAL_GPIO_WritePin(GPIOD, lcdset.E|lcdset.RS|lcdset.RW_PIN|lcdset.DB0|lcdset.DB1 , GPIO_PIN_RESET);
  148. HAL_GPIO_WritePin(GPIOG, lcdset.DB2|lcdset.DB3|lcdset.DB4|lcdset.DB5|lcdset.DB6|lcdset.DB7, GPIO_PIN_RESET);
  149. //PIN Init
  150. if(cmd == Instruction_CMD){
  151. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_RESET); // Init Instruction CMD
  152. }else{
  153. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_SET); //Init Data CMD
  154. }
  155. memcpy(&temp_Pinbuf[0] ,&lcdset.DB0 ,8);
  156. memcpy(&temp_Portbuf[0],&lcdset.DB0_Port,8);
  157. HAL_GPIO_WritePin(GPIOD, lcdset.E , GPIO_PIN_SET);
  158. if(data & 0x01)
  159. HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_SET);
  160. else
  161. HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_RESET);
  162. if(data & 0x02)
  163. HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_SET);
  164. else
  165. HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_RESET);
  166. if(data & 0x04)
  167. HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_SET);
  168. else
  169. HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_RESET);
  170. if(data & 0x08)
  171. HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_SET);
  172. else
  173. HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_RESET);
  174. if(data & 0x10)
  175. HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_SET);
  176. else
  177. HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_RESET);
  178. if(data & 0x20)
  179. HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_SET);
  180. else
  181. HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_RESET);
  182. if(data & 0x40)
  183. HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_SET);
  184. else
  185. HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_RESET);
  186. if(data & 0x80)
  187. HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_SET);
  188. else
  189. HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_RESET);
  190. HAL_GPIO_WritePin(GPIOD, lcdset.E , GPIO_PIN_RESET); //Init E Line
  191. if(cmd == Instruction_CMD){
  192. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_SET); //Init Data CMD
  193. }else{
  194. HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_RESET); // Init Instruction CMD
  195. }
  196. }
  197. typedef enum{
  198. Menu_Layer = 0,
  199. }Layer_t;
  200. Layer_t Curr_Layer =Menu_Layer;
  201. void Layer_Set(Layer_t layer){
  202. Curr_Layer = layer;
  203. }
  204. Layer_t Layer_Get(void){
  205. return Curr_Layer;
  206. }
  207. void Character_Lcd_chMenu(AttenButton_t button){
  208. static uint8_t initialize = 0;
  209. static uint8_t temp_button = 0xFF;
  210. Layer_t temp_layer = Layer_Get();
  211. LCD_M68_DataWrite_Clear();
  212. if(initialize == 0){
  213. switch(button){
  214. case Power_On :
  215. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD,"Channel Setting");
  216. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD,"press any Button");
  217. break;
  218. default:
  219. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x10);
  220. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," A Channel");
  221. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," Setting");
  222. initialize = 1;
  223. Layer_Set(Menu_Layer);
  224. break;
  225. }
  226. }else{
  227. if(temp_button != button){
  228. if(temp_layer == Menu_Layer){
  229. switch(button){
  230. case Button_UP:
  231. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," A Channel ");
  232. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x10);
  233. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," Setting");
  234. break;
  235. case Button_DOWN:
  236. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x11);
  237. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," B Channel");
  238. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," Setting");
  239. break;
  240. }
  241. }
  242. temp_layer = button;
  243. }
  244. }
  245. }
  246. void Character_Lcd_AttenSet(Switch_case_t ch,Switch_case_t button){
  247. if(ch == ACh_Setting){
  248. switch(button){
  249. case Atten_150M:break;
  250. case Atten_Wifi:break;
  251. case Atten_30G:break;
  252. }
  253. }
  254. else if(ch == BCh_Setting){
  255. switch(button){
  256. case Atten_150M:break;
  257. case Atten_Wifi:break;
  258. case Atten_30G:break;
  259. }
  260. }
  261. }