📄 board.bak
字号:
}
}
break;
}
case SHOW_CMD:
{
if(rx_point>=5)
{
rx_point=0;
if(send_over_kind==SHOW_CMD)
{
send_over_kind=0;
send_over_flag=0;//清除一类数据发送完标志位
send_kind=send_kind&0xbf;//清除本次显示命令标志位
temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2]^rx_buffer[3];
if(temp_data==rx_buffer[4])
{
show_data=(rx_buffer[2]<<8)|rx_buffer[3];
switch(led_data)
{
case 24:case 25:
{
show_data=(long)show_data/30;//3000表示T1周期寄存器最大值
break;
}
default:break;
}
}
}
}
break;
}
case FAULT_STACK_CMD:
{
if(rx_point>=4)
{
rx_point=0;
if(send_over_kind==FAULT_STACK_CMD)
{
send_over_kind=0;
send_over_flag=0;//清除一类数据发送完标志位
send_kind=send_kind&0xdf;//清除本次显示命令标志位
temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2];
if(temp_data==rx_buffer[3])
{
error_data=rx_buffer[2];
}
}
}
break;
}
case HEART_CMD:
{
rx_point=0;
if(send_over_kind==HEART_CMD)
{
send_over_kind=0;
send_over_flag=0;//清除一类数据发送完标志位
send_heart_last_count=0;
send_kind=send_kind&0x7f;//清除本次心跳命令标志位
}
break;
}
case FAULT_CMD:
{
if(rx_point>=5)
{
rx_point=0;
if(send_over_kind==FAULT_CMD)
{
send_over_kind=0;
send_over_flag=0;//清除一类数据发送完标志位
send_kind=send_kind&0xef;//清除本次故障显示命令标志位
temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2]^rx_buffer[3];
if(temp_data==rx_buffer[4])
{
fault_data=(rx_buffer[1]<<8)|rx_buffer[2];
sys_state=rx_buffer[3];
}
}
}
break;
}
case RESET_KEY_CMD:
{
rx_point=0;
if(send_over_kind==RESET_KEY_CMD)
{
send_over_kind=0;
send_over_flag=0;//清除一类数据发送完标志位
send_kind=send_kind&0xfd;//清除本次按键命令标志位
}
break;
}
case SET_FU_CMD:
{
if(rx_point>=5)
{
rx_point=0;
if(send_over_kind==SET_FU_CMD)
{
send_over_kind=0;
send_over_flag=0;//清除一类数据发送完标志位
send_kind=send_kind&0xf7;//清除本次设置菜单命令标志位
temp_data=rx_buffer[0]^rx_buffer[1]^rx_buffer[2]^rx_buffer[3];
if(temp_data==rx_buffer[4])
{
set_data=(rx_buffer[2]<<8)|rx_buffer[3];
if(led_data==5)
{
if(set_data>0)
set_data=ceil((long)set_data*1.5*5/(1.5*0.4*6*2.048*100));
if(set_data<0)
set_data=floor((long)set_data*1.5*5/(1.5*0.4*6*2.048*100));
}
}
if(function_key_kind==1)//是参数COPY键时处理
{
led_data++;
}
}
}
break;
}
default:break;
}
}
//============================================================
//程序说明:这里根据实际情况将5个LED灯进行控制
//============================================================
void led_pro()
{
char j,led_temp=0xff;
bit led_bit;
//===========================================================
if(confirm==0x21)//系统处于设置菜单时点亮菜单设置灯
light_set_flag=1;
else
light_set_flag=0;
//===========================================================
if(fault_data!=0)//系统有故障产生,则闪烁故障灯
light_fault_flag=1;
else
{
light_fault_flag=0;
light_fault_flash_flag=0;
light_fault_flash_count=0;
}
//===========================================================
if(sys_state&0x4)//已经有能量回馈后回馈灯常亮,
{
light_work_flag=1;
light_work_flash=0;
light_work_flash_flag=0;
light_work_flash_count=0;
}
else
{
if(sys_state&0x8)//没有回馈只有使能时,回馈灯闪烁
{
light_work_flag=1;
light_work_flash=1;
}
else //没有回馈也没有使能,则不亮灯
{
light_work_flag=0;
light_work_flash=0;
light_work_flash_flag=0;
light_work_flash_count=0;
}
}
//============================================================
if(light_power_flag==1)
led_temp=led_temp&0x7f;
//============================================================
if(light_set_flag==1)
led_temp=led_temp&0xbf;
//============================================================
if(light_fault_flag==1)
{
if(light_fault_flash_flag==1)
led_temp=led_temp&0xdf;
light_fault_flash_count++;
if(light_fault_flash_count>200)//故障灯闪烁处理
{
light_fault_flash_count=0;
if(light_fault_flash_flag==1)
light_fault_flash_flag=0;
else
light_fault_flash_flag=1;
}
}
//===========================================================
if(light_work_flag==1)
{
if(light_work_flash==0)
led_temp=led_temp&0xef;//回馈灯不闪烁处理
else
{
if(light_work_flash_flag==1)
led_temp=led_temp&0xef;//回馈灯闪烁处理
light_work_flash_count++;
if(light_work_flash_count>200)
{
light_work_flash_count=0;
if(light_work_flash_flag==1)
light_work_flash_flag=0;
else
light_work_flash_flag=1;
}
}
}
//============================================
/* if(led_com_flag==1)
led_temp=led_temp&0xf7;*/
for(j=0;j<8;j++)
{
if(led_temp&0x1==1)
led_bit=1;
else
led_bit=0;
CLK=0;
DI=led_bit;
CLK=1;
led_temp=led_temp>>1;
}
RCK=0;
RCK=1;
led_temp=P2|0xf8;
led_temp=led_temp&0xf7;
P2=led_temp;
}
//============================================================
//程序说明:一旦检测到主机故障,人机界面跳到故障显示
//============================================================
fault_pro(void)
{
fault_number=0;
if(time_i==16)//参数复位
time_i=1;
if(fault_temp&0x8000)//参数复位
fault_temp=0x1;
for(time_i;time_i<16;)
{
if(fault_data&fault_temp)
{
fault_number=time_i;
}
fault_temp=fault_temp<<1;
time_i++;
if(fault_number!=0)//已经采集到故障后,跳出
break;
}
if(fault_number==0)
{
time_i=1;
fault_temp=0x1;
for(time_i;time_i<16;)
{
if(fault_data&fault_temp)
{
fault_number=time_i;
}
fault_temp=fault_temp<<1;
time_i++;
if(fault_number!=0)//已经采集到故障后,跳出
break;
}
}
switch(fault_number)
{
case 0:
{
led01=10;//F.--
led02=10;
led03=15;
led04=19;
fault_show_flag=0;
break;
}
case 1:
{
led01=17;//F.OC
led02=22;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 2:
{
led01=17;//F.SC
led02=25;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 3:
{
led01=28;//F.EF 表示外部输入故障
led02=18;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 4:
{
led01=23;//F.EP
led02=18;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 5:
{
led01=24;//F.FR
led02=28;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 6:
{
led01=20;//F.OH
led02=22;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 7:
{
led01=26;//F.OU
led02=22;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 8:
{
led01=24;//F.ER
led02=18;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 9:
{
led01=22;//F.PO
led02=23;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 10:
{
led01=24;//F.UA
led02=26;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 11:
{
led01=24;//F.OA
led02=22;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 12:
{
led01=21;//F.OL
led02=22;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 13:
{
led01=26;//F.UU
led02=26;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
case 14:
{
led01=25;//F.OS
led02=22;
led03=15;
led04=19;
fault_show_flag=1;
break;
}
default:break;
}
}
//=============================================================
//程序说明:1ms子中断
//=============================================================
void T0_PERIOD(void) interrupt 1 //外中断,接收中断子程序
{
TH0=0xfc;
TL0=0x66; //1ms
send();//发送程序
led_pro();//点灯程序
//====================================
//通讯未成功,报故障,其他菜单不响应
//====================================
if(send_success_flag==0)
{
confirm=0;//通讯不正常时,需要初始化某些参数
point_flag=0;
high_led_number=4;
led_pos=0;
first_flag2=0;
fault_first_flag=0;
send_ask_set_flag=0;
send_ask_fault_flag=0;
fault_enter_flag=0;
send_on_kind=0;
led01=17;//F.EC
led02=18;
led03=15;
led04=19;
fault_show_flag=1;
}
else//通讯正常后,判断是否存在故障
{
//=====================================
if(fault_data!=0)
{
if(fault_enter_flag==1)
{
fault_enter_flag=0;
if(fault_first_flag==0)//一旦出现故障,没有模式键前提下,不断更新
{
confirm=0;
point_flag=0;
//high_led_number=4;
led_pos=0;
fault_pro();//故障处理程序
first_flag2=0;
}
}
else
fault_enter_flag++;
}
else
{
fault_enter_flag=0;
if((first_flag2==0)&&(confirm==0))//一旦通讯正常后,只进入一次
{
led01=10;//F.--
led02=10;
led03=15;
led04=19;
first_flag2=1;
}
fault_show_flag=0;//没有任何故障,不需要置位
fault_first_flag=0;
}
}
//===================================
//以下程序用来定时:当一类数据发送完成时,
//10ms还没收到主机应答时,需要再次发送
//====================================
if(send_over_flag==1)
send_inter_count++;
else
send_inter_count=0;
if(send_inter_count>SEND_COMM_ERROR)
{
send_over_kind=0;
send_over_flag=0;
send_inter_count=0;
rx_point=0;
send_on_kind=0;
}
//==================================
//定时置发送类标志
//==================================
if(send_success_flag==1)
{
send_hand_count=0;
send_fault_count++;
if(send_fault_count>=SEND_FAULT_TIME)
{
send_kind=send_kind|SEND_FAULT;
send_fault_count=0;
}
send_heart_count++;
if(send_heart_count>=SEND_HEART_TIME)
{
send_kind=send_kind|SEND_HEART;
send_heart_count=0;
}
send_heart_last_count++;
if(send_heart_last_count>=SEND_HEART_LAST_TIME)
{
send_success_flag=0;
send_heart_last_count=0;
}
}
else
{
send_fault_count=0;//通讯不正常时,需要初始化某些参数
send_heart_count=0;
send_heart_last_count=0;
send_over_kind=0;
send_over_flag=0;
send_point=0;
rx_point=0;
send_on_flag=0;
set_data=0;
fault_data=0;
show_data=0;
sys_state=0;
error_data=0;
key_sample_code=0;
send_show_count=0;
send_kind=send_kind&SEND_HAND;
send_hand_count++;
if(send_hand_count>=SEND_HAND_TIME)
{
send_kind=send_kind|SEND_HAND;
send_hand_count=0;
}
}
//============================================
//显示类数据只有进入显示菜单,并且联网成功后发送
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -