实例介绍
【实例截图】
【核心代码】
void BaJiFun_Button_Process(uint16 control_id, uint8 state)
{
if(control_id <= 8)
{
if(state == 1) BaJiFun = (BaJiFun | (1<<(control_id-1)));
else BaJiFun = (BaJiFun & (~(1<<(control_id-1))));
}
if(control_id == 19)//设置
{
Group = 0;
NotifyBaJiOder(BaJi_Fun_SET);
}
if(control_id == 20)//读取
{
NotifyBaJiOder(BaJi_Fun_Read);
}
}
void CanShu_Button_Process(uint16 screen_id, uint16 control_id)
{
uchar Group_Cnt = 0;
uchar i = 2;
SetControlVisiable(screen_id,69,0);
switch(control_id)
{
case _BTN_CANSHU_UP: if(Page < 2) Page = 1;
else Page = 0;
SetTextInt32(screen_id,65,Page*4 1,0,1);
SetTextInt32(screen_id,66,Page*4 2,0,1);
SetTextInt32(screen_id,67,Page*4 3,0,1);
SetTextInt32(screen_id,68,Page*4 4,0,1);
for(i = 1;i <= 64;i ) //清除参数
SetTextValue(screen_id,i,"");
for(i = 0;i < 64;i ) //读取内存参数,在参数设置窗口显示
{
//Group_data[i Page*64];
if(Group_data[i Page*64] == 0xff) {SetTextValue(screen_id,i 1,"");}//SetControlBackColor(screen_id,i 1,0x0280);} //FF表示无数据
else {SetTextInt32(screen_id,i 1,Group_data[i Page*64],0,0);}//SetControlBackColor(screen_id,i 1,0x0);}
}
break;
case _BTN_CANSHU_DOWN: //读取参数,显示第一页
Page = 0;
SetTextInt32(screen_id,65,1,0,1);
SetTextInt32(screen_id,66,2,0,1);
SetTextInt32(screen_id,67,3,0,1);
SetTextInt32(screen_id,68,4,0,1);
ReadUserFlash(CanShu_EEPROM_START_ADR,192);
break;
case _BTN_CANSHU_SET: //设置参数
SetControlVisiable(screen_id,69,1);//进度条可见
for(Group_Cnt = 1;Group_Cnt<13;Group_Cnt )//8个编组
{
delay_ms(500);
Group = Group_Cnt;
if(Group_data[(Group_Cnt-1)*16] != 0xff) //遇见编组无数据,直接退出
NotifyBaJiGroupCanShSet();
else return;
SetProgressValue(screen_id,69,Group_Cnt);//设置进度条的值
//delay_ms(1000);
}
SetControlVisiable(screen_id,69,0);
break;
case _BTN_CANSHU_DEL:
for(i = 1;i <= 64;i ) //清除参数
SetTextValue(screen_id,i,"");
break;//恢复出厂设置
}
}
//对话框处理
void Dilog_Button_Process(uint16 screen_id, uint16 control_id)
{
u8 i= 0;
switch(screen_id)
{
case _SCREEN_DILOG://恢复出厂提示框,提示用户操作慎重
switch(control_id)
{
case 2://确认,发送恢复出厂
SetControlVisiable(_SCREEN_CANSHU,69,1);
NotifyBaJi_RSET_factory();
delay_ms(1500);
for(i = 0;i < 192;i ) //清除参数
Group_data[i] = 0xff;
WriteUserFlash(0,192,Group_data);
break;
case 3://取消,
break;
default:
break;
}
break;
default:
break;
}
}
//编组控制时,组员对应显示
void GROUP_show(uint16 screen_id,u8 TemGroup, uint8 state)
{
uchar i = 0;
if(TemGroup < 10)
for(i = TemGroup*16-16;i < TemGroup*16-6;i )
{
if((0<Group_data[i])&&(Group_data[i]<=20))
SetButtonValue(screen_id,Group_data[i],state);
}
}
/////////////发送起靶倒靶命令////////////////////////////
void Fun_Auto_Train(u8 TemGroup)
{
uchar i = 0;
switch(Group_Train_flag)
{
case 1:
// BaJiId = 0;
// Group = 14;
// BaJi_Type = XuanZhuanBaJi;
// BaJiFun = 0;
// BaJiFun1 = 0;
// NotifyBaJiOder(kCtrlBaJiDown);
// SetButtonValue(_SCREEN_RUNBAJI,13,BT_DOWN);
// SetButtonValue(_SCREEN_RUNBAJI,14,BT_DOWN);
// SetButtonValue(_SCREEN_RUNBAJI,16,BT_DOWN);
break;
case 2:
BaJiId = 0;
Group = 14;
BaJi_Type = XuanZhuanBaJi;
BaJiFun = RunBaJiData[3];
BaJiFun1 = 0;
NotifyBaJiOder(kCtrlBaJiUp);
SetButtonValue(_SCREEN_RUNBAJI,13,BT_UP);
SetButtonValue(_SCREEN_RUNBAJI,14,BT_UP);
SetButtonValue(_SCREEN_RUNBAJI,16,BT_UP);
break;
case 3:
BaJiId = 0;
Group = 14;
BaJi_Type = XuanZhuanBaJi;
BaJiFun = 0;
BaJiFun1 = 0;
NotifyBaJiOder(kCtrlBaJiDown);
//NotifyBaJiDown();
SetButtonValue(_SCREEN_RUNBAJI,13,BT_DOWN);
SetButtonValue(_SCREEN_RUNBAJI,14,BT_DOWN);
SetButtonValue(_SCREEN_RUNBAJI,16,BT_DOWN);
break;
default:
break;
}
}
////////////////射击启动参数赋值///////////////////
//////////////////////////////////////////////////
void Fun_Train_Start(u8 TemGroup,u8 state)
{
Group = TemGroup;
if(state==1)//启动
{
Group_Train_flag = 0;
Up_delay = Group_data[Group*16 - 6]*100;
Show_delay = Group_data[Group*16 - 5]*100 Up_delay;
Hide_delay = Group_data[Group*16 - 4]*100 Show_delay;
Cycle_Counter = Group_data[Group*16 - 3];
Cycle_Cnt = 0; //循环次数清0
timer_tick_count = 0; //时间计数器清0
Group_Train_flag_copy = 0;
BaJiFun = Group_data[Group*16 - 2]; //亮度
BaJiFun1 = Group_data[Group*16 - 1]; //闪烁频率
DisCursor(1,4,239,98,48);
if(Group_data[Group*16 - 6] == 0xff)
{
Group_Train_flag = 0; //启动编组射击
DisCursor(0,4,239,98,48);
return;
}
SetTextInt32(_SCREEN_CTRL2,_TXT_DIS__CTRL2_GROUP,Group,0,1);//运行编组
SetTextInt32(_SCREEN_CTRL2,47,Group_data[Group*16 - 6],0,1);//起靶延时
SetTextInt32(_SCREEN_CTRL2,49,Group_data[Group*16 - 5],0,1);//显靶时间
SetTextInt32(_SCREEN_CTRL2,51,Group_data[Group*16 - 4],0,1);//隐靶时间
SetTextInt32(_SCREEN_CTRL2,52,Group_data[Group*16 - 3],0,1);//循环次数
SetTextInt32(_SCREEN_CTRL2,44,Group_data[Group*16 - 2],0,1);//灯光亮度
SetTextInt32(_SCREEN_CTRL2,55,Group_data[Group*16 - 1],0,1);//显示频率
Group_Train_flag = 1; //启动编组射击
}
else//结束
{
Group_Train_flag = 0; //启动编组射击
Group_Train_flag_copy = 0;
DisCursor(0,3,174,48,48);
}
}
void Show_XianBa_Group_ChenJi(void)
{
uchar i = 0;
u16 datatemp[20];
STMFLASH_Read(FLASH_SAVE_ADDR Look_Group_number*40,datatemp,20);
for(i = 0;i < 20;i )
SetTextInt32(_SCREEN_CHENJI2,i 1,datatemp[i],0,1);
// for(i = 0;i < 20;i )
// SetTextInt32(58,i 1,Hs_ChenJi[Look_Group_number-1][i],0,1);
}
void Look_XianBa_ChenJi(uint16 screen_id,uint16 control_id, uint8 state)
{
u8 TemGroup = 0;//P_BaJi_MSG->Group;
u8 TemBaJiId = 0;//P_BaJi_MSG->BaJi_ID;
u8 TemBaJi_Type = 0;//P_BaJi_MSG->BaJi_Type;
switch(control_id)
{
case 23://-
if(Look_Group_number > 0)
Look_Group_number -= 1;
// else
// Look_Group_number = 8;
SetTextInt32(_SCREEN_CHENJI2,21,Look_Group_number,0,1);
Show_XianBa_Group_ChenJi();
break;
case 22://
if(Look_Group_number < 12)
Look_Group_number = 1;
// else
// Look_Group_number = 0;
SetTextInt32(_SCREEN_CHENJI2,21,Look_Group_number,0,1);
Show_XianBa_Group_ChenJi();
break;
case 56:
if(state == 0) { MusicFlag = 1;PlayMusic_ID(111);}
else { MusicFlag = 0;PlayMusic_ID(112);}
break;
case 25:
Test_Write(FLASH_SAVE_ADDR TemGroup*40 (TemBaJiId-1)*2,(u16)Hs_ChenJi[TemGroup][TemBaJiId-1]);
break;
}
}
//运动靶机控制器
void RunBaJiCtrFun(uint16 control_id, uint8 state)
{
uchar Music_cnt = 0;
switch(control_id) //递减
{
case 1://减速
if(SuDu > 10) SuDu -= 10;
else SuDu = 0;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
NotifyRunBaJi(CmdJianSu);
Music_cnt = 1;
PlayMusic_ID(75);
SetProgressValue(_SCREEN_RUNBAJI,15,SuDu/10);//设置进度条的值
break;
case 3://加速
if(SuDu < 100) SuDu = 10;
else SuDu = 100;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
NotifyRunBaJi(CmdJiaSu);
Music_cnt = 2;
PlayMusic_ID(76);
SetProgressValue(_SCREEN_RUNBAJI,15,SuDu/10);//设置进度条的值
break;
case 4://向左
SuDu = 20;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
SetProgressValue(_SCREEN_RUNBAJI,15,SuDu/10);//设置进度条的值
NotifyRunBaJi(CmdLeft);
Music_cnt = 3;
PlayMusic_ID(77);
break;
case 6://向右
SuDu = 20;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
SetProgressValue(_SCREEN_RUNBAJI,15,SuDu/10);//设置进度条的值
NotifyRunBaJi(CmdRight);
Music_cnt = 4;
PlayMusic_ID(78);
break;
case 5://刹车命令
SuDu = 0;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
NotifyRunBaJi(CmdBrake);
Music_cnt = 5;
PlayMusic_ID(79);
SetProgressValue(_SCREEN_RUNBAJI,15,SuDu);//设置进度条的值
break;
case 7://全倒靶命令
Group = 14;
BaJiId = 0;
BaJi_Type = XuanZhuanBaJi;
if(state == 0) {BaJiFun = RunBaJiData[3];
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiUp);}
else {BaJiFun = 0;
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiDown);}
break;
case 13:
Group = 0;
BaJiId = 1;
BaJi_Type = XuanZhuanBaJi;
if(state == 0) {BaJiFun = RunBaJiData[3];
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiUp);}
else {BaJiFun = 0;
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiDown);}
return;
case 14:
Group = 0;
BaJiId = 2;
if(state == 0) {BaJiFun = RunBaJiData[3];
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiUp);}
else {BaJiFun = 0;
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiDown);}
return;
case 16:
Group = 0;
BaJiId = 3;
BaJi_Type = XuanZhuanBaJi;
if(state == 0) {BaJiFun = RunBaJiData[3];
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiUp);}
else {BaJiFun = 0;
BaJiFun1 = 0;NotifyRunBaJi(kCtrlBaJiDown);}
return;
case 100:
//ReadUserFlash(CanShu_EEPROM_START_ADR 192 128,10);
return;
case 9://轨道靶机自动运行
Group_number = 12;
{
Group_Train_flag = 0;
Up_delay = 100;
Show_delay = RunBaJiData[0]*100 Up_delay;
Hide_delay = RunBaJiData[1]*100 Show_delay;
Cycle_Counter = RunBaJiData[2];
Cycle_Cnt = 0; //循环次数清0
Group_Train_flag = 1; //启动编组射击
Group_Train_flag_copy = 0;
timer_tick_count = 0;
WorkTime = 0;
}
return;
case 29://轨道靶机自动运行//结束
{
Group_Train_flag = 0; //启动编组射击
Group_Train_flag_copy = 0;
Group_number = 0;
timer_tick_count = 0;
DisCursor(0,519,481,117,96);
}
return;
default:
break;
}
}
//1-10隐显靶机控制程序
void FunHideShowCtr(uint16 screen_id, uint16 control_id, uint8 state)
{
uchar i = 7;
uchar Music_cnt = 0;
u8 YuShu = 0;
u8 Shang = 0;
if(_SCREEN_HIDESHOW == screen_id)
{
switch(control_id) //递减
{
case 11://全部靶机
if(state == 1) {NotifyHideShowBaJi(MachineALL,CmdStartOne);Music_cnt = control_id;for(i = 1;i <= 10;i ) SetButtonValue(_SCREEN_HIDESHOW,i,1);}
else {NotifyHideShowBaJi(MachineALL,CmdStartOne);Music_cnt = control_id 11;for(i = 1;i <= 10;i ) SetButtonValue(_SCREEN_HIDESHOW,i,0);}
break;
case 17:
SetTextValue(_SCREEN_HIDESHOW,21,"背光调节亮");
break;
case 18:
SetTextValue(_SCREEN_HIDESHOW,21,"背光调节暗");
break;
case 20://参数设置
if(state == 0)
ReadUserFlash(0,80);
break;
case 22:
if(state == 0) { MusicFlag = 0;PlayMusic_ID(111);}
else { MusicFlag = 1;PlayMusic_ID(112);}
return;
case 25://红绿灯控制
//全部靶机
if(state == 1) {NotifyHideShowBaJi(0xe8,LedTest);Music_cnt = 24;}
else {NotifyHideShowBaJi(0xe8,LedTest);Music_cnt = 23;}
break;
case 32://靶机复位
NotifyHideShowBaJi(MachineALL,CmdReset);
Music_cnt = 25;
for(i = 1;i <= 11;i ) SetButtonValue(_SCREEN_HIDESHOW,i,0);
break;
default:
if((control_id >= 1)&&(control_id <= 10))//连续发送三次
{
if(state == 1) {NotifyHideShowBaJi(control_id,CmdStartOne);Music_cnt = control_id;}
else {NotifyHideShowBaJi(control_id,CmdStartOne);Music_cnt = control_id 11;}
delay_ms(100);
NotifyHideShowBaJi(control_id,CmdStartOne);
delay_ms(100);
NotifyHideShowBaJi(control_id,CmdStartOne);
}
break;
}
if((Music_cnt <= 25)&&(MusicFlag == 1))
PlayMusic_ID(Music_cnt);
return;
}
if(screen_id == _SCREEN_BAJICANSHU)//靶机参数设置
{
if(control_id <= 80)
{
YuShu = control_id%8;
Shang = control_id/8;
switch(YuShu)
{
case 7://单条设置
NotifyHideShowCanShuWrite(Shang 1,0);
break;
case 0://单条读取
NotifyHideShowBaJi(Shang,Inquiry);
break;
default:
break;
}
}
else if(control_id == 97)//全体设置
{
for(i = 1;i <=10;i )
{
SetProgressValue(_SCREEN_BAJICANSHU,95,i);
NotifyHideShowCanShuWrite(i,0);
delay_ms(1000);
}
}
else if(control_id == 98)//全体读取
{
ReadUserFlash(CanShu_EEPROM_START_ADR 192,80);
}
//else if((control_id >= 85)&&(control_id <= 94))
else if((control_id == 106)) //按配置启动靶机
{
NotifyHideShowBaJi(MachineALL,CmdStartConfig);
Music_cnt = 26;
PlayMusic_ID(Music_cnt);
}
else
{}
}
}
//1-10隐显靶机控制程序
void NewFunHideShowCtr(uint16 screen_id, uint16 control_id, uint8 state)
{
uchar i = 7;
uchar Music_cnt = 0;
u8 YuShu = 0;
u8 Shang = 0;
if(_SCREEN_HIDESHOW == screen_id)//隐显靶机窗口
{
switch(control_id) //递减
{
case 11://全部靶机
if(state == 1) {Group = 0;
BaJiId = 0;
BaJiFun = 1;
BaJiFun1 = 0;NotifyBaJiOder(kCtrlBaJiUp);Music_cnt = control_id;for(i = 1;i <= 10;i ) SetButtonValue(_SCREEN_HIDESHOW,i,1);}
else {Group = 0;
BaJiId = 0;NotifyBaJiOder(kCtrlBaJiDown);Music_cnt = control_id 11;for(i = 1;i <= 10;i ) SetButtonValue(_SCREEN_HIDESHOW,i,0);}
break;
case 17:
SetTextValue(_SCREEN_HIDESHOW,21,"背光调节亮");
return;
case 18:
SetTextValue(_SCREEN_HIDESHOW,21,"背光调节暗");
return;
case 20://参数设置
if(state == 0)
ReadUserFlash(0,80);
return;
case 22:
if(state == 0) { MusicFlag = 0;SetTextValue(_SCREEN_HIDESHOW,21,"声音提示关");Music_cnt =27;PlayMusic_ID(Music_cnt 84);}
else { MusicFlag = 1;SetTextValue(_SCREEN_HIDESHOW,21,"声音提示开");Music_cnt =28;PlayMusic_ID(Music_cnt 84);}
break;
case 25://红绿灯控制
//全部靶机
if(state == 1) {NotifyHideShowBaJi(0xe8,LedTest);Music_cnt = 24;}
else {NotifyHideShowBaJi(0xe8,LedTest);Music_cnt = 23;}
break;
case 32://靶机复位,隐靶
Group = 0;
BaJiId = 0;NotifyBaJiOder(kCtrlBaJiDown);
Music_cnt = 25;
for(i = 1;i <= 11;i ) SetButtonValue(_SCREEN_HIDESHOW,i,0);
break;
default:
if((control_id >= 1)&&(control_id <= 10))//连续发送三次
{
if(state == 1) {Group = 0;
BaJiId = control_id;
BaJiFun = 1;
BaJiFun1 = 0;NotifyBaJiOder(kCtrlBaJiUp);Music_cnt = control_id;}
else {Group = 0;
BaJiId = control_id;NotifyBaJiOder(kCtrlBaJiDown);Music_cnt = control_id 11;}
}
break;
}
if((Music_cnt <= 28)&&(MusicFlag == 1))
PlayMusic_ID(Music_cnt 84);
return;
}
if(screen_id == _SCREEN_BAJICANSHU)//靶机参数设置窗口
{
if(control_id <= 80)
{
YuShu = control_id%8;
Shang = control_id/8;
switch(YuShu)
{
case 7://单条设置
Group = 0;
BaJiId = Shang 1;
NotifyBaJiCanShSet();
break;
case 0://单条读取
//NotifyHideShowBaJi(Shang,Inquiry);
break;
default:
break;
}
}
else if(control_id == 97)//全体设置
{
for(i = 1;i <=10;i )
{
SetProgressValue(_SCREEN_BAJICANSHU,95,i);
Group = 0;
BaJiId = i;
NotifyBaJiCanShSet();
delay_ms(1000);
}
}
else if(control_id == 98)//全体读取
{
ReadUserFlash(CanShu_EEPROM_START_ADR 192,80);
}
//else if((control_id >= 85)&&(control_id <= 94))
else if((control_id == 106)) //按配置启动靶机
{
Group = 0;
BaJiId = 0;
NotifyBaJiOder(kCtrl_Train_Star);
Music_cnt = 26 84;
PlayMusic_ID(Music_cnt);
}
else
{}
}
}
void LianDongBaJiButtonProcess(uint16 screen_id, uint16 control_id, uint8 state)
{
u8 i = 10;
switch(control_id)
{
case 18://启动射击
{
for(i = 10;i <= 13;i )
SetControlVisiable(screen_id,i,0); //靶机可见
BaJiId = LianDongBaJiData[0];
LianDongBaJiState = 0;
FunLianDongUp();
}
break;
case 38://停止,复位
for(i = 10;i <= 13;i )
{
SetControlVisiable(screen_id,i,1); //靶机可见
SetButtonValue(current_screen_id,i,BT_UP);
SetTextInt32(current_screen_id,i 16,0,0,1);
}
SetTextInt32(current_screen_id,40,0,0,1);
DisCursor(0,58,190,62,43); //结束训练
break;
case 39://读取参数
ReadUserFlash(CanShu_EEPROM_START_ADR 192 128 10,10);
break;
case 42://減速
//减速
if(SuDu > 10) SuDu -= 10;
else SuDu = 0;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
NotifyRunBaJi(CmdJianSu);
break;
case 44://刹車
SuDu = 0;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
NotifyRunBaJi(CmdBrake);
break;
case 43://加速
if(SuDu < 100) SuDu = 10;
else SuDu = 100;
BaJiFun = SuDu;
BaJiFun1 = SuDu;
NotifyRunBaJi(CmdJiaSu);
break;
}
}
void FunLianDongUp(void)
{
Group = 15;
SetControlVisiable(current_screen_id,BaJiId 9,1); //靶机可见
BaJi_Type = BaJiId 3;
BaJiFun = RunBaJiData[3];
BaJiFun1 = 0;
NotifyRunBaJi(kCtrlBaJiUp);
}
标签: 靶机控制
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论