#include "STM32Lib\\stm32f10x.h" #include "lcd_st7920.h" #include "menu.h" #include "main.h" ////////////////////////////////////////////////////////////////////////////////// extern u8 MENU_TIME_DATA[7]; extern MFL_PARA MFL_PARA_A; extern const u16 time_big_code[10]; extern const u16 data_big_code[7]; extern u8 lcd_post_select; //ST7920选择 const u16 ascii_big_code[6] = {0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6}; ////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// extern u8 MENU_TIME_DATA[7]; extern const u16 time_big_code[10]; extern const u16 data_big_code[7]; u8 const DataStr[] = __DATE__; ///////////////////////////////////////////////////////////////////////////////////////// //清屏 void menu_display_clean (void) { lcd_display_string(0, 0, " "); lcd_display_string(1, 0, " "); lcd_display_string(2, 0, " "); lcd_display_string(3, 0, " "); } //显示欢迎界面 void menu_display_welcome (void) { lcd_display_string(0, 0, " 欢迎使用 "); lcd_display_string(1, 0, " "); lcd_display_string(2, 0, " 智能时温控制仪 "); if (MFL_PARA_A.Redianou_Type == 0) lcd_display_string(3, 0, " K"); else if (MFL_PARA_A.Redianou_Type == 1) lcd_display_string(3, 0, " S"); else lcd_display_string(3, 0, " "); } //显示DEBUG void menu_display_debug (void) { lcd_display_string(0, 0, " 调试模式 "); lcd_display_string(1, 0, "冷端补偿: ℃ --.-℃"); lcd_display_string(2, 0, "ADC 校正: ------"); lcd_display_string(3, 0, "超温调节: mV ----mV"); } //显示恢复出厂设置 void menu_display_reset (void) { lcd_display_string(0, 0, " "); lcd_display_string(1, 0, " 恢复出厂设置 "); lcd_display_string(2, 0, " "); lcd_display_string(3, 0, "取消 确认"); } ///////////////////////////////////////////////////////////////////////// //功能菜单界面 void menu_display_function (void) { /*lcd_display_string(0,0," 一功能 "); lcd_display_string(1,0,"①慢灰 ④罗加 ⑦自选B "); lcd_display_string(2,0,"②快灰 ⑤手动 ⑧碳素 "); lcd_display_string(3,0,"③挥发 ⑥自选A ⑨定温 ");*/ lcd_display_string(0, 0, " 一功能 "); lcd_display_string(1, 0, "①慢灰 ④自选A ⑦快灰B "); lcd_display_string(2, 0, "②快灰 ⑤自选B ⑧预约 "); lcd_display_string(3, 0, "③挥发 ⑥罗加 "); } //设置菜单界面 void menu_display_program (void) { lcd_display_string(0, 0, " 二设置 "); lcd_display_string(1, 0, "①自选A ④温度校准 "); lcd_display_string(2, 0, "②自选B ⑤控制系数 "); lcd_display_string(3, 0, "③时间设置 ⑥设备参数 "); } //信息菜单界面 void menu_display_message (void) { lcd_display_string(0, 0, " 三信息 "); lcd_display_string(1, 0, "系统版本:HW6.0&SW7.0PM "); lcd_display_string(2, 0, "固件版本: "); if (MFL_PARA_A.Redianou_Type == 0) lcd_display_string(3, 0, "热偶类型: K分度 "); else if (MFL_PARA_A.Redianou_Type == 1) lcd_display_string(3, 0, "热偶类型: S分度 "); else lcd_display_string(3, 0, " "); lcd_post (2, 5); lcd_display (DataStr[7]); lcd_display (DataStr[8]); lcd_display (DataStr[9]); lcd_display (DataStr[10]); //lcd_display (' '); if ((DataStr[0] == 'J') && (DataStr[1] == 'a') && (DataStr[2] == 'n')) { lcd_display ('0'); lcd_display ('1'); } else if ((DataStr[0] == 'F') && (DataStr[1] == 'e') && (DataStr[2] == 'b')) { lcd_display ('0'); lcd_display ('2'); } else if ((DataStr[0] == 'M') && (DataStr[1] == 'a') && (DataStr[2] == 'r')) { lcd_display ('0'); lcd_display ('3'); } else if ((DataStr[0] == 'A') && (DataStr[1] == 'p') && (DataStr[2] == 'r')) { lcd_display ('0'); lcd_display ('4'); } else if ((DataStr[0] == 'M') && (DataStr[1] == 'a') && (DataStr[2] == 'y')) { lcd_display ('0'); lcd_display ('5'); } else if ((DataStr[0] == 'J') && (DataStr[1] == 'u') && (DataStr[2] == 'n')) { lcd_display ('0'); lcd_display ('6'); } else if ((DataStr[0] == 'J') && (DataStr[1] == 'u') && (DataStr[2] == 'l')) { lcd_display ('0'); lcd_display ('7'); } else if ((DataStr[0] == 'A') && (DataStr[1] == 'u') && (DataStr[2] == 'g')) { lcd_display ('0'); lcd_display ('8'); } else if ((DataStr[0] == 'S') && (DataStr[1] == 'e') && (DataStr[2] == 'p')) { lcd_display ('0'); lcd_display ('9'); } else if ((DataStr[0] == 'O') && (DataStr[1] == 'c') && (DataStr[2] == 't')) { lcd_display ('1'); lcd_display ('0'); } else if ((DataStr[0] == 'N') && (DataStr[1] == 'o') && (DataStr[2] == 'v')) { lcd_display ('1'); lcd_display ('1'); } else if ((DataStr[0] == 'D') && (DataStr[1] == 'e') && (DataStr[2] == 'c')) { lcd_display ('1'); lcd_display ('2'); } else { lcd_display ('0'); lcd_display ('0'); } if (DataStr[4] == 0x20) lcd_display ('0'); else lcd_display (DataStr[4]); lcd_display (DataStr[5]); } ///////////////////////////////////////////////////////////////////////// //设置菜单自选A设置界面 void menu_display_program_a_user (void) { lcd_display_string(0, 0, "自选A 温度时间速率介入"); lcd_display_string(1, 0, "第01段:0000 000 000 000"); lcd_display_string(2, 0, "第02段:0000 000 000 000"); lcd_display_string(3, 0, "第03段:0000 000 000 000"); } //设置菜单自选B设置界面 void menu_display_program_b_user (void) { lcd_display_string(0, 0, "自选B 温度时间速率介入"); lcd_display_string(1, 0, "第01段:0000 000 000 000"); lcd_display_string(2, 0, "第02段:0000 000 000 000"); lcd_display_string(3, 0, "第03段:0000 000 000 000"); } //输入校准系数界面 void menu_display_program_parameter (void) { lcd_display_string(0, 0, "校 准 显示值 标偶值 "); lcd_display_string(1, 0, "第01点:0000℃ 0000℃ "); lcd_display_string(2, 0, "第02点:0000℃ 0000℃ "); lcd_display_string(3, 0, "第03点:0000℃ 0000℃ "); } //设置菜单升温系数设置界面 void menu_display_program_pid (void) { lcd_display_string(0, 0, " 参 数 A B C "); lcd_display_string(1, 0, "01电网监控: "); lcd_display_string(2, 0, "02功率挥回: "); lcd_display_string(3, 0, "03经典回温: "); } //设置菜单用户参数设置界面 void menu_display_program_user (void) { /*lcd_display_string(0,0,"门缝值:慢0000 快0000 "); lcd_display_string(1,0,"速度值:ST0000 ET0000 "); lcd_display_string(2,0,"时 钟:19-09-25 22:43 "); lcd_display_string(3,0," ");*/ lcd_display_string(0, 0, " 时钟设置 "); lcd_display_string(1, 0, " "); lcd_display_string(2, 0, " "); lcd_display_string(3, 0, "返回 确认"); } //设置菜单密码设置界面 void menu_display_program_password (void) { lcd_display_string(0, 0, " "); lcd_display_string(1, 0, "请输入密码:0000 "); lcd_display_string(2, 0, " "); lcd_display_string(3, 0, "返回 确认"); } //设置菜单系统参数设置界面 void menu_display_program_system (void) { lcd_display_string(0, 0, " 设备参数 A B C "); lcd_display_string(1, 0, "01保留参数:000 000 000 "); lcd_display_string(2, 0, "02保留参数:000 000 000 "); lcd_display_string(3, 0, "03保留参数:000 000 000 "); } //设置菜单保存询问界面 void menu_display_program_save (void) { lcd_display_string(0, 0, " "); lcd_display_string(1, 0, " 参数保存? "); lcd_display_string(2, 0, " "); lcd_display_string(3, 0, "取消 确认"); } ///////////////////////////////////////////////////////////////// //慢灰界面 void menu_display_manhui (void) { lcd_display_string(0, 0, "慢灰状态: "); lcd_display_string(1, 0, "当前温度:---- "); lcd_display_string(2, 0, "进程时间:00-00-00 "); lcd_display_string(3, 0, "提示: "); } ///////////////////////////////////////////////////////////////// //经典快灰界面 void menu_display_kuaihui (void) { lcd_display_string(0, 0, "经典快灰: "); lcd_display_string(1, 0, "当前温度:---- "); lcd_display_string(2, 0, "进程时间:00-00-00 "); lcd_display_string(3, 0, "提示: "); } //快速快灰界面 void menu_display_kuaihuib (void) { lcd_display_string(0, 0, "快速快灰: "); lcd_display_string(1, 0, "当前温度:---- "); lcd_display_string(2, 0, "进程时间:00-00-00 "); lcd_display_string(3, 0, "提示: "); } ///////////////////////////////////////////////////////////////// //挥发界面 void menu_display_huifa (void) { lcd_display_string(0, 0, "挥发状态: "); lcd_display_string(1, 0, "当前温度:---- "); lcd_display_string(2, 0, "进程时间:00-00-00 "); lcd_display_string(3, 0, "提示:挥发实验请关烟囱 "); } ///////////////////////////////////////////////////////////////// //自选a界面 void menu_display_zixuan_a (void) { lcd_display_string(0, 0, "自选A组:第 段 "); lcd_display_string(1, 0, "温度:---- / 0000 "); lcd_display_string(2, 0, "时间:00-00-00/00-00-00"); lcd_display_string(3, 0, "提示: "); } ///////////////////////////////////////////////////////////////// //自选b界面 void menu_display_zixuan_b (void) { lcd_display_string(0, 0, "自选B组:第 段 "); lcd_display_string(1, 0, "温度:---- / 0000 "); lcd_display_string(2, 0, "时间:00-00-00/00-00-00"); lcd_display_string(3, 0, "提示: "); } ///////////////////////////////////////////////////////////////// //校准界面 void menu_display_calibration (void) { lcd_display_string(0, 0, "罗加状态: "); lcd_display_string(1, 0, "当前温度:---- "); lcd_display_string(2, 0, "进程时间:00-00-00 "); lcd_display_string(3, 0, "提示:罗加实验请关烟囱 "); } //预约界面设置 void menu_display_reservation (void) { lcd_display_string(0, 0, "预约状态:等待确认 "); lcd_display_string(1, 0, "当前时温:00:00 / --- ℃"); lcd_display_string(2, 0, "预约时温:00:00 / --- ℃"); lcd_display_string(3, 0, "提示:设置完成请按确认键"); } ///////////////////////////////////////////////////////////////// //时钟读取 u8 pcf8563_read_time (u8 addr, u8 num, u8 *p) { u8 n; iic1_start (); iic1_write_byte (PCF8563_ADDR_WR); iic1_write_byte (addr); iic1_start (); iic1_write_byte (PCF8563_ADDR_RD); for (n = 0; n < (num - 1); n++) *(p + n) = iic1_read_byte (0); *(p + n) = iic1_read_byte (1); iic1_stop (); return 1; } //时钟写入 秒分时天星期月年 u8 pcf8563_write_time (u8 addr, u8 num, u8 *p) { u8 n; iic1_start (); iic1_write_byte (PCF8563_ADDR_WR); iic1_write_byte (addr); for (n = 0; n < num; n++) iic1_write_byte (*(p + n)); iic1_stop (); return 1; } //地址为字节,24C64为32个字节一个页,主要不要跨页 u8 eeprom_24c64_write (u16 addr, u8 num, u8 *p) { u8 n; u32 delay; iic1_start (); iic1_write_byte (M24C64_ADDR_WR); iic1_write_byte ((u8)(addr >> 8)); iic1_write_byte ((u8)(addr)); for (n = 0; n < num; n++) iic1_write_byte (*(p + n)); iic1_stop (); for (delay = 0; delay < 606060; delay++); //1.806894ms (10000) 26.39022ms(100000) 264ms(1000000) return 1; } //地址为字节,24C64为32个字节一个页,主要不要跨页 u8 eeprom_24c64_read (u16 addr, u8 num, u8 *p) { u8 n; iic1_start (); iic1_write_byte (M24C64_ADDR_WR); iic1_write_byte ((u8)(addr >> 8)); iic1_write_byte ((u8)(addr)); iic1_start (); iic1_write_byte (M24C64_ADDR_RD); for (n = 0; n < (num - 1); n++) *(p + n) = iic1_read_byte (0); *(p + n) = iic1_read_byte (1); iic1_stop (); return 1; } void iic1_start (void) { IIC1_SCL_L; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SDA_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; } void iic1_stop (void) { IIC1_SCL_L; IIC1_SDA_L; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SDA_H; IIC1_SCL_L; } u8 iic1_write_byte (u8 data) //返回应答信号ACK { u8 temp, n; temp = data; for (n = 0; n < 8; n++) { IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; if (temp & 0x80) IIC1_SDA_H; else IIC1_SDA_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; temp <<= 1; } IIC1_SCL_L; IIC1_SDA_H; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; if (IIC1_SDA_READ()) n = 0xff; else n = 0; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; return n; } u8 iic1_read_byte (u8 ack) { u8 temp, n; temp = 0; for (n = 0; n < 8; n++) { IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SDA_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; temp <<= 1; if (IIC1_SDA_READ()) temp++;; } IIC1_SCL_L; //发送应答信号 if (ack) IIC1_SDA_H; else IIC1_SDA_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_H; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; IIC1_SCL_L; return temp; } //地址为字节,24C64为32个字节一个页,主要不要跨页 u8 eeprom_24c64_read_byte (u16 addr) { u8 temp; iic1_start (); iic1_write_byte (M24C64_ADDR_WR); iic1_write_byte ((u8)(addr >> 8)); iic1_write_byte ((u8)(addr)); iic1_start (); iic1_write_byte (M24C64_ADDR_RD); temp = iic1_read_byte (1); iic1_stop (); return temp; } //地址为字节,24C64为32个字节一个页,主要不要跨页 u8 eeprom_24c64_write_byte (u16 addr, u8 data) { u8 temp; iic1_start (); iic1_write_byte (M24C64_ADDR_WR); iic1_write_byte ((u8)(addr >> 8)); iic1_write_byte ((u8)(addr)); temp = iic1_write_byte (data); iic1_stop (); return temp; }