📄 main_ctl_test1.c
字号:
st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_X] =do_adc_one_channel_change(CONST_ADC_CHANNEL_X);
st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_Y] =do_adc_one_channel_change(CONST_ADC_CHANNEL_Y);
st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_Z] =do_adc_one_channel_change(CONST_ADC_CHANNEL_Z);
CODE_GUANG_DIAN_CHI_POWER_OFF; //关闭光电池电源;
//进行电池电源的采样;
st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_POWER] =do_adc_one_channel_change(CONST_ADC_CHANNEL_POWER);
//每隔一定时间,不要时间操作函数,节省代码,进行一次串口调试数据串的输出!
//AD[x][y][z][power], [水银开关], 限位开关[4], PWM[],[按键];
delay_1ms();
if(++control_serial_send_count >800)
{ //一次循环的延时大致 1ms,这里控制大约2s一次上送数据!
control_serial_send_count =0;
//在这里设置断点,使用仿真器观察ADC转换和限位开关的结果!
st_serial_buff.send[0] =(st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_X] >>8) &0xff;
st_serial_buff.send[1] =st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_X] &0xff;
st_serial_buff.send[2] =(st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_Y] >>8) &0xff;
st_serial_buff.send[3] =st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_Y] &0xff;
st_serial_buff.send[4] =(st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_Z]) &0xff;
st_serial_buff.send[5] =(st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_Z] >>8) &0xff;
st_serial_buff.send[6] =(st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_POWER] >>8) &0xff;
st_serial_buff.send[7] =st_adc_op.inner_curr_adc_value[CONST_ADC_CHANNEL_POWER] &0xff;
st_serial_buff.send[8] =0xff;
st_serial_buff.send[9] =st_work_mode.flag_is_horizontal;
st_serial_buff.send[10] =un_165_in.st_165_in.switch_x_limit_left;
st_serial_buff.send[11] =un_165_in.st_165_in.switch_x_limit_right;
st_serial_buff.send[12] =un_165_in.st_165_in.switch_y_limit_up;
st_serial_buff.send[13] =un_165_in.st_165_in.switch_y_limit_down;
st_serial_buff.send[14] =0xff;
st_serial_buff.send[15] =(bak_pwm_ctl_data >>8) &0xff;
st_serial_buff.send[16] =bak_pwm_ctl_data &0xff;
st_serial_buff.send[17] =0xff;
st_serial_buff.send[18] =st_curr_key.flag_now_is_local_key;
st_serial_buff.send[19] =st_curr_key.flag_key_is_long_type;
st_serial_buff.send[20] =st_curr_key.local_key_label;
st_serial_buff.send[21] =st_curr_key.ir_key_label;
st_serial_buff.send[22] =0xff;
st_serial_buff.tx_pos_start =1;
st_serial_buff.slen_needed =23;
UDR =st_serial_buff.send[0]; //启动中断方式的发送
UCSRB |=BIT(UDRIE); //因为UDRIE中断回自我关断,以减少CPU负荷!
}
}
}
//----------------------------------------------------------------------------
//到此中断已经全部打开! [I +Timer0/INT0/INT1/INT2/RXC/TXC/UDRE]
//进行出厂光电池中心位置的设置参数的删除,仅仅相应本机按键!
//Left + Power到此
//最后自动关机,结束
//----------------------------------------------------------------------------
void Dowith_Init_Para_Delete(void)
{
uchar tmp;
tmp =CONST_KEY_LAB_IDEL;
_prog_label_wait_key_up:
//先清除原来的按键,再进行按键读入
st_judge_key.curr_get_key_value =CONST_KEY_LAB_IDEL;
//使用查询方式进行按键端口的输入!
if(key_local_judge_press() !=0)
{ //存在按键输入
//st_judge_key.curr_key_is_long;
//按键状态是低9bit有效!
tmp =change_and_get_key_label(st_judge_key.curr_get_key_value);
if(tmp ==CONST_KEY_LAB_LEFT_WITH_POWER)
{ //还是原来的按键 Left + Power
goto _prog_label_wait_key_up;
}
else if(tmp ==CONST_KEY_LAB_LEFT)
{ //电源按键已经弹起,仅仅是 LEFT
goto _prog_label_power_key_has_up;
}
else
{ //没有按键 或者 其他非法按键
goto _prog_label_error;
}
}
//标识已经松开电源按键!
_prog_label_power_key_has_up:
//电源灯闪烁3次;
led_and_beep_operation(CONST_XU_HAO_OF_POWER_LED, CONST_FLAG_FLASH_IS_LED_BEEP_FLASH, 3);
while(st_led_beep_op.all_times_power_led_flashing !=0); //等待闪烁完毕
//x灯长亮;
led_and_beep_operation(CONST_XU_HAO_OF_X_AND_PAN_LED, CONST_FLAG_FLASH_IS_LED_BEEP_ON_EVER, 0);
_prog_label_wait_left_key_up:
tmp =CONST_KEY_LAB_IDEL;
//先清除原来的按键,再进行按键读入
st_judge_key.curr_get_key_value =CONST_KEY_LAB_IDEL;
//使用查询方式进行按键端口的输入!
if(key_local_judge_press() !=0)
{ //存在按键输入
//st_judge_key.curr_key_is_long;
//按键状态是低9bit有效!
tmp =change_and_get_key_label(st_judge_key.curr_get_key_value);
if(tmp ==CONST_KEY_LAB_LEFT)
{ //LEFT按键保持
goto _prog_label_wait_left_key_up;
}
else if(tmp ==CONST_KEY_LAB_IDEL)
{ //按键正确弹起
goto _prog_label_start_delete_paras;
}
else
{ //其他非法按键
goto _prog_label_error;
}
}
_prog_label_start_delete_paras:
//前面x灯是亮的
led_and_beep_operation(CONST_XU_HAO_OF_X_AND_PAN_LED, CONST_FLAG_FLASH_IS_LED_BEEP_OFF, 1);
// 清除EEPROM中的curr_ad_x,curr_ad_y,curr_ad_z设置
EEPROMwrite(CONST_EEPROM_ADDR_OF_LAB_X_Y, ~CONST_EEPROM_PARA_HAS_SET);
EEPROMwrite(CONST_EEPROM_ADDR_OF_LAB_Z, ~CONST_EEPROM_PARA_HAS_SET);
//tilt灯,scan灯,speed灯闪烁1次;
led_and_beep_operation(CONST_XU_HAO_OF_Y_AND_TILT_LED, CONST_FLAG_FLASH_IS_LED_BEEP_FLASH, 1);
led_and_beep_operation(CONST_XU_HAO_OF_Z_AND_Z_SPEED_LED, CONST_FLAG_FLASH_IS_LED_BEEP_FLASH, 1);
led_and_beep_operation(CONST_XU_HAO_OF_X_AND_PAN_LED, CONST_FLAG_FLASH_IS_LED_BEEP_FLASH, 1);
while(st_led_beep_op.all_times_x_and_pan_led_flashing !=0); //等待闪烁完毕
_prog_label_power_down:
excute_power_off(); //自动关电处理
//测试
#if (DEBUG_ENABLE_NEGLET_TEST_PROG ==0)
tmp =0;
do{
delay_x250ms(4);
EEPROMReadBytes(CONST_EEPROM_ADDR_OF_LAB_X_Y, (uchar *)&st_eeprom_para_gdc, CONST_EEPROM_LENTH_OF_PARA_GDC_SETS);
st_serial_buff.send[0] =st_eeprom_para_gdc.eep_sets_lable_x_and_y;
st_serial_buff.send[1] =(st_eeprom_para_gdc.eep_sets_x_middle_pos_adc_value >>8) &0xff;
st_serial_buff.send[2] =st_eeprom_para_gdc.eep_sets_x_middle_pos_adc_value &0xff;
st_serial_buff.send[3] =(st_eeprom_para_gdc.eep_sets_y_middle_pos_adc_value >>8) &0xff;
st_serial_buff.send[4] =st_eeprom_para_gdc.eep_sets_y_middle_pos_adc_value &0xff;
st_serial_buff.send[5] =st_eeprom_para_gdc.eep_sets_lable_z;
st_serial_buff.send[6] =(st_eeprom_para_gdc.eep_sets_y_middle_pos_adc_value >>8) &0xff;
st_serial_buff.send[7] =st_eeprom_para_gdc.eep_sets_y_middle_pos_adc_value &0xff;
st_serial_buff.send[8] =0x00;
st_serial_buff.tx_pos_start =1;
st_serial_buff.slen_needed =9;
UDR =st_serial_buff.send[0]; //启动中断方式的发送
UCSRB |=BIT(UDRIE); //因为UDRIE中断回自我关断,以减少CPU负荷!
}while(++tmp <10);
#endif
//按键顺序出错
_prog_label_error:
//scan,tilt,speed灯长亮
led_and_beep_operation(CONST_XU_HAO_OF_X_AND_PAN_LED, CONST_FLAG_FLASH_IS_LED_BEEP_ON_EVER, 0);
led_and_beep_operation(CONST_XU_HAO_OF_Y_AND_TILT_LED, CONST_FLAG_FLASH_IS_LED_BEEP_ON_EVER, 0);
led_and_beep_operation(CONST_XU_HAO_OF_Z_AND_Z_SPEED_LED, CONST_FLAG_FLASH_IS_LED_BEEP_ON_EVER, 0);
delay_x250ms(3);
//等待Power按键关机
do
{
tmp =CONST_KEY_LAB_IDEL;
//先清除原来的按键,再进行按键读入
st_judge_key.curr_get_key_value =CONST_KEY_LAB_IDEL;
//使用查询方式进行按键端口的输入!
if(key_local_judge_press() !=0)
{ //存在按键输入
//st_judge_key.curr_key_is_long;
//按键状态是低9bit有效!
tmp =change_and_get_key_label(st_judge_key.curr_get_key_value);
if(tmp ==CONST_KEY_LAB_POWER) break;
}
}while(1);
goto _prog_label_power_down;
}
/*
// left + Power -> left ->x,y,z闪烁3次, ->松开left按键 ->x,y,z闪烁1次后自动关机;
// 按键出错时 ->x,y,z长亮,等待按POWER键关机
*/
//---------------------------------------------------------
//厂家设置光电池的中心参数
//软件校准流程下的按键操作
//手动/自动按键 +电源按键
//需要分x/y和z方向两次来设置参数!
//手动调节的范围是2分,对应的电压的AD值需要测试后得到!
//输入:
// key_in 外部按键标识输入
// st_work_mode.steps_in_init_paras_set =CONST_FLAG_ADJUST_X/Y/Z_DIRECT
// 当前adc中心值
// adc数值上2分的差值定义
//X:key_left=0x0317, key_right=0x0017
//Y:key_up=0x0020, key_down=0x038A
//Z(x): key_Z(x)_left=0x0017, key_Z(x)_right=0x0360;
//---------------------------------------------------------
void dowith_keys_in_init_gdc_paras_set(uchar key_in)
{
#if (DEBUG_ENABLE_NEGLET_TEST_PROG ==0)
uchar tmp;
#endif
//20070831(1-2) 需要随时响应按键
/*
//没有自动找平过则不会响应Power以外的按键!
if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_VERTICAL_MODE)
{ //垂直方向
if((st_work_mode.flag_finding_level_mode & CONST_FLAG_IS_Z_HAS_SEARCH_END_LEVEL) !=CONST_FLAG_IS_Z_HAS_SEARCH_END_LEVEL)
{
return;
}
}
else //if(h_or_v ==CONST_FLAG_IS_HORIZONTAL_MODE)
{ //水平方向(缺省)
if( ( (st_work_mode.flag_finding_level_mode & CONST_FLAG_IS_X_HAS_SEARCH_END_LEVEL) !=CONST_FLAG_IS_X_HAS_SEARCH_END_LEVEL ) ||
( (st_work_mode.flag_finding_level_mode & CONST_FLAG_IS_Y_HAS_SEARCH_END_LEVEL) !=CONST_FLAG_IS_Y_HAS_SEARCH_END_LEVEL ) )
{
return;
}
}
*/
switch(key_in)
{
//注意:这里上/下/左/右动作,1次更改的ADC数据是 1,
//是否移动决定于是否超出自动找平过程的static的范围!
//调整范围2分决定于ADC数据的MIN...MAX的预定值,参数设置模式下没有绝对的中心了!
case CONST_KEY_LAB_UP:
if(st_work_mode.steps_in_init_paras_set ==CONST_FLAG_ADJUST_X_DIRECT)
{ //x: left(up), adc数据 变大
//只要更改 mid_pos 的值,位置会由自动找平过程进行动作!
if(st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_X].mid_pos <CONST_VALUE_OF_X_DELTA_2_FEN_MAX)
{
st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_X].mid_pos +=(CONST_STATIC_DELTA >>1);
}
}
else if(st_work_mode.steps_in_init_paras_set ==CONST_FLAG_ADJUST_Y_DIRECT)
{ //y: up, adc数据 变小
//只要更改 mid_pos 的值,位置会由自动找平过程进行动作!
if(st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Y].mid_pos >CONST_VALUE_OF_Y_DELTA_2_FEN_MIN)
{
st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Y].mid_pos -=(CONST_STATIC_DELTA >>1);
}
}
else if(st_work_mode.steps_in_init_paras_set ==CONST_FLAG_ADJUST_Z_DIRECT)
{ //z(x): left(up), ADC数据变小
//只要更改 mid_pos 的值,位置会由自动找平过程进行动½!
if(st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Z].mid_pos >CONST_VALUE_OF_Z_DELTA_2_FEN_MIN)
{
st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Z].mid_pos -=(CONST_STATIC_DELTA >>1);
}
}
else
{
}
break;
case CONST_KEY_LAB_DOWN:
if(st_work_mode.steps_in_init_paras_set ==CONST_FLAG_ADJUST_X_DIRECT)
{ //x: right(down), adc数据 变小
//只要´改 mid_pos 的值,位置会由自动找平过程进行动作!
if(st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_X].mid_pos >CONST_VALUE_OF_X_DELTA_2_FEN_MIN)
{
st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_X].mid_pos -=(CONST_STATIC_DELTA >>1);
}
}
else if(st_work_mode.steps_in_init_paras_set ==CONST_FLAG_ADJUST_Y_DIRECT)
{ //y: down, adc数据 变大
//只要更改 mid_pos 的值,位置会由自动找平过程进行动作!
if(st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Y].mid_pos <CONST_VALUE_OF_Y_DELTA_2_FEN_MAX)
{
st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Y].mid_pos +=(CONST_STATIC_DELTA >>1);
}
}
else if(st_work_mode.steps_in_init_paras_set ==CONST_FLAG_ADJUST_Z_DIRECT)
{ //z(x): right(down), ADC数据变大
if(st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Z].mid_pos <CONST_VALUE_OF_Z_DELTA_2_FEN_MAX)
{
st_gdc_adc_sets_paras[CONST_ADC_CHANNEL_Z].mid_pos +=(CONST_STATIC_DELTA >>1);
}
}
else
{
}
break;
case CONST_KEY_LAB_IR_X_Y_TILT: //20070905(2-1)
case CONST_KEY_LAB_Y_AND_TILT:
if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_VERTICAL_MODE)
{ //垂直位置
//当前调节数据 =3[z];¸关指示灯闪烁输出在函数外部
st_work_mode.steps_in_init_paras_set =CONST_FLAG_ADJUST_Z_DIRECT;
//关闭 X PAN灯的闪烁
led_and_beep_operation(CONST_XU_HAO_OF_X_AND_PAN_LED,CONST_FLAG_FLASH_IS_LED_BEEP_OFF,0);
//关闭 Y TILT灯的闪烁
led_and_beep_operation(CONST_XU_HAO_OF_Y_AND_TILT_LED,CONST_FLAG_FLASH_IS_LED_BEEP_OFF,0);
//打开 Z SPEED灯的闪烁
led_and_beep_operation(CONST_XU_HAO_OF_Z_AND_Z_SPEED_LED,CONST_FLAG_FLASH_IS_LED_BEEP_FLASH_EVER,0);
}
else //if(h_or_v ==CONST_FLAG_IS_HORIZONTAL_MODE)
{ //水平方向(缺省)
//当前调节数据 =1[x] ->2[y] ->1[x];相关指示灯闪烁输出在外部
//关闭 Z SPEED灯的闪烁
led_and_beep_operation(CONST_XU_HAO_OF_Z_AND_Z_SPEED_LED,CONST_FLAG_FLASH_IS_LED_BEEP_OFF,0);
//同时设置SCAN灯或者TILT灯ª烁输º;
if(st_work_mode.steps_in_init_paras_set ==CONST_FLAG_ADJUST_X_DIRECT)
{
st_work_mode.steps_in_init_paras_set =CONST_FLAG_ADJUST_Y_DIRECT;
//关闭 X PAN灯的闪烁
led_and_beep_operation(CONST_XU_HAO_OF_X_AND_PAN_LED,CONST_FLAG_FLASH_IS_LED_BEEP_OFF,0);
//打开 Y TILT灯的闪烁
led_and_beep_operation(CONST_XU_HAO_OF_Y_AND_TILT_LED,CONST_FLAG_FLASH_IS_LED_BEEP_FLASH_EVER,0);
}
else
{ //缺省是X方向的设置
st_work_mode.steps_in_init_paras_set =CONST_FLAG_ADJUST_X_DIRECT;
//关闭 Y TILT灯的闪
led_and_beep_operation(CONST_XU_HAO_OF_Y_AND_TILT_LED,CONST_FL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -