154 lines
3.2 KiB
C
154 lines
3.2 KiB
C
#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();
|
||
|
||
//全开全关控制信号互斥
|
||
if(((CoilState[0]>>0)&0x01) && !position_on)
|
||
{
|
||
CoilState[0] = CoilState[0] & 0xfd;
|
||
}
|
||
if(((CoilState[0]>>1)&0x01) && !position_off)
|
||
{
|
||
CoilState[0] = CoilState[0] & 0xfe;
|
||
}
|
||
position_on = (CoilState[0]>>0)&0x01;
|
||
position_off = (CoilState[0]>>1)&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;
|
||
}
|