1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069 |
- #include "Dwin.h"
- #include "usart.h"
- #include <stdio.h>
- #include <string.h>
- #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};
- #define UI_VERSION_00 (0X00)
- #define UI_VERSION_2B (0X2B)
- static uint8_t ui_version = UI_VERSION_00;
- 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<num;i+=2)
- // {
- // TxDwinDataBuf[i+6]=(*buf)>>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<num;i+=2)
- {
- if(LSB_Mode==1)//先发送低位字节
- {
- TxDwinDataBuf[i+7]=(*buf)>>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<num;i+=1)
- {
- TxDwinDataBuf[i+6]=(*buf);
- //TxDwinDataBuf[i+7]=*buf++;
- }
- ScreenMaster485_Send_Data(TxDwinDataBuf,6+num);
- // HAL_Delay(10);//
-
- }
- /******************************************************************************
- 读取一个字的,读16位数据
- 输入:写入地址:addr16, 写入数据:*buf
- 输出返回:无
- ******************************************************************************/
- void RdDwinData16(uint16_t addr16,uint8_t len)
- {
- uint8_t TxDwinDataBuf[8];
- TxDwinDataBuf[0]=STARTSIGN_H;
- TxDwinDataBuf[1]=STARTSIGN_L;
- TxDwinDataBuf[2]=0x04;
- TxDwinDataBuf[3]=0x83;
- TxDwinDataBuf[4]=addr16>>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);
- if(UI_VERSION_2B > ui_version){
- WrDwinCmd16(ADDR_DWIN_HaiDiFa,0x00);//底阀关
- WrDwinCmd16(ADDR_DWIN_XieYouFa,0x00);//卸油阀关
- }else{
- for(int i=0;i<StoreNumber;i++){
- WrDwinCmd16(ADDR_DWIN_UnloadVlave_Status+2*i, VALVESTATUS_CLOSE);
- WrDwinCmd16(ADDR_DWIN_SeaVlave_Status+2*i, VALVESTATUS_CLOSE);
- }
- }
-
- // 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;
- uint8_t e1=0,f1=0,g1=0,h1=0;
- void Dispaly_CarAndValveState(void)
- {
- uint8_t e=0,f=0,g=0,h=0;
- uint8_t i=0;
- uint8_t SeaValue001=0x00;//8个海底阀的状态
- uint8_t UnloadingValve001=0x00;//8个泄油阀的状态
- uint8_t ManHole_CoverBig001=0x00;//8个人孔大盖的状态
- uint8_t ManHole_CoverSmall001=0x00;//8个人孔小盖的状态
- //uint8_t Unloaded001=0x00;//8个卸尽状态, 卸尽仓置1
- static uint8_t static_unloadvalve_state[8] ={VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK\
- ,VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK};
- static uint8_t static_seavalve_state[8] ={VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK\
- ,VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK,VALVESTATUS_BREAK};
- for(i=0;i<StoreNumber;i++)
- {
- //a|= (0x0001&(IO_Date.IO_state[0]>>i*4))<<i;
- //b|= (0x0001&(IO_Date.IO_state[0]>>(i*4+1)))<<i;
- //c|= (0x0001&(IO_Date.IO_state[0]>>(i*4+2)))<<i;
- //d|= (0x0001&(IO_Date.IO_state[0]>>(i*4+3)))<<i;
- e|= (0x0001&(IO_Date.IO_normalstate[0]>>i*4))<<i;
- f|= (0x0001&(IO_Date.IO_normalstate[0]>>(i*4+1)))<<i;
- g|= (0x0001&(IO_Date.IO_normalstate[0]>>(i*4+2)))<<i;
- h|= (0x0001&(IO_Date.IO_normalstate[0]>>(i*4+3)))<<i;
- if((((Full_Oil_allinfo.Start_Decrease_flag&(1<<i))==(1<<i))||(Full_Oil_allinfo.Loading_Oil_state&(1<<i))==(1<<i))&&(Run_mode_key_info.current_page !=Run_mode_key_info.Main_Page_id))
- WrDwinCmd16(ADDR_DWIN_Loading_Oil+(i*2),(((~IO_Date.IO_unload_switch>>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);//卸油阀关
- PreProcess_GetValveStatus(&ManHole_CoverBig001, &ManHole_CoverSmall001, &SeaValue001, &UnloadingValve001);
- if(a!=ManHole_CoverBig001)
- {
- WrDwinCmd16(ADDR_DWIN_CoverBig,ManHole_CoverBig001);//人孔大盖开关
- a=ManHole_CoverBig001;
- }
- if(b!=ManHole_CoverSmall001)
- {
- WrDwinCmd16(ADDR_DWIN_CoverSmall,ManHole_CoverSmall001);//人孔小盖开关
- b=ManHole_CoverSmall001;
- }
- if(e1!=e)
- {
- WrDwinCmd16(ADDR_DWIN_StateYiChang_CoverSmall,e);//人孔小盖异常
- e1=e;
- }
- if(f1!=f)
- {
- WrDwinCmd16(ADDR_DWIN_StateYiChang_CoverBig,f);//人孔大盖异常
- f1=f;
- }
- if(UI_VERSION_2B > ui_version){
- if(c!=SeaValue001)
- {
- WrDwinCmd16(ADDR_DWIN_HaiDiFa,SeaValue001);//海底阀开关
- c=SeaValue001;
- }
- if(d!=UnloadingValve001)
- {
- WrDwinCmd16(ADDR_DWIN_XieYouFa,UnloadingValve001);//卸油阀开关
- d=UnloadingValve001;
- }
- if(h1!=h)
- {
- WrDwinCmd16(ADDR_DWIN_StateYiChang_HaiDiFa,h);//底阀异常
- h1 = h;
- }
- if(g1!=g)
- {
- WrDwinCmd16(ADDR_DWIN_StateYiChang_XieYouFa,g);//卸油阀异常
- g1 = g;
- }
- }else{
- for(i=0;i<StoreNumber;i++)
- {
- uint8_t status = VALVESTATUS_CLOSE;
- if((g&(0x01<<i)) > 0){ //异常了
- status = VALVESTATUS_EXCEPTION;
- }else{
- if((UnloadingValve001&(0x01<<i)) == 0){ //关
- status = VALVESTATUS_CLOSE;
- }else{ //开
- status = VALVESTATUS_OPEN;
- }
- }
- if(static_unloadvalve_state[i] != status){
- WrDwinCmd16(ADDR_DWIN_UnloadVlave_Status+2*i, status);
- static_unloadvalve_state[i] = status;
- }
- //SealVlave
- if((h&(0x01<<i)) > 0){ //异常了
- status = VALVESTATUS_EXCEPTION;
- }else{
- if((SeaValue001&(0x01<<i)) == 0){ //关
- status = VALVESTATUS_CLOSE;
- }else{ //开
- status = VALVESTATUS_OPEN;
- }
- }
- if(static_seavalve_state[i] != status){
- WrDwinCmd16(ADDR_DWIN_SeaVlave_Status+2*i, status);
- static_seavalve_state[i] = status;
- }
- }
- }
- #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;
- }
-
-
-
- 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<StoreNumber;i++)
- {
- WrDwinCmd16(ADDR_DWIN_UnLoading_Oil_Mode+i*2,(se_data&(0x01<<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<StoreNumber;i++)
- {
- WrDwinCmd16(ADDR_DWIN_UnLoading_Oil_Mode+i*2,(se_data&(0x01<<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);
-
- }
|