⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_ctl_test1.c

📁 MEGA32L 单片机的按键,LED,LCD等测试例程,ICCAVR编译器
💻 C
📖 第 1 页 / 共 5 页
字号:
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//x电机向左驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//x电机向左驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}
				}
				else	//垂直方向
				{
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//Z(x)电机向上驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//Z(x)电机向上驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}						
				}
				//UP
				//20070823(8-8)
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//y电机向上驱动1小步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//y电机向上驱动1大步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);						
					}
				}				
				break;
				
			case CONST_KEY_LAB_LEFT_DOWN:
			     	//20070823(8-9)
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//x电机向左驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//x电机向左驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}
				}
				else	//垂直方向
				{
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//Z(x)电机向上驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//Z(x)电机向上驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}						
				}
				//DOWN
				//20070823(8-10)
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//y电机向下驱动1小步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//y电机向下驱动1大步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);						
					}
				}
				break;
				
			case CONST_KEY_LAB_RIGHT_UP:
			     	//20070823(8-11)
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//x电机向右驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//x电机向右驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}
				}
				else	//垂直方向
				{
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//Z(x)电机向下驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//Z(x)电机向下驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}
				}
				//UP
				//20070823(8-12)
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//y电机向上驱动1小步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//y电机向上驱动1大步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_LEFT_UP, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);						
					}
				}
				break;
				
			case CONST_KEY_LAB_RIGHT_DOWN:
			     	//20070823(8-13)
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//x电机向右驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//x电机向右驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}
				}
				else	//垂直方向
				{
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//Z(x)电机向下驱动1小步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//Z(x)电机向下驱动1大步
						control_motor_x_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);
					}
				}
				//DOWN
				//20070823(8-14)
				if(st_work_mode.bak_flag_is_horizontal ==CONST_FLAG_IS_HORIZONTAL_MODE)
				{	
					if(st_curr_key.flag_key_is_long_type ==CONST_KEY_PRESS_IS_SHORT)
					{
						//y电机向下驱动1小步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_SMALL_STEP);
					}
					else
					{
						//y电机向下驱动1大步
						control_motor_y_move(CONST_MOTOR_X_Y_MOVING_RIGHT_DOWN, CONST_MOTOR_XYZ_MANUAL_MOVE_BIG_STEP);						
					}
				}
				break;

#endif
			
			case CONST_KEY_LAB_X_AND_PAN:
				//PWM ++,速度变大,OCR1B的数据变小
				if(bak_pwm_ctl_data >100)
				{
					bak_pwm_ctl_data -=10;
				}
				else if(bak_pwm_ctl_data >0)
				{
					bak_pwm_ctl_data --;
				}
				else{}
				
				goto	_prog_label_reload_OCR1B_data;
				break;

			case CONST_KEY_LAB_Y_AND_TILT:
				//PWM --,速度变小,OCR1B的数据变大
				if(bak_pwm_ctl_data <CONST_TIMER1_PWM_TOP_VAL -100)
				{
					bak_pwm_ctl_data +=10;
				}
				else if(bak_pwm_ctl_data <CONST_TIMER1_PWM_TOP_VAL)
				{
					bak_pwm_ctl_data ++;
				}
				else{}
				
				goto	_prog_label_reload_OCR1B_data;
				break;

			case CONST_KEY_LAB_Z_AND_SPEED:
				//Z_SPEED灯闪烁1次
				led_and_beep_operation(CONST_XU_HAO_OF_Z_AND_Z_SPEED_LED, CONST_FLAG_FLASH_IS_LED_BEEP_FLASH, 1);
				
				//Z方向左旋转的PWM输出变化为: 0 -> 60 -> 300 ->600 ->0;				
				pwm_output_ctl_num =(++pwm_output_ctl_num %4);
				bak_pwm_ctl_data =PWM_Output_Control_Data_By_Ctl_Num[pwm_output_ctl_num];
