LcdComm.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. #ifndef _LCDCOMM_H_DEF
  2. #define _LCDCOMM_H_DEF
  3. /*------------------------------- 头文件 --------------------------------------
  4. */
  5. /*------------------------------- 宏定义 --------------------------------------
  6. */
  7. enum
  8. {
  9. MAIN, // 主板
  10. FACE, // 面板
  11. GPRS, // GPRS
  12. PDA, // PDA
  13. PDA_MAINTAIN, // PDA维护
  14. HMI_COMM_TYPE,
  15. };
  16. enum
  17. {
  18. TEST_LED, // LED测试
  19. TEST_LCD, // LCD测试
  20. TEST_NUM,
  21. };
  22. enum
  23. {
  24. RMT_PAIR, // 遥控器配对
  25. RMT_CLRPAIR, // 遥控器清除配对
  26. RMT_SUM,
  27. };
  28. // H:横向,V:竖向,P:正序,N:负序
  29. enum
  30. {
  31. LCD_HP, // 横向正序
  32. LCD_HN, // 横向负序
  33. LCD_VP, // 竖向正序
  34. LCD_VN, // 竖向负序
  35. LCD_DISP_NUM,
  36. };
  37. #define FRAME_NUMBER 5 // 接收、发送帧缓冲区列表总数:5条
  38. #define UART_FRAME_LEN 256 // 单帧总长度
  39. #define HMI_RECV_EN() {GPIO_R485_OE1_OFF();}
  40. #define HMI_SEND_EN() {GPIO_R485_OE1_ON();}
  41. #define HMI_EN_INIT() {GPIO_R485_OE1_INIT();}
  42. #define SCREEN_LINE_BYTES 20 //屏幕每行字节数
  43. #define SCREEN_ROWS 5 //屏幕的共多少行
  44. #define SCREEN_BYTES (SCREEN_LINE_BYTES*SCREEN_ROWS)
  45. #define LCD_MAX_LED 32 // lcd 液晶面板最大灯个数
  46. /*按键定义*/
  47. #define HA_KEY_ENTER 1
  48. #define HA_KEY_ESC 2 // 老版本6键,ENTER=2 ESC=1
  49. #define HA_KEY_UP 3
  50. #define HA_KEY_DOWN 4
  51. #define HA_KEY_LEFT 5
  52. #define HA_KEY_RIGHT 6
  53. #define HA_KEY_ADD 7
  54. #define HA_KEY_SUB 8
  55. #define HA_KEY_RST 9 //区号
  56. //2019-9
  57. #define HA_KEY_YUK 10
  58. #define HA_KEY_HZ 11
  59. #define HA_KEY_FZ 12
  60. #define NO_KEY 0xff
  61. #define KE_KEY_LONG_BIT (0x80)
  62. #define KE_KEY_MASK 0x7f
  63. #define LCD_BUF_BYTES (160*160/8/4)
  64. /*hmi发来的命令*/
  65. #define HMI_CMD_POLL 0x00 /*查询命令*/
  66. #define HMI_CMD_INIT_LCD 0x01/*初始化lcd*/
  67. #define HMI_CMD_CLEAR_SCREEN 0x02/*清全屏*/
  68. #define HMI_CMD_WRITE_SINGLE 0x03/*写数据*/
  69. #define HMI_CMD_WRITE_DATAS 0x04/*写连续数据*/
  70. #define HMI_CMD_WRITE_DOTS 0x05/*写点阵数据*/
  71. #define HMI_CMD_BLIGHT 0x08/*背光控制*/
  72. #define HMI_CMD_LED 0x09/*面板灯状态*/
  73. #define HMI_CMD_TESTLCD 0x0A/*对比度设置*/
  74. #define HMI_CMD_WIRELESS 0x0B/*遥控器*/
  75. #define HMI_CMD_LEDRUN 0x0C/*跑马灯*/
  76. #define HMI_CMD_LCDRUN 0x0D/*LCD测试*/
  77. #define HMI_CMD_GPRS 0x0E /*GPRS*/
  78. #define HMI_CMD_DOWN 0x0F/*数据下载*/
  79. #define HMI_CMD_LINE 0x10/*划线*/
  80. #define HMI_CMD_RESPOND 0x20// 响应面板帧
  81. #define DRV_CMD_TEMP 0x18 /*lcd驱动板上电报文*/
  82. #define DRV_CMD_POWERON 0x19 /*lcd驱动板上电报文*/
  83. #define DRV_CMD_KEY 0x1A /*lcd驱动板上送按键状态*/
  84. #define DRV_CMD_YX 0x1B /*遥信*/
  85. #define DRV_CMD_SET 0x1C /*定值*/
  86. #define DRV_CMD_YKQ 0x1D /*遥控器*/
  87. #define DRV_CMD_GPRS 0x1E/*GPRS*/
  88. #define DRV_CMD_DOWN 0x1F /*下载报文应答*/
  89. #define UART_FRAME_TYPE_Wireless 0x24 //遥控器运行模式
  90. #define UART_FRAME_TYPE_RM_TEST 0x25//遥控器测试
  91. #define LIGHT_ON 1
  92. #define LIGHT_OFF 0
  93. #define LCD_INTRUST_ADD 1
  94. #define LCD_INTRUST_SUB 0
  95. #define LCD_KEY_MASK 0x07
  96. #define LCD_KEY_MAX (LCD_KEY_MASK+1)
  97. /*发给驱动板的指令缓冲区*/
  98. #define LCD_MAX_INST_MASK 0x07 //发给驱动板的指令最大缓冲个数
  99. #define LCD_MAX_INST_BUFS (LCD_MAX_INST_MASK+1) //发给驱动板的指令最大缓冲个数
  100. /*发给驱动板的数据定义*/
  101. #define LCD_MAX_CONTINUE_MASK 0x7f
  102. #define LCD_MAX_CONTINUE_BUFS (LCD_MAX_CONTINUE_MASK+1)
  103. #define LCD_MAX_DOT_MASK 0x3f
  104. #define LCD_MAX_DOT_BUFS (LCD_MAX_CONTINUE_MASK+1)
  105. #define UART_FRAME_MAXCNT 8 //最大帧数
  106. /*------------------------------ 类型结构 -------------------------------------
  107. */
  108. /*******主界面图形定义******************/
  109. typedef struct D_UNIT //4 个字节 整个菜单信息,最大菜单号,域数统计,410
  110. { //主要是为了出错处理
  111. WORD sx;
  112. WORD sy;
  113. WORD yx_di;
  114. WORD yx_attrib;
  115. BYTE yx_value;
  116. //BYTE yx_save;
  117. DWORD addr_close;
  118. DWORD addr_open;
  119. DWORD addr_third;
  120. }D_UNIT_DEF;
  121. typedef struct YC_UNIT //4 个字节 整个菜单信息,最大菜单号,域数统计,410
  122. { //主要是为了出错处理
  123. WORD sx;
  124. WORD sy;
  125. WORD yc_di;
  126. BYTE fmtstr[34];
  127. }YC_UNIT_DEF;
  128. #define MAX_YX_UNITS 80
  129. #define MAX_YC_UNITS 80
  130. typedef struct MainImage //4 个字节 整个菜单信息,最大菜单号,域数统计,410
  131. { //主要是为了出错处理
  132. char *pBuf;
  133. unsigned short sImageX;
  134. unsigned short sImageY;
  135. uint32_t lnImageAddr;
  136. unsigned short sYxNum;
  137. unsigned short sYcNum;
  138. D_UNIT_DEF tYxUnits[MAX_YX_UNITS];
  139. YC_UNIT_DEF tYcUnits[MAX_YC_UNITS];
  140. } MAIN_IMAGE_DEF;
  141. typedef struct LCD_KEY
  142. {
  143. BYTE tail;
  144. BYTE head;
  145. BYTE keybuf[LCD_KEY_MAX];
  146. }LCD_KEY_DEF;
  147. typedef struct INST //单个数据结构
  148. {
  149. BYTE cmd;
  150. BYTE len;
  151. BYTE para[UART_FRAME_LEN];
  152. }INST_DEF;
  153. typedef struct LCD_INST_BUF
  154. {
  155. BYTE tail;
  156. BYTE head;
  157. INST_DEF tInst[LCD_MAX_INST_BUFS];
  158. }LCD_INST_BUF_DEF;
  159. typedef struct CONTINUE_DATA //连续数据结构
  160. {
  161. BYTE x;
  162. BYTE y;
  163. BYTE attrib;
  164. BYTE dat[24];
  165. }CONTINUE_DATA_DEF;
  166. typedef struct CONTINUE_DATA_BUF //连续数据结构缓冲区
  167. {
  168. BYTE tail;
  169. BYTE head;
  170. BYTE index;
  171. CONTINUE_DATA_DEF tBuf[LCD_MAX_CONTINUE_BUFS];
  172. }CONTINUE_DATA_BUF_DEF;
  173. typedef struct DOT_DATA_DEF //连续数据结构
  174. {
  175. short x;
  176. short y;
  177. short w;
  178. short ex;
  179. BYTE num;
  180. BYTE mode;
  181. BYTE dat[230];
  182. }DOT_DATA_DEF;
  183. typedef struct dot_DATA_BUF // 点阵数据
  184. {
  185. BYTE tail;
  186. BYTE head;
  187. DOT_DATA_DEF dot[LCD_MAX_DOT_BUFS];
  188. }DOT_DATA_BUF_DEF;
  189. /*初始化状态定义*/
  190. typedef struct INIT_DATA
  191. {
  192. bool flag;
  193. BYTE para[LCD_MAX_LED];
  194. }PARA_DEF;
  195. /*初始化状态定义*/
  196. typedef struct LINE_DATA
  197. {
  198. bool flag;
  199. BYTE para[10];
  200. }LINE_DEF;
  201. /*背光灯状态缓冲区*/
  202. typedef struct LIGHT
  203. {
  204. bool flag;
  205. BYTE light;
  206. }LIGHT_DEF;
  207. typedef struct LCDINTRUST
  208. {
  209. bool flag;
  210. BYTE byAddOrSub;
  211. }LCDINTRUST_DEF;
  212. typedef struct TELE
  213. {
  214. bool flag;
  215. BYTE cmd;
  216. }TELE_DEF;
  217. typedef struct LCD_COMM
  218. {
  219. bool bRecv;
  220. BYTE ReSend;
  221. bool bClrScreen;
  222. bool b_init_OK;
  223. bool bTestLed;
  224. bool bTestLcd;
  225. bool bTeleMatch;
  226. bool bTeleClrMatch;
  227. bool bLcdUpdate;
  228. bool bLedUpdate;
  229. bool bLock;
  230. bool bFreshLed;
  231. PARA_DEF tInit;
  232. LIGHT_DEF tLight;
  233. LCDINTRUST_DEF tLcdIntrust;
  234. LCD_INST_BUF_DEF tInstBuf;
  235. CONTINUE_DATA_BUF_DEF tContinue;
  236. LCD_KEY_DEF tKey;
  237. TELE_DEF tTele;
  238. bool bCall;
  239. bool bRefresh;
  240. BYTE lcdbuf[LCD_BUF_BYTES]; //备份液晶显示缓冲区,在发送时判断,没有改变的不发送,提高刷新速断,高位代表刷新标志
  241. BYTE lcdattrib[LCD_BUF_BYTES]; //备份液晶显示缓冲区,在发送时判断,没有改变的不发送,提高刷新速断,高位代表刷新标志
  242. MAIN_IMAGE_DEF tImage;
  243. DOT_DATA_BUF_DEF tDot;
  244. }LCD_COMM_DEF;
  245. struct hmi
  246. {
  247. u8 tail[2]; //接收、发送缓冲区存入帧位置
  248. u8 head[2]; //接收、发送缓冲区取出帧位置
  249. u8 num[2]; //接收、发送缓冲区有效帧数量
  250. u8 sendlen[FRAME_NUMBER]; //发送帧长度
  251. u8 recvbuf[FRAME_NUMBER][UART_FRAME_LEN];
  252. u8 sendbuf[FRAME_NUMBER][UART_FRAME_LEN];
  253. //考虑通道强占的情况
  254. };
  255. typedef struct UART_COMM
  256. {
  257. u8 cTypeCounter; //接受帧类型
  258. u8 cRecvLenth; //通道A 接收到数据计数器
  259. u8 cRecvCnt; //有效数据记数
  260. u8 cSendLenth;
  261. u8 cSendCnt;
  262. u8 sum;
  263. u8 recvsum;
  264. u8 bSend;
  265. u32 dTWait;
  266. u8 bData;
  267. u8 s_head;
  268. u8 s_tail;
  269. u8 s_buf[UART_FRAME_MAXCNT][UART_FRAME_LEN];
  270. u8 r_head;
  271. u8 r_tail;
  272. u8 r_buf[UART_FRAME_MAXCNT][UART_FRAME_LEN];
  273. }UART_COMM;
  274. /*------------------------------ 变量声明 -------------------------------------
  275. */
  276. extern DWORD dHMIDiStatus;
  277. extern LCD_COMM_DEF g_tLcdComm;
  278. extern UART_COMM g_tUartHMI;
  279. extern int g_hmi_type;
  280. /*------------------------------ 函数声明 -------------------------------------
  281. */
  282. void Add_Continue_Data(BYTE x,BYTE y,BYTE *pdat,BYTE len,BYTE mode);
  283. void Add_Clear_Screen(void);
  284. void add_led_test(u8 test_no);
  285. BYTE Get_Key(void);
  286. void lcdcomm_init(void);
  287. void HMI_Comm_App(void);
  288. void HMI_Board_Recv(int len,BYTE *para);
  289. void add_rmt_pair(u8 pair);
  290. int hzk_exit(void);
  291. void HMI_add_inst_frame(BYTE cmd,BYTE *para,BYTE len) ;
  292. void lcd_DrawImage(short x,short y,BYTE *pd,unsigned char model); //画图标,index为索引值,与按键的属性定义一致
  293. int mainimage_exit(void);
  294. #endif