Character_lcd(1129).c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  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. Layer_t Curr_Layer =Menu_Layer;
  198. void Layer_Set(Layer_t layer){
  199. Curr_Layer = layer;
  200. }
  201. Layer_t Layer_Get(void){
  202. return Curr_Layer;
  203. }
  204. Layer_t prev_layer = 0xff;
  205. void Character_Lcd_chMenu(AttenButton_t button){
  206. static uint8_t initialize = 0;
  207. static uint8_t temp_button = 0xFF;
  208. Layer_t temp_Layer = Layer_Get();
  209. if(initialize == 0){
  210. switch(button){
  211. case Power_On :
  212. LCD_M68_DataWrite_Clear();
  213. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD,"Channel Setting");
  214. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD,"press any Button");
  215. break;
  216. default:
  217. Lcd_AchSetting_Display();
  218. initialize = 1;
  219. break;
  220. }
  221. }else{
  222. if(button == Button_MENU || button == Button_ESC){
  223. Lcd_AchSetting_Display();
  224. }else{
  225. switch(temp_Layer){
  226. case AChSetting_Layer:
  227. if(button == Button_DOWN){
  228. Lcd_BchSetting_Display();
  229. }
  230. else if(button == Button_ENTER){
  231. Lcd_Ach150M_Display();
  232. }
  233. break;
  234. case BChSetting_Layer:
  235. if(button == Button_UP){
  236. Lcd_AchSetting_Display();
  237. }
  238. else if(button == Button_ENTER){
  239. Lcd_Bch150M_Display();
  240. }
  241. break;
  242. case AChSetting_150MLayer:
  243. if(button == Button_DOWN){
  244. Lcd_AchWifi_Display();
  245. }else if(button == Button_ENTER){
  246. }
  247. break;
  248. case AChSetting_WIFIMLayer:
  249. if(button == Button_DOWN){
  250. Lcd_Ach30G_Display();
  251. }
  252. else if(button == Button_UP){
  253. }
  254. break;
  255. case AChSetting_30GMLayer:
  256. if(button == Button_UP){
  257. Lcd_AchWifi_Display();
  258. }
  259. break;
  260. case BChSetting_150MLayer:
  261. if(button == Button_DOWN){
  262. }
  263. break;
  264. case BChSetting_WIFIMLayer:
  265. if(button == Button_DOWN){
  266. }
  267. break;
  268. case BChSetting_30GMLayer:
  269. if(button == Button_UP){
  270. }
  271. break;
  272. }
  273. }
  274. }
  275. }
  276. void Lcd_AchSetting_Display(void)
  277. {
  278. LCD_M68_DataWrite_Clear();
  279. Layer_Set(AChSetting_Layer);
  280. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," A Channel ");
  281. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x10);
  282. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," Setting");
  283. }
  284. void Lcd_Ach150M_Display(void){
  285. LCD_M68_DataWrite_Clear();
  286. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD,"A Ch 150MHz");
  287. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x10);
  288. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," 00.0 dB");
  289. Layer_Set(AChSetting_150MLayer);
  290. }
  291. void Lcd_AchWifi_Display(void){
  292. LCD_M68_DataWrite_Clear();
  293. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x11);
  294. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," A Ch WIFI ");
  295. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x10);
  296. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," 00.0 dB");
  297. Layer_Set(AChSetting_WIFIMLayer);
  298. }
  299. void Lcd_Ach30G_Display(void){
  300. LCD_M68_DataWrite_Clear();
  301. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x11);
  302. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," A Ch 30G");
  303. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," 00.0 dB");
  304. Layer_Set(AChSetting_WIFIMLayer);
  305. }
  306. void Lcd_BchSetting_Display(void)
  307. {
  308. LCD_M68_DataWrite_Clear();
  309. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x11);
  310. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," B Channel");
  311. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," Setting");
  312. Layer_Set(BChSetting_Layer);
  313. }
  314. void Lcd_Bch150M_Display(void)
  315. {
  316. LCD_M68_DataWrite_Clear();
  317. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD,"B Ch 150MHz");
  318. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x10);
  319. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," 00.0 dB");
  320. Layer_Set(BChSetting_150MLayer);
  321. }
  322. void Lcd_BchWifi_Display(void)
  323. {
  324. LCD_M68_DataWrite_Clear();
  325. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x11);
  326. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," B Ch WIFI");
  327. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x10);
  328. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," 00.0 dB");
  329. Layer_Set(BChSetting_WIFIMLayer);
  330. }
  331. void Lcd_Bch30G_Display(void)
  332. {
  333. LCD_M68_DataWrite_Clear();
  334. LCD_M68_DataWrite_COMMAND2(Line_default,Data_CMD,0x11);
  335. LCD_M68_DataWrite_COMMAND(Line_default,Data_CMD," B Ch 30G");
  336. LCD_M68_DataWrite_COMMAND(Second_Line,Data_CMD," 00.0 dB");
  337. Layer_Set(BChSetting_WIFIMLayer);
  338. }