📄 board.c
字号:
led01=20;//F.OH
led02=22;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 7:
{
led01=26;//F.OU
led02=22;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 8:
{
led01=24;//F.ER
led02=18;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 9:
{
led01=22;//F.PO
led02=23;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 10:
{
led01=24;//F.UA
led02=26;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 11:
{
led01=24;//F.OA
led02=22;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 12:
{
led01=21;//F.OL
led02=22;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 13:
{
led01=26;//F.UU
led02=26;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
case 14:
{
led01=25;//F.OS
led02=22;
led03=15;
led04=19;
fault_flash_flag=1;
break;
}
default:break;
}
}
//=============================================================
//程序说明:1ms子中断
//=============================================================
void T0_PERIOD(void) interrupt 1 //外中断,接收中断子程序
{
TH0=0xfc;
TL0=0x66; //1ms
//=====================================
send();//发送程序
//=====================================
light_pro();//点灯程序
//=====================================
//通讯未成功,报故障,其他菜单不响应
//=====================================
if(send_success_flag==0)
{
confirm=0;//通讯不正常时,需要初始化某些参数
point_flag=0;
high_led_number=4;
led_pos=0;
start_only_once_flag=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_flash_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;
led_pos=0;
fault_pro();//故障处理程序
start_only_once_flag=0;
}
}
else
fault_enter_flag++;//这个寄存器的作用是2次周期中断获取一个故障代码
}
else
{
fault_enter_flag=0;//这个值需要复位
if((start_only_once_flag==0)&&(confirm==0))//保证开机时通讯正常后,只进入一次
{
led01=10;//F.--
led02=10;
led03=15;
led04=19;
start_only_once_flag=1;
}
fault_flash_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)//20ms没有收到应答,则从发前次数据
{
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;
}
}
//============================================
//显示类数据只有进入显示菜单,并且联网成功后发送
//============================================
if((confirm==0x11)&&(send_success_flag==1))
{
send_show_count++;
if(send_show_count>=SEND_SHOW_TIME)//设置显示数据请求
{
send_show_count=0;
send_kind=send_kind|SEND_SHOW;
}
}
else
{
send_show_count=0;
}
//==================================
//根据LED的数码位,进行相应位发送
//==================================
led_show_byte_number++;
if(led_show_byte_number>=4)
led_show_byte_number=0;
if(led_show_byte_number==0)
led_show_number=0xef;
if(led_show_byte_number==1)
led_show_number=0xdf;
if(led_show_byte_number==2)
led_show_number=0xbf;
if(led_show_byte_number==3)
led_show_number=0x7f;
led_show_byte();//1个8位数码管的显示程序
//=================================
//按键采样,字符输出
//=================================
key_sample_count_l++;
if(key_sample_count_l>199)
{
key_sample_count_l=1;
if(send_success_flag==1)//只有通讯正常才采样键值
{
key_sample();
}
IN_PUT();
getcode();
value_show();
if(send_ask_set_flag==1)
set_show();//这里set的值也具有实时通讯显示功能。
if(send_ask_fault_flag==1)
fault_show();//这里fault堆栈也具有实时通讯显示功能。
display();
key_sample_code=0;
}
//================================
//COPY和PASTE键处理程序
//================================
if(function_key_kind==1)//1表示是COPY键
{
if(led_data>62)//总共62个参数
{
function_key_kind=function_key_kind&0xfe;//清除参数复制键标志
}
else
{
send_kind=send_kind|SEND_FU;//COPY键是在参数发送基础上的
}
}
//===============================
if(function_key_kind==2)
{
if(led_data>62)//总共62个参数
{
function_key_kind=function_key_kind&0xfd;
}
else
{
send_kind=send_kind|SEND_SET;//清除粘帖键标志
eeprom_addh=0x28;
eeprom_addl=led_data-1;//从0x2800开始
eeprom_read();
set_data=(eeprom_data&0xff)<<8;//先取高8位数据
led_data++;
eeprom_addl=led_data-1;
eeprom_read();
set_data=set_data|eeprom_data;//再取低8位数据
}
}
}
//================================
//eeprom的读操作
//================================
eeprom_read()
{
ISP_CONTR=ENABLE_ISP;
ISP_CMD=ISP_IAP_BYTE_READ;
ISP_ADDRH=eeprom_addh;
ISP_ADDRL=eeprom_addl;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
eeprom_data=ISP_DATA;
disable_eeprom();
}
//================================
//eeprom的写操作
//================================
eeprom_write()
{
ISP_CONTR=ENABLE_ISP;
ISP_CMD=ISP_IAP_BYTE_PROGRAM;
ISP_ADDRH=eeprom_addh;
ISP_ADDRL=eeprom_addl;
ISP_DATA=eeprom_data;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
disable_eeprom();
}
//================================
//eeprom的擦除操作
//================================
eeprom_erase()
{
ISP_CONTR=ENABLE_ISP;
ISP_CMD=ISP_IAP_SECTOR_ERASE;
ISP_ADDRH=0x28;
ISP_ADDRL=0x00;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
disable_eeprom();
}
//================================
//eeprom不使能操作
//================================
disable_eeprom()
{
ISP_CONTR=0;
ISP_CMD=0;
ISP_TRIG=0x00;
}
//================================
//程序说明:根据要求进行LED显示字符刷新
//================================
display()
{
if(flash_code==0)
{
flash_code=1;
led_show_value[0]=ledcode01;
led_show_value[1]=ledcode02;
led_show_value[2]=ledcode03;
led_show_value[3]=ledcode04;
}
else
{
flash_code=0;
led_show_value[0]=ledcode01flash;
led_show_value[1]=ledcode02flash;
led_show_value[2]=ledcode03flash;
led_show_value[3]=ledcode04flash;
}
}
//================================
//程序说明:根据按键输入,进行相应操作
//================================
IN_PUT()
{
char i;
int type_num;
int data_temp;
switch(key_sample_code)
{
case MODE_KEY:
{
send_ask_set_flag=0;
send_ask_fault_flag=0;
set_rev_flag=0;
key_sample_count_h=0;
if((confirm==0x11)||(confirm==0x21)||(confirm==0x31))
{
point_flag=0;
high_led_number=4;
if(confirm==0x11)
{
led04=14;
led03=10;
led01=led_data%10;
led02=led_data/10;
confirm=0x10;
led_pos=1;
}
if(confirm==0x21)
{
led04=13;
led03=10;
led01=led_data%10;
led02=led_data/10;
confirm=0x20;
led_pos=1;
}
if(confirm==0x31)
{
led04=28;
led03=10;
led01=led_data%10;
led02=led_data/10;
confirm=0x30;
led_pos=1;
}
}
else
{
confirm=confirm+0x10;
if(confirm>=0x40)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -