#include "Dwin.h" #include "usart.h" #include #include #include "CollectMaster485.h" #include "TerminalSlave485.h" #include "ScreenMaster485.h" #include "Elec_Seal.h" #include "main.h" #include "KeySlave485.h" #include "cmsis_os.h" Run_mode_key Run_mode_key_info; uint8_t Lcd_sleep_flag =2;//1休眠状态 3 唤醒状态 2执行唤醒 uint8_t DateDwin[8]; uint8_t time_Set_Dwin[14]={0x5A, 0xA5, 0x0B ,0x82 ,0x00 ,0x9C ,0x5A ,0xA5 ,0x13 ,0x05 ,0x1B ,0x0b ,0x1b ,0x19}; SemaphoreHandle_t xSemaphore = NULL; int Init_Dwin_Signal(void) { xSemaphore = xSemaphoreCreateMutex(); if(xSemaphore==NULL) { return 0; } usart3_rx_flag=1; return 1; } /****************************************************************************** 写8位数据 输入:写入地址:addr16, 写入数据:data16 输出返回:无 5A A5 04 83 00 10 04 将会收到: 年 月 日 星期;时,分,秒. 5A A5 0C 83 00 10 04 15 01 06 03 14 28 11 00 5A A5 0C 83 00 10 04 15 01 07 04 15 1C 30 00 ******************************************************************************/ void GetDateFromDwin(void) { uint8_t TxDwinDataBuf[7]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x04; TxDwinDataBuf[3]=0x83; TxDwinDataBuf[4]=0x00; TxDwinDataBuf[5]=0x10; TxDwinDataBuf[6]=0x04; if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 5) == pdFALSE) { return; } ScreenMaster485_Send_Data(TxDwinDataBuf,7); if(xSemaphore) xSemaphoreGive( xSemaphore ); //HAL_Delay(20);// } /****************************************************************************** 写8位数据 输入:写入地址:addr16, 写入数据:data16 输出返回:无 5A A5 05 82 10 01 00 03 ******************************************************************************/ void WrDwinCmd8(uint16_t addr16,uint8_t data8) { uint8_t TxDwinDataBuf[7]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x04; TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; TxDwinDataBuf[6]=data8; if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 5) == pdFALSE) { return; } ScreenMaster485_Send_Data(TxDwinDataBuf,7); if(xSemaphore) xSemaphoreGive( xSemaphore ); // HAL_Delay(10);// } /****************************************************************************** 写16位数据 输入:写入地址:addr16, 写入数据:data16 输出返回:无 5A A5 05 82 10 01 00 03 ******************************************************************************/ void WrDwinCmd16(uint16_t addr16,uint16_t data16) { uint8_t TxDwinDataBuf[8]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x05; //数据长度+命令+地址+数据 TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; TxDwinDataBuf[6]=data16>>8; TxDwinDataBuf[7]=data16; //taskENTER_CRITICAL(); if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 500) == pdFALSE) { return; } ScreenMaster485_Send_Data(TxDwinDataBuf,8); if(xSemaphore) xSemaphoreGive( xSemaphore ); //taskEXIT_CRITICAL(); //osDelay(10);//HAL_Delay(10);// } /****************************************************************************** 发送命令 写32位数据 输入:写入地址:addr16, 写入数据:data32 输出返回:无 5A A5 07 82 00 84 5A 01 00 03 ******************************************************************************/ void WrDwinCmd32(uint16_t addr16,uint32_t data32) { uint8_t TxDwinDataBuf[10]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x07; //数据长度+命令+地址+数据 TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; TxDwinDataBuf[6]=data32>>24; TxDwinDataBuf[7]=data32>>16; TxDwinDataBuf[8]=data32>>8; TxDwinDataBuf[9]=data32; if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 500) == pdFALSE) { return; } ScreenMaster485_Send_Data(TxDwinDataBuf,10); if(xSemaphore) xSemaphoreGive( xSemaphore ); //osDelay(15);//HAL_Delay(15);// } /****************************************************************************** 发送命令 写16位数据 输入:写入地址:addr16, 写入数据:*buf 输出返回:无 ******************************************************************************/ void WrDwinBuf16(uint16_t addr16,uint16_t *buf) { uint8_t TxDwinDataBuf[8]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x05; TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; TxDwinDataBuf[6]=(*buf)>>8; TxDwinDataBuf[7]=*buf; if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 150) == pdFALSE) { return; } ScreenMaster485_Send_Data(TxDwinDataBuf,8); if(xSemaphore) xSemaphoreGive( xSemaphore ); //HAL_Delay(10);// } /****************************************************************************** 发送命令 写16位数据 输入:写入地址:addr16, 写入数据:*buf 输出返回:无 ******************************************************************************/ void WrDwinBuf32(uint16_t addr16,uint16_t *buf) { uint8_t TxDwinDataBuf[10]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x07; TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; TxDwinDataBuf[6]=(*buf)>>8; TxDwinDataBuf[7]=*buf++; TxDwinDataBuf[8]=(*buf)>>8; TxDwinDataBuf[9]=*buf; if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 5) == pdFALSE) { return; } ScreenMaster485_Send_Data(TxDwinDataBuf,10); if(xSemaphore) xSemaphoreGive( xSemaphore ); // HAL_Delay(10);// } /****************************************************************************** 发送命令 写N个数据(字) 输入:写入地址:addr16, 写入数据:*buf n: 发送的地址个数 输出返回:无 ******************************************************************************/ //void WrDwinBuf(uint16_t addr16,uint16_t *buf,uint8_t n) //{ // uint8_t i,num; // uint8_t TxDwinDataBuf[100]; // num = (n<<1); // TxDwinDataBuf[0]=STARTSIGN_H; // TxDwinDataBuf[1]=STARTSIGN_L; // TxDwinDataBuf[2]=num+3; // TxDwinDataBuf[3]=0x82; // TxDwinDataBuf[4]=addr16>>8; // TxDwinDataBuf[5]=addr16; // for(i=0;i>8; // TxDwinDataBuf[i+7]=*buf++; // } // ScreenMaster485_Send_Data(TxDwinDataBuf,6+num); // HAL_Delay(20);// // //} uint8_t TxDwinDataBuf[512]; void WrDwinBuf(uint16_t addr16,uint16_t *buf,uint16_t n,uint8_t LSB_Mode) { uint16_t i,num; if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 200) == pdFALSE) { return; } num = (n<<1); if(num>255-7) { num = 255-7;//防止溢出错误 } TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=num+3; TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; for(i=0;i>8; TxDwinDataBuf[i+6]=*buf++; } else //先发送高位字节 {//李伟修改 20210531 迪文屏的高低存储跟常规的是反过来的 TxDwinDataBuf[i+6]=(*buf)>>8; TxDwinDataBuf[i+7]=*buf++; } } ScreenMaster485_Send_Data(TxDwinDataBuf,6+num); // osDelay(10); #if 0 if(num<10) { HAL_Delay(10); } else { //HAL_Delay(num); ;//HAL_Delay(20); osDelay(20); } #endif if(xSemaphore) xSemaphoreGive( xSemaphore ); } /****************************************************************************** 发送命令 写N个数据(字) 输入:写入地址:addr16, 写入数据:*buf n: 发送的地址个数 输出返回:无 ******************************************************************************/ void WrDwinBuf_u8(uint16_t addr16,uint8_t *buf,uint8_t n) { uint8_t i,num; uint8_t TxDwinDataBuf[100]; num = (n); TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=num+3; TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; for(i=0;i>8; TxDwinDataBuf[5]=addr16; TxDwinDataBuf[6]=len; ScreenMaster485_Send_Data(TxDwinDataBuf,7); // HAL_Delay(10);// } /****************************************************************************** 读取一个字的,读16位数据 输入:写入地址:addr16, 写入数据:*buf 输出返回:无 ******************************************************************************/ void Restart_LCD(void) { uint8_t TxDwinDataBuf[10]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x07; TxDwinDataBuf[3]=0x82; TxDwinDataBuf[4]=0x00;//addr16>>8; TxDwinDataBuf[5]=0x04;//addr16; TxDwinDataBuf[6]=0x55; TxDwinDataBuf[7]=0xAA; TxDwinDataBuf[8]=0x5a;// TxDwinDataBuf[9]=0xa5;// if(xSemaphore && xSemaphoreTake( xSemaphore, ( TickType_t ) 50) == pdFALSE) { return; } ScreenMaster485_Send_Data(TxDwinDataBuf,10); if(xSemaphore) xSemaphoreGive( xSemaphore ); HAL_Delay(10);// } /****************************************************************************** 读取2个字的数据32位 输入:无 输出返回:无 ******************************************************************************/ void RdDwinData32(uint16_t addr16,uint8_t len) { uint8_t TxDwinDataBuf[8]; TxDwinDataBuf[0]=STARTSIGN_H; TxDwinDataBuf[1]=STARTSIGN_L; TxDwinDataBuf[2]=0x06; //êy?Y3¤?è+?üá?+μ??· TxDwinDataBuf[3]=0x83; TxDwinDataBuf[4]=addr16>>8; TxDwinDataBuf[5]=addr16; TxDwinDataBuf[6]=len; ScreenMaster485_Send_Data(TxDwinDataBuf,7); // HAL_Delay(10);// } /****************************************************************************** 接收液晶发下来的数据,并存在结构体中 输入:无 输出返回:无 ******************************************************************************/ //void RxAddrData (void) //{ // u16 i; // DIWEN_com(); // for(i = 0; i < CMDBUF_SIZE; i++) // { // if(ADDR_COMM == RxCmdBuf[i].Cmd_Addr) // { // ADDR_COMM=0xff; // RxCmdBuf[i].Cmd_Flag = 1; // RxCmdBuf[i].Cmd_Data = DATA_COMM; // } // } //} /****************************************************************************** 分析数据并处理数据 输入:无 输出返回:无 ******************************************************************************/ void Lcd_Cmd_Handle(void) { // RxAddrData(); } /****************************************************************************** 界面跳转 输入:ID 输出返回:无 ******************************************************************************/ void Jump_page_id(uint8_t id) { WrDwinCmd32(0x0084,0x5A010000|id); Run_mode_key_info.current_page = id; } /****************************************************************************** 首页 数字:表示页面,在工程中可以看出 输入:无 输出返回:无 ******************************************************************************/ uint8_t Special_Stor; void Go_homepage(void) { switch (all_Store) { case 1: Jump_page_id(1);//跳到主界面常规1仓 Run_mode_key_info.Main_Page_id =1;//状态界面 Run_mode_key_info.Full_oil_id = 10;//装油界面 Run_mode_key_info.offLoading_oil_id =19;//卸油界面 break; case 2: // if((StoreNumber == 1)&&Special_Stor)//跳到1仓2盖((Config_info_all.ManHole_Big_info&0x0f)==0x02) // { // Jump_page_id(2); // Run_mode_key_info.Main_Page_id =2; // Run_mode_key_info.Full_oil_id = 11; // Run_mode_key_info.offLoading_oil_id =20; // } // else //常规2仓 // { Jump_page_id(3); Run_mode_key_info.Main_Page_id =3; Run_mode_key_info.Full_oil_id = 12; Run_mode_key_info.offLoading_oil_id =21; // } break; case 3: Jump_page_id(4); Run_mode_key_info.Main_Page_id =4; Run_mode_key_info.Full_oil_id = 13; Run_mode_key_info.offLoading_oil_id =22; break; case 4: Jump_page_id(5); Run_mode_key_info.Main_Page_id =5; Run_mode_key_info.Full_oil_id = 14; Run_mode_key_info.offLoading_oil_id =23; break; case 5: Jump_page_id(6); Run_mode_key_info.Main_Page_id =6; Run_mode_key_info.Full_oil_id = 15; Run_mode_key_info.offLoading_oil_id =24; break; case 6: Jump_page_id(7); Run_mode_key_info.Main_Page_id =7; Run_mode_key_info.Full_oil_id = 16; Run_mode_key_info.offLoading_oil_id =25; break; case 7: Jump_page_id(8); Run_mode_key_info.Main_Page_id =8; Run_mode_key_info.Full_oil_id = 17; Run_mode_key_info.offLoading_oil_id =26; break; case 8: Jump_page_id(9); Run_mode_key_info.Main_Page_id =9; Run_mode_key_info.Full_oil_id = 18; Run_mode_key_info.offLoading_oil_id =27; break; default:break; } Run_mode_key_info.Liquid_id = 54; } /****************************************************************************** 屏幕初始化 输入:无 输出返回:无 ******************************************************************************/ void Lcd_Init(void) { //初始化界面 WrDwinCmd16(ADDR_DWIN_CoverSmall,0x00);//人孔小盖关 // HAL_Delay(15); WrDwinCmd16(ADDR_DWIN_CoverBig,0x00);//人孔大盖关 // HAL_Delay(15); WrDwinCmd16(ADDR_DWIN_HaiDiFa,0x00);//底阀关 // HAL_Delay(15); WrDwinCmd16(ADDR_DWIN_XieYouFa,0x00);//卸油阀关 // HAL_Delay(15); WrDwinCmd16(ADDR_DWIN_Seal_Lock,0xff);//锁不显示-- // HAL_Delay(15); WrDwinCmd16(ADDR_DWIN_Seal_UnLock,0xff);//锁开不显示 // HAL_Delay(15); WrDwinCmd16(ADDR_DWIN_Car_State,0x00);//状态正常 // HAL_Delay(15); Go_homepage();//回到首页 // //位控制 // WrDwinCmd16(0x1000,0xff);//人孔小盖开 位控制 // WrDwinCmd16(0x1003,0xff);//人孔大盖开 // WrDwinCmd16(0x1006,0xff);//底阀开 // WrDwinCmd16(0x1009,0xff);//卸油阀开 // WrDwinCmd16(0x100c,0xFF);//锁不显示 // WrDwinCmd16(0x100F,0x00);//锁开显示 // // WrDwinCmd16(0x1000,0x00);//人孔小盖关 // WrDwinCmd16(0x1003,0x00);//人孔大盖关 // WrDwinCmd16(0x1006,0x00);//底阀关 // WrDwinCmd16(0x1009,0x00);//卸油阀关 // // WrDwinCmd16(0x100c,0x00);//锁显示 // WrDwinCmd16(0x100F,0xff);//锁开不显示 // // WrDwinCmd16(0x100c,0xff);//锁不显示 // WrDwinCmd16(0x100F,0xff);//锁开不显示 // WrDwinCmd16(0x1022,0x00);//状态正常 // // // WrDwinCmd16(0x1012,0x04);//油量 数值控制 // WrDwinCmd16(0x1014,0x01);// // WrDwinCmd16(0x1016,0x02);// // WrDwinCmd16(0x1018,0x03);//油量 // WrDwinCmd16(0x101a,0x04);// // WrDwinCmd16(0x101c,0x02);// // WrDwinCmd16(0x101e,0x00);//油量 // WrDwinCmd16(0x1020,0x01);// // WrDwinCmd16(0x1022,0x01);//状态异常 // // //进入装油界面 // WrDwinCmd32(0x0084,0x5A010000|18); // // WrDwinCmd16(0x1028,0x01);//装油模式 上装 // WrDwinCmd16(0x1026,0x00);//油量仓 // WrDwinCmd16(0x1024,0x01);//罐仓状态 装油中 // WrDwinCmd16(0x102a,0x01);//装油动画开始 1 // WrDwinCmd16(0x102c,0x01);//装油动画开始 2 // WrDwinCmd16(0x102e,0x01);//装油动画开始 3 // WrDwinCmd16(0x1030,0x01);//装油动画开始 4 // WrDwinCmd16(0x1032,0x01);//装油动画开始 5 // WrDwinCmd16(0x1034,0x01);//装油动画开始 6 // WrDwinCmd16(0x1036,0x01);//装油动画开始 7 // WrDwinCmd16(0x1038,0x01);//装油动画开始 8 // // // // WrDwinCmd16(0x1028,0x00);//装油模式 下装 // WrDwinCmd16(0x1026,0x08);//油量仓 // WrDwinCmd16(0x1024,0x00);//罐仓状态 空闲中 // WrDwinCmd16(0x102a,0x00);//装油动画停止 1 // WrDwinCmd16(0x102c,0x00);//装油动画停止 2 // WrDwinCmd16(0x102e,0x00);//装油动画停止 3 // WrDwinCmd16(0x1030,0x00);//装油动画停止 4 // WrDwinCmd16(0x1032,0x00);//装油动画停止 5 // WrDwinCmd16(0x1034,0x00);//装油动画停止 6 // WrDwinCmd16(0x1036,0x00);//装油动画停止 7 // WrDwinCmd16(0x1038,0x00);//装油动画停止 8 // // // ////进入卸油界面 // WrDwinCmd32(0x0084,0x5A010000|27); // WrDwinCmd16(0x1024,0x00);//罐仓状态 空闲中 // WrDwinCmd16(0x1026,0x01);//油量仓 // WrDwinCmd16(0x1024,0x01);//罐仓状态 卸油中 // // WrDwinCmd16(0x1012,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x102a,0x01);//卸油动画开始 1 // // WrDwinCmd16(0x1014,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x102c,0x01);//卸油动画开始 2 // // WrDwinCmd16(0x1016,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x102e,0x01);//卸油动画开始 3 // // WrDwinCmd16(0x1018,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1030,0x01);//卸油动画开始 4 // // // WrDwinCmd16(0x101a,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1032,0x01);//卸油动画开始 5 // // WrDwinCmd16(0x101c,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1034,0x01);//卸油动画开始 6 // // WrDwinCmd16(0x101e,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1036,0x01);//卸油动画开始 7 // // WrDwinCmd16(0x1020,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1038,0x01);//卸油动画开始 8 // WrDwinCmd16(0x103a,0x01);//仓数显示 // WrDwinCmd16(0x103c,0x01);//装油警告,弹窗 // WrDwinCmd16(0x103e,0x01);//卸油油警告,弹窗 // WrDwinCmd16(0x1040,0x01);//指纹识别,弹窗 //卸油阀异常 1042 //底阀异常 1044 //人孔小盖异常 1046 //人孔大盖异常 1048 //登录用户名 104a //登录密码 104c //密码错误 104e //时间设置 //年 104e //月 1050 //日 1052 //时 1054 //分 1056 //秒 1058 } /****************************************************************************** 显示车辆状态与阀门状态 输入:无 输出返回:无 ******************************************************************************/ uint8_t a=0,b=0,c=0,d=0,i =0; uint8_t e1=0,f1=0,g1=0,h1=0; void Dispaly_CarAndValveState(void) { WrDwinCmd16(ADDR_DWIN_Loading_Oil,(((~IO_Date.IO_unload_switch)&0x01)==0x01?0x00:0x04)); #if 0 uint8_t e=0,f=0,g=0,h=0; e=0,f=0,g=0,h=0; for(i=0;i>i*4))<>(i*4+1)))<>(i*4+2)))<>(i*4+3)))<>i*4))<>(i*4+1)))<>(i*4+2)))<>(i*4+3)))<>i)&0x01)==0x01?0:00));//本仓在卸油或者装油,显示动画,不显示油量Ever_Oil_baseaddr else WrDwinCmd16(ADDR_DWIN_Loading_Oil+(i*2),(((~IO_Date.IO_unload_switch>>i)&0x01)==0x01?0x00:0x04)); } // WrDwinCmd16(0x1000,a);//人孔小盖关 // WrDwinCmd16(0x1003,b);//人孔大盖关 // WrDwinCmd16(0x1006,d);//底阀关 // WrDwinCmd16(0x1009,c);//卸油阀关 if(e1!=e) { WrDwinCmd16(ADDR_DWIN_StateYiChang_CoverSmall,e);//人孔小盖异常 e1=e; } if(f1!=f) { WrDwinCmd16(ADDR_DWIN_StateYiChang_CoverBig,f);//人孔大盖异常 f1=f; } if(h1!=h) { WrDwinCmd16(ADDR_DWIN_StateYiChang_HaiDiFa,h);//底阀异常 h1 = h; } if(g1!=g) { WrDwinCmd16(ADDR_DWIN_StateYiChang_XieYouFa,g);//卸油阀异常 g1 = g; } #if 0 if(Full_Oil_allinfo.Null_ID!=Full_Oil_allinfo.Null_ID_disp) { WrDwinCmd16(0x1012,(((Full_Oil_allinfo.Null_ID>>0)&0x01)==0x01?0:0x04));//油量 数值控制 1 0x04为油量 WrDwinCmd16(0x1014,(((Full_Oil_allinfo.Null_ID>>1)&0x01)==0x01?0:0x04));// 2 WrDwinCmd16(0x1016,(((Full_Oil_allinfo.Null_ID>>2)&0x01)==0x01?0:0x04));// 3 WrDwinCmd16(0x1018,(((Full_Oil_allinfo.Null_ID>>3)&0x01)==0x01?0:0x04));//油量 4 // WrDwinCmd16(0x101a,(((Full_Oil_allinfo.Null_ID>>4)&0x01)==0x01?0:0x04));// 5 // WrDwinCmd16(0x101c,(((Full_Oil_allinfo.Null_ID>>5)&0x01)==0x01?0:0x04));// 6 // WrDwinCmd16(0x101e,(((Full_Oil_allinfo.Null_ID>>6)&0x01)==0x01?0:0x04));//油量 7 // WrDwinCmd16(0x1020,(((Full_Oil_allinfo.Null_ID>>7)&0x01)==0x01?0:0x04));// 8 Full_Oil_allinfo.Null_ID_disp=Full_Oil_allinfo.Null_ID; } #endif if((Full_Oil_allinfo.Auto_sealedOK_ID ==0)&&(Full_Oil_allinfo.Break_sealing_Id ==0))// {//解封状态两把锁均不显示 WrDwinCmd16(ADDR_DWIN_Seal_Lock,0xff);//锁不显示 WrDwinCmd16(ADDR_DWIN_Seal_UnLock,0xff);//锁开不显示 } else { //显示施封图片--一把锁上的锁;该处逻辑是反的----某一位为0,则显示该位的锁 WrDwinCmd16(ADDR_DWIN_Seal_Lock,(~Full_Oil_allinfo.Auto_sealedOK_ID));//锁显示 } if((Full_Oil_allinfo.Break_sealing_Id>0)&&(IO_Date.IO_unload_switch>0)) { WrDwinCmd16(ADDR_DWIN_Seal_UnLock,(~Full_Oil_allinfo.Break_sealing_Id));//锁开显示 //WrDwinCmd16(ADDR_DWIN_Seal_Lock,(~Full_Oil_allinfo.Auto_sealedOK_ID));//锁显示 // WrDwinCmd16(ADDR_DWIN_Seal_Lock,(Full_Oil_allinfo.Break_sealing_Id));//锁不显示 李伟添加 20211028 避免图标混乱 // // FM25L16B_WriteByte(ADDR_Auto_sealedOK_ID,(uint8_t)Full_Oil_allinfo.Auto_sealedOK_ID);//保存施封状态20200428 // FM25L16B_WriteByte(ADDR_Break_sealing_Id,Full_Oil_allinfo.Break_sealing_Id);//保存破封状态20200428 // //WrDwinCmd16(ADDR_DWIN_Seal_UnLock,(~Full_Oil_allinfo.Auto_sealedOK_ID));//锁不显示 李伟添加 20211028 避免图标混乱 } else { WrDwinCmd16(ADDR_DWIN_Seal_UnLock,(~Full_Oil_allinfo.Break_sealing_Id));//锁开bu显示 } if(Full_Oil_allinfo.Car_state!=Full_Oil_allinfo.Car_state_disp) { if (Full_Oil_allinfo.Car_state == 0) //车辆状态OK WrDwinCmd16(ADDR_DWIN_Car_State, 0x00); //状态正常 else if (Full_Oil_allinfo.Car_state == 1) WrDwinCmd16(ADDR_DWIN_Car_State, 0x02); //状态NOK else WrDwinCmd16(ADDR_DWIN_Car_State, 0x01); //状态破封 Full_Oil_allinfo.Car_state_disp=Full_Oil_allinfo.Car_state; } #endif if(Lcd_sleep_flag ==1)//屏幕休眠 { WrDwinCmd16(0x0082,0x0000);//亮度调节0x0000~0x6464 } else if(Lcd_sleep_flag==2)//唤醒休眠 { Lcd_sleep_flag =3; //Jump_page_id(Run_mode_key_info.current_page); WrDwinCmd16(0x0082,0x3600);//亮度调节0x0000~0x646 } } /****************************************************************************** 装油动画 输入:mode 装油模式 sedata 装油的仓 输出返回:无 ******************************************************************************/ void FULL_oil_draw(uint8_t mode,uint8_t se_data)//装油动画 { uint8_t i=0; if(se_data!=0) WrDwinCmd16(ADDR_DWIN_Operation_State,0x01);//罐仓状态 装油中 else WrDwinCmd16(ADDR_DWIN_Operation_State,0x00);//罐仓状态 空闲中 WrDwinCmd16(ADDR_DWIN_Loading_Oil_Mode,mode);//装油模式 上装1 下装0 WrDwinCmd16(ADDR_DWIN_Num_Of_CangId,se_data);//油量仓12345678 for(i=0;i>i); //HAL_Delay(10);// } // WrDwinCmd16(0x102a,0x01);//装油动画开始 1 // WrDwinCmd16(0x102c,0x01);//装油动画开始 2 // WrDwinCmd16(0x102e,0x01);//装油动画开始 3 // WrDwinCmd16(0x1030,0x01);//装油动画开始 4 // WrDwinCmd16(0x1032,0x01);//装油动画开始 5 // WrDwinCmd16(0x1034,0x01);//装油动画开始 6 // WrDwinCmd16(0x1036,0x01);//装油动画开始 7 // WrDwinCmd16(0x1038,0x01);//装油动画开始 8 } /****************************************************************************** 卸油动画 输入: sedata 装油的仓 输出返回:无 ******************************************************************************/ void Off_loading_draw(uint8_t se_data) { uint8_t i=0; if(se_data!=0) WrDwinCmd16(ADDR_DWIN_Operation_State,0x01);//罐仓状态 卸油中 else WrDwinCmd16(ADDR_DWIN_Operation_State,0x00);//罐仓状态 空闲中 WrDwinCmd16(ADDR_DWIN_Num_Of_CangId,se_data);//卸量仓12345678 for(i=0;i>i); //HAL_Delay(10);// } // WrDwinCmd16(0x1024,0x00);//罐仓状态 空闲中 // WrDwinCmd16(0x1026,0x01);//油量仓 // WrDwinCmd16(0x1024,0x01);//罐仓状态 卸油中 // // WrDwinCmd16(0x1012,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x102a,0x01);//卸油动画开始 1 // // WrDwinCmd16(0x1014,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x102c,0x01);//卸油动画开始 2 // // WrDwinCmd16(0x1016,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x102e,0x01);//卸油动画开始 3 // // WrDwinCmd16(0x1018,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1030,0x01);//卸油动画开始 4 // // // WrDwinCmd16(0x101a,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1032,0x01);//卸油动画开始 5 // // WrDwinCmd16(0x101c,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1034,0x01);//卸油动画开始 6 // // WrDwinCmd16(0x101e,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1036,0x01);//卸油动画开始 7 // // WrDwinCmd16(0x1020,0x00);//1仓油量 数值控制 // WrDwinCmd16(0x1038,0x01);//卸油动画开始 8 /* 5A A5 07 82 0082 6420 07D0 (10秒后进入背光,点击变亮,10000/5=2000 换算成16进制为07D0,范围00-64,100级亮度调节) */ } void Read_REAL_Time(void) { /* 5A A5 0B 82 009C 5A A5 12 06 1B 15 15 15 (18年6月27号21时21分21秒,16进制数据) 读RTC:5A A5 04 83 0010 04 */ RdDwinData16(0x0010,4); } void Wakeup_lcd(void) { uint8_t PopWinCmdBuf[14]={0x5A ,0xA5 ,0x0B ,0x82 ,0x00 ,0xD4 ,0x5A ,0xA5 ,0x00 ,0x04 ,0x00 ,0x00 ,0x00 ,0x00}; //5A A5 0B 82 00D4 5AA5 0004 00EE 008F UartWrite(&huart2,PopWinCmdBuf,14); } void Display_input_time(uint8_t flag,uint8_t *time) { uint8_t arr[6]={0}; uint8_t i =0; for(i=0;i<6;i++) { //arr[i]=time[i*2]-0x30+time[i*2+1]-0x30; if(time[i*2]!=0x00) { if(time[i*2+1]!=0x00) arr[i] = (time[i*2]-0x30)*10+(time[i*2+1]-0x30); else arr[i] = time[i*2]-0x30; } else { break; } } WrDwinCmd16(0x104e,arr[0]);//年 HAL_Delay(10);// WrDwinCmd16(0x1050,arr[1]);//月 HAL_Delay(10);// WrDwinCmd16(0x1052,arr[2]);//日 HAL_Delay(10);// WrDwinCmd16(0x1054,arr[3]);//时 HAL_Delay(10);// WrDwinCmd16(0x1056,arr[4]);//分 HAL_Delay(10);// WrDwinCmd16(0x1058,arr[5]);//秒 HAL_Delay(10);// if(flag ==1)//发送时间确认修改 { flag =0; Send_Time(arr); } } //time 要修改的时间 void Send_Time(uint8_t * time) { // u8 i =0; memcpy(time_Set_Dwin+8,time,6); UartWrite(&huart2,time_Set_Dwin,14); /* delay_ms(100);*/ } //flag 显示密码错误信息 pawd_num 密码个数 //登录用户名 104a //登录密码 104c //密码错误 105a void Dispay_login(uint8_t flag,uint8_t pawd_num) { WrDwinCmd16(0x104a,0); HAL_Delay(10);// if(pawd_num<7) WrDwinCmd16(0x104c,pawd_num); HAL_Delay(10);// if(flag==1) WrDwinCmd16(0x105a,1);//密码错误提示 else WrDwinCmd16(0x105a,0); }