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

📄 main.c

📁 全国电子设计大赛:智能电动车的设计.实现功能:以AT89C52单片机为核心
💻 C
📖 第 1 页 / 共 5 页
字号:
					break;
	}
    
    switch( keycode )
	{
	    case 4: // 按键:确认
		           delay_time=0;
				   switch( SCREEN )
				   {
				       case 0: Forward ( SPEED );  Start = 1; Stop = 1; // Start the car 
					           break;
					   case 1: // 第一屏(选择菜单)时确认键的功能
					           switch(vertical)
							   {
							       case 0: SCREEN=0 ; break; //未选择任何菜单
								   case 1: SCREEN=10; Read12C887( setup_time );  break;//选择菜单1(时间设置)
								   case 2: SCREEN=20; //选择菜单2(报警设置)
								           alarm_range = Read12C887RAM( ALARM_RANGE );
										   LED_GLITTER_ACT( ); 
										   break; 
								   case 3: SCREEN=30; DAC0datum =DAC0; DAC1datum =DAC1; break; //选择菜单3(DAC)
								   case 4: SCREEN=40; //选择菜单4(SPEED)
								           SPEED  = Read12C887RAM( SPEED_RANGE );   // 取得行驶速度 
										   SPEED1 = Read12C887RAM( SPEED1_RANGE );  // 取得转弯速度 

										   FREQUENCY = Read12C887RAM( FREQUENCY_RANGE ); // 取得 PWM 频率 

										   temp = Read12C887RAM ( SECTION_B_RANGE_H );   // 取得B 道区的起始位置 
										   SECTION_BPoint = ( unsigned int )_irol_( ( unsigned int )temp , 8 );
										   temp = Read12C887RAM ( SECTION_B_RANGE_L ); 
										   SECTION_BPoint += temp; 

										   temp = Read12C887RAM ( SECTION_BC_RANGE_H );   // 取得BC 中道区的起始位置 
										   SECTION_BCPoint = ( unsigned int )_irol_( ( unsigned int )temp , 8 );
										   temp = Read12C887RAM ( SECTION_BC_RANGE_L ); 
										   SECTION_BCPoint += temp; 

										   INTENSITY = Read12C887RAM( INTENSITY_RANGE );  // 取得光强度参数 

										   break; 
								   case 5: SCREEN=50; //选择菜单5(USB)
								           
                                           break;
								   case 6: SCREEN=60; 
								           break; //选择菜单6(温度)
								   default:break;
							   }
							   confirm_down=1;
					           break;
					   //--------------------------------------------------------------------------
					   case 10: // 主菜单第一屏(时间设置)确认键的功能
					           if( time_modify ) Setup12C887(setup_time);
					           SCREEN=0;
							   modifying=0;
							   time_modify=0;					          
							   confirm_down=1;
					           break;
					   //--------------------------------------------------------------------------
					   case 20: // 主菜单第二屏 (报警设置)
					           Write12C887RAM(ALARM_RANGE,alarm_range);
							   LED_GLITTER_INACT( );
					           SCREEN=0;
                               modifying=0;
					           confirm_down=1;
					           break;// 
					   //--------------------------------------------------------------------------
					   case 30: // 主菜单第三屏 (DAC设置)
					           if( DAC0_modify )DAConvert0( DAC0datum ); else if( DAC1_modify )DAConvert1( DAC1datum ); 
							   if( DAC0_modify&&DAC0Enable )DAC0_EN( ); if( DAC0_modify&&(!DAC0Enable) ) DAC0_NO( ); 
							   if( DAC1_modify&&DAC1Enable )DAC1_EN( ); if( DAC1_modify&&(!DAC1Enable) ) DAC1_NO( ); 
					           SCREEN=0;
					           modifying=0;
							   DAC0_modify=0; DAC1_modify=0;
					           confirm_down=1;
					           break;
					   //--------------------------------------------------------------------------
					   case 40: // 主菜单第四屏 ( SPEED )
					           if( SPEED_modify ) 
							   {
							       Write12C887RAM( SPEED_RANGE, SPEED );   // 存入行驶速度值 
								   Write12C887RAM( SPEED1_RANGE, SPEED1 ); // 存入转弯速度值 
							   }
							   if( FREQUENCY_modify )
							   {
							       Write12C887RAM( FREQUENCY_RANGE, FREQUENCY );    // 存入频率值 
								   TH0 = FREQUENCY;
							   } 
							   if( SECTION_BPoint_modify )
							   {
							       temp = ( unsigned char )_iror_( SECTION_BPoint, 8 );  
								   Write12C887RAM( SECTION_B_RANGE_H, temp );       // 存入 B 道区的起始位置 
								   temp = ( unsigned char )SECTION_BPoint & 0xFF;
								   Write12C887RAM( SECTION_B_RANGE_L, temp );  
							   }
							   if( SECTION_BCPoint_modify )
							   {
							       temp = ( unsigned char )_iror_( SECTION_BCPoint, 8 );  
								   Write12C887RAM( SECTION_BC_RANGE_H, temp );       // 存入 B 道区的起始位置 
								   temp = ( unsigned char )SECTION_BCPoint & 0xFF;
								   Write12C887RAM( SECTION_BC_RANGE_L, temp );  
							   }
							   if( INTENSITY_modify ) 
							       Write12C887RAM( INTENSITY_RANGE, INTENSITY );   // 存入行驶速度值 
					           SCREEN=0;
							   modifying=0;
							   SPEED_modify=0; FREQUENCY_modify=0; SECTION_BPoint_modify=0; SECTION_BCPoint_modify=0;
					           confirm_down=1;
					           break;
					   //--------------------------------------------------------------------------
					   case 50: // 主菜单第五屏 (USB)
					           SCREEN=0;   FileProcess( );
							   modifying=0;
					           confirm_down=1;
					           break;
					   case 51: // 第51屏
					           SCREEN=0;
							   modifying=0;
					           confirm_down=1;
					           break;
					   case 52: // 第52屏
					           SCREEN=0;
							   modifying=0;
					           confirm_down=1;
					           break;
                       
					   case 53: // 第53屏
					           SCREEN=0;
							   modifying=0;
					           confirm_down=1;
					           break;
					   
					   //--------------------------------------------------------------------------
					   case 60: // 主菜单第六屏
					           SCREEN=0;
							   modifying=0;
					           confirm_down=1;
					           break;
					   //--------------------------------------------------------------------------
					   case 70: // 主菜单第七屏
					           SCREEN=0;
							   modifying=0;
					           confirm_down=1;
					           break;

					   default:break;
				   }
				   vertical=horizontal=0;
		           break;
		case 7: // 按键:上
		           delay_time = 0; 
				   switch( SCREEN )
				   {
				       case 0: Forward ( SPEED ); break;
				       case 1: if( vertical<2 )vertical=6; else vertical--; break;
					   case 10: up=1;down=0; vertical++;		break;  // up=1,加
					   case 20: up=1;down=0; vertical++;		break;
					   case 30: up=1;down=0; vertical++;		break;
					   case 40: up=1;down=0; vertical++;	    break;
					   case 50: up=1;down=0; vertical++;		break;
					   case 60: up=1;down=0; vertical++;		break;

					   case 31: if( vertical<2 )vertical=3; else vertical--; break;
					   default:break;
				   }
		           break;
		case 2: // 按键:下
		           delay_time = 0;
				   switch( SCREEN )
				   {
				       case 0: Backward( SPEED ); break;
				       case 1: if( vertical<6 )vertical++; else vertical=1; break;	
					   case 10: down=1;up=0; vertical--;		break;  // down=1,减
					   case 20: down=1;up=0; vertical--;		break;
					   case 30: down=1;up=0; vertical--;		break;
					   case 40: down=1;up=0; vertical--;	    break;
					   case 50: down=1;up=0; vertical--;		break;
					   case 60: down=1;up=0; vertical--;		break;

					   case 31: if( vertical<3 )vertical++; else vertical=1; break;
					   default:break;
				   }
		           break;
		case 5: // 按键:左
		           delay_time = 0;  
				   switch( SCREEN )
				   {
				       case 0: 
							   TurnLeft ( SPEED1 ); 
					           break;
				       case 1: switch( vertical )
					           {
							       case 0: vertical = 6;	break;
								   case 1: vertical = 6;	break;
								   case 2: vertical = 4;	break;
								   case 3: vertical = 5;	break;
								   case 4: vertical = 1;	break;
								   case 5: vertical = 2;	break;
								   case 6: vertical = 3;	break;
								   default:break;
							   }
							   break;
					   case 10: if( horizontal<2 ) horizontal=13; else horizontal--;	break;
					   case 20: if( horizontal<2 ) horizontal=9 ; else horizontal--;	break;
					   case 30: if( horizontal<2 ) horizontal=10; else horizontal--;	break;
					   case 40: if( horizontal<2 ) horizontal=22; else horizontal--;	break;
					   case 50: if( horizontal<2 ) horizontal=10; else horizontal--;	break;
					   case 60: up=1;down=0; vertical++;	break;
					   default: break;
				   }
		           break;
		case 3: // 按键:右
		           delay_time = 0; 
				   switch( SCREEN )
				   {
				       case 0: 
							   TurnRight( SPEED1 );
					           break;
				       case 1: switch( vertical )
					           {
							       case 0: vertical = 1;	break;
								   case 1: vertical = 4;	break;
								   case 2: vertical = 5;	break;
								   case 3: vertical = 6;	break;
								   case 4: vertical = 2;	break;
								   case 5: vertical = 3;	break;
								   case 6: vertical = 1;	break;
								   default:vertical = 0;	break;
							   }
							   break;
					   case 10: if( horizontal<13 ) horizontal++; else horizontal=1;	break;
					   case 20: if( horizontal<9  ) horizontal++; else horizontal=1;	break;
					   case 30: if( horizontal<10 ) horizontal++; else horizontal=1;	break;
					   case 40: if( horizontal<22 ) horizontal++; else horizontal=1;	break;
					   case 50: if( horizontal<10 ) horizontal++; else horizontal=1;	break;
					   case 60: up=0;down=1; vertical++;	
								break;
					   default: break;
				   }
		           break;
		case 1: // 按键:修改
		           delay_time = 0;
				   vertical = horizontal = 0;
				   switch( SCREEN )
				   {
				       case 0 : // 进入修改状态
					           SCREEN=1;
							   modifying=1;
							   confirm_down=1;
					           break;
					   case 1 : break;
					   case 10: time_modify  = 0; break;
					   case 20: alarm_modify = 0; break;
					   case 30: DAC0_modify  = 0; DAC1_modify = 0; break;	   
					   case 40: SPEED_modify = 0; break;
					   case 50: break;
					   case 60: break;
					   default: break;
				   }
		           break;
		case 6: // 按键:返回
		           delay_time = 0;  
				   flag=!flag;   CarStop( ); Start = 0; Stop = 0;
/*				   if ( flag ) 
				   {
//				       LED_OUT_ACT( );          // Enable LED 
//					   ALARM_ACT( );            // Enable Alarm

					   LED_OUT_INACT( );          // Disable LED
					   ALARM_INACT( );            // Disable Alarm
 				   }
				   else 
				   {
				       LED_OUT_INACT( );          // Disable LED
					   ALARM_INACT( );            // Disable Alarm
				   }
*/		           break;
		default:   break;
	}
	keycode = 0;

    //---------------------------------------------------------------
    // 超过15秒无修改,返回初始屏 
	if( modifying ) 
	{
	    time_now = time_buf[0]%10;
		if( time_now^time_old ) delay_time++; 
		time_old = time_now;
		if( delay_time>15 ) // 模拟按下确认键, 不进行任何修改
		{
		    vertical=horizontal=0;
			SCREEN = 0;
			confirm_down = 1;
			modifying  = 0;
			delay_time = 0;

			LED_OUT_INACT( );          // Disable LED
			ALARM_INACT( );            // Disable Alarm
		}
	}

	//---------------------------------------------------------------
	// 一秒钟所计数数目 
	if( time_now == time_old1 ) second_count++;

⌨️ 快捷键说明

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