#include "gpios.h" #include "ds18b20.h" #include "spi.h" #include "atcom.h" uint8_t coil1 = 0,coil2 = 0; uint8_t u2tx_buf; uint8_t u3tx_buf[8] = {0x01,0x03,0x00,0x00,0x00,0x04,0x44,0x09}; //温度 short Temp = 0; bool spi_flag = true; int wifi_cnt = 0; uint8_t position_on = 0,position_off = 0,position_esd = 0; void led_ctrl() { if(it_1000ms_flag == 1) { it_1000ms_flag = 0; HAL_GPIO_TogglePin(GPIO_LED_GPIO_Port,GPIO_LED_Pin); //Temp = ds18b20_get_temp(); //环境温度 //InputReg[19] = Temp; uart_send(&huart3,u3tx_buf,8); wifi_cnt++; if(wifi_cnt == 2) { wifi_set(); wifi_cnt = 0; } } } void digital_ctrl() { led_ctrl(); //全开全关ESD控制信号互斥 if(((CoilState[0]>>0)&0x01) && !position_on) { CoilState[0] = CoilState[0] & 0xfd; CoilState[0] = CoilState[0] & 0xfb; } if(((CoilState[0]>>1)&0x01) && !position_off) { CoilState[0] = CoilState[0] & 0xfe; CoilState[0] = CoilState[0] & 0xfb; } if(((CoilState[0]>>2)&0x01) && !position_esd) { CoilState[0] = CoilState[0] & 0xfe; CoilState[0] = CoilState[0] & 0xfd; } position_on = (CoilState[0]>>0)&0x01; position_off = (CoilState[0]>>1)&0x01; position_esd = (CoilState[0]>>2)&0x01; //八位DO输出控制 PE2_DO1((GPIO_PinState)((CoilState[0]>>0)&0x01)); PE3_DO2((GPIO_PinState)((CoilState[0]>>1)&0x01)); PE4_DO3((GPIO_PinState)((CoilState[0]>>2)&0x01)); PE5_DO4((GPIO_PinState)((CoilState[0]>>3)&0x01)); PE6_DO5((GPIO_PinState)((CoilState[0]>>4)&0x01)); PC13_DO6((GPIO_PinState)((CoilState[0]>>5)&0x01)); PC14_DO7((GPIO_PinState)((CoilState[0]>>6)&0x01)); PC15_DO8((GPIO_PinState)((CoilState[0]>>7)&0x01)); coil1 = coil2; coil2 = CoilState[2]; //当有595级联的时候,先发的数据会级联到第二块595芯片中 if(coil1 != coil2) { hc595_write_data(CoilState[2]); hc595_write_data(CoilState[1]); disp_out(); } else { hc595_write_data(CoilState[1]); disp_out(); } if((CoilState[3]>>0)&0x01) { //laser_handle.state = LASER_OPEN_STATUS; CoilState[3] -= 0x01; } if((CoilState[3]>>1)&0x01) { //flow_state = 0; CoilState[3] -= 0x02; } if((CoilState[3]>>2)&0x01) { __HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万 cnt_update = 152; CoilState[3] -= 0x04; } // if((CoilState[3]>>3)&0x01) // { // if(!spi_flag) // { // HAL_SPI_MspInit(&hspi2); // MX_SPI2_Init(); // ch395_gpio_init(); // spi_flag = true; // } // HAL_GPIO_WritePin(CH395Q_TX_CTRL_GPIO_Port, CH395Q_TX_CTRL_Pin, GPIO_PIN_SET); // } // else // { // if(spi_flag) // { // ch395_spi_off(); // spi_flag = false; // } // HAL_GPIO_WritePin(CH395Q_TX_CTRL_GPIO_Port, CH395Q_TX_CTRL_Pin, GPIO_PIN_RESET); // } if((CoilState[3]>>4)&0x01) { for(int i = 25;i < 36;i++) { InputReg[i] = 0; } u2tx_buf = 0xF5; uart_send(&huart2,(uint8_t *)&u2tx_buf,1);//启动气密仪开始检测(相当于按气密仪上的[启动]按键) 回传0xF5+0x0D+0x0A CoilState[3] -= 0x10; } if((CoilState[3]>>5)&0x01) { for(int i = 25;i < 36;i++) { InputReg[i] = 0; } u2tx_buf = 0xF3; uart_send(&huart2,(uint8_t *)&u2tx_buf,1);//读取最后一次检测结果(相当于检测完毕后,仪器自动发送的结果) CoilState[3] -= 0x20; } if((CoilState[3]>>6)&0x01) { for(int i = 25;i < 36;i++) { InputReg[i] = 0; } u2tx_buf = 0xF0; uart_send(&huart2,(uint8_t *)&u2tx_buf,1);//复位气密仪(复位过程约8秒) 回传 0xF0+0x0D+0x0A CoilState[3] -= 0x40; } DisState[0] = (_74hc165_read_byte()>>8) & 0x00FF; DisState[1] = _74hc165_read_byte() & 0x00FF; DisState[2] = DI_NAMUR1 + DI_NAMUR2 * 2; }