_prog_label_reload_OCR1B_data:				
				sreg_bak =SREG;
				_CLI();
				OCR1B	=bak_pwm_ctl_data;
				SREG	=sreg_bak;
				CODE_MOTOR_Z_MOVE_RIGHT;
				break;
				
			case CONST_KEY_LAB_MAN_OR_AUTO:
				//1    2 3 4 5 6    7     0
				//LED1,2,3,4,5,beep,依次闪烁(响),然后全部熄灭;
				if(++led_output_ctl_num >CONST_XU_HAO_OF_ALL_LED_AND_BEEP)
				{
					led_output_ctl_num =0;
					led_and_beep_all_off();
				}
				else
				{
					led_and_beep_operation(led_output_ctl_num,CONST_FLAG_FLASH_IS_LED_BEEP_FLASH_EVER,0);
				}
				break;
				
			case CONST_KEY_LAB_X_AND_PAN_WITH_Y_AND_TILT:
				
				sreg_bak =SREG;
				_CLI();
				OCR1B	=PWM_Output_Control_Data_By_Ctl_Num[CONST_CIRCU_SPEED_300];
				SREG	=sreg_bak;
				
				count =0;
				do
				{
					if(pan_is_on ==0)
					{
						pan_is_on =1;
						CODE_MOTOR_Z_MOVE_LEFT;	
					}
					else
					{
						pan_is_on =0;	
						CODE_MOTOR_Z_MOVE_RIGHT;	
					}
					delay_x1ms(50 +10*pan_type);				
				}while(++count <100 -(pan_type<<2));

				if(++ pan_type>20)	//限制数保证上面的delay_x1ms()的参数不溢出(<255)!
				{
					pan_type =0;	
				}
				
				sreg_bak =SREG;
				_CLI();
				OCR1B	=CONST_TIMER1_PWM_TOP_VAL;
				SREG	=sreg_bak;
				CODE_MOTOR_Z_MOVE_STOP;
				break;

			case CONST_KEY_LAB_X_AND_PAN_WITH_Z_AND_SPEED:
				//激光开->关->开
				if(ji_guang_is_on ==0)
				{
					led_and_beep_operation(CONST_XU_HAO_OF_JI_GUANG_LED, CONST_FLAG_FLASH_IS_LED_BEEP_OFF, 0);
					ji_guang_is_on =1;
				}
				else
				{
					led_and_beep_operation(CONST_XU_HAO_OF_JI_GUANG_LED, CONST_FLAG_FLASH_IS_LED_BEEP_ON_EVER, 0);
					ji_guang_is_on =0;	
				}
				break;
			
			
			case CONST_KEY_LAB_Y_AND_TILT_WITH_Z_AND_SPEED:
				//码盘状态的检测
				memset(mp_state_buff, 0, sizeof(mp_state_buff));				
				
				//启动LEFT旋转
				sreg_bak =SREG;
				_CLI();
				OCR1B	=PWM_Output_Control_Data_By_Ctl_Num[CONST_CIRCU_SPEED_60];
				SREG	=sreg_bak;
				CODE_MOTOR_Z_MOVE_RIGHT;
				
				mp_state =(CODE_GET_MA_PAN_INT1 |CODE_GET_MA_PAN_INT0);
				mp_state_buff[0] =mp_state;
				
				//一次测试300个数据
				for(count =1; count <300; count ++)
				{					
					do{
						mp_state =(CODE_GET_MA_PAN_INT1 |CODE_GET_MA_PAN_INT0);
					}while(mp_state_buff[count-1] ==mp_state);
					mp_state_buff[count] =mp_state;
				}				
				CODE_MOTOR_Z_MOVE_STOP;
				
				//上送测试数据				
				for(i=0; i<10; i++)
				{
					for(j=0; j<30; j++)
					{						
						st_serial_buff.send[j] =mp_state_buff[i*30 +j];						
					}
					st_serial_buff.send[j] =0xff;
					
					st_serial_buff.tx_pos_start =1;
					st_serial_buff.slen_needed =31;
					UDR =st_serial_buff.send[0];	//启动中断方式的发送
					UCSRB |=BIT(UDRIE);		//因为UDRIE中断回自我关断,以减少CPU负荷!					
					
					//等待发送完毕
					while(st_serial_buff.slen_needed !=0);
				}				
				break;
							
			case CONST_KEY_LAB_POWER:
				//电源按键,自动关电处理
				excute_power_off();
				break;
			
			default:
				break;
			}	
		}
		
		//水银开关 =水平)
		//进行一次x,y,z的AD采样;
		CODE_GUANG_DIAN_CHI_POWER_ON;			//打开光电池电源;
		//单次转换的内部已经存在延时!				

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -