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

📄 main.c

📁 全国电子设计大赛:智能电动车的设计.实现功能:以AT89C52单片机为核心
💻 C
📖 第 1 页 / 共 5 页
字号:
				if( horizontal == 8 ) DisplayRevNumber( 4,8*8 ,DAC1datum%10        ); else DisplayNumber( 4,8*8 ,DAC1datum%10        ); 
				//----------------------------------------------------------
				if( horizontal == 9 ){ DisplayRevNumber( 6,8*0 ,13 ); // DAC0:
				                       DisplayRevNumber( 6,8*1 ,10 ); 
				                       DisplayRevNumber( 6,8*2 ,12 );
								       DisplayRevNumber( 6,8*3 ,0  );
								       DisplayRevNumber( 6,8*4 ,17 );
								     }
				               else  { DisplayNumber( 6,8*0 ,13 );    // DAC0:
				                       DisplayNumber( 6,8*1 ,10 ); 
				                       DisplayNumber( 6,8*2 ,12 );
								       DisplayNumber( 6,8*3 ,0  );
								       DisplayNumber( 6,8*4 ,17 );
								     }
		        if( DAC0Enable ) { DisplayNumber( 6,8*5,25 ); DisplayNumber( 6,8*6,34 ); } // EN
				else             { DisplayNumber( 6,8*5,34 ); DisplayNumber( 6,8*6,35 ); } // NO
				//----------------------------------------------------------
				if( horizontal == 10 ){ DisplayRevNumber( 6,8*8 ,13 ); // DAC1:
				                        DisplayRevNumber( 6,8*9 ,10 ); 
				                        DisplayRevNumber( 6,8*10,12 );
								        DisplayRevNumber( 6,8*11,1  );
								        DisplayRevNumber( 6,8*12,17 );
								      }
				               else   { DisplayNumber( 6,8*8 ,13 );    // DAC1:
				                        DisplayNumber( 6,8*9 ,10 ); 
				                        DisplayNumber( 6,8*10,12 );
								        DisplayNumber( 6,8*11,1  );
								        DisplayNumber( 6,8*12,17 );
								      }
				if( DAC1Enable ) { DisplayNumber( 6,8*13,25 ); DisplayNumber( 6,8*14,34 ); } // EN
				else             { DisplayNumber( 6,8*13,34 ); DisplayNumber( 6,8*14,35 ); } // NO
				//----------------------------------------------------------
				if( up | down )
				{
				    switch( horizontal )
					{
					    case 0:	if( up&&!down ) horizontal=10;	else if(down&&!up)horizontal=1;	break;

					    case 1:	if( up&&!down ) DAC0datum += 1000 ; else if( down&&!up ) DAC0datum -= 1000 ; DAC0_modify=1; break;// 千位
					    case 2:	if( up&&!down ) DAC0datum += 100  ; else if( down&&!up ) DAC0datum -= 100  ; DAC0_modify=1; break;// 百位
					    case 3:	if( up&&!down ) DAC0datum += 10   ; else if( down&&!up ) DAC0datum -= 10   ; DAC0_modify=1; break;// 十位
					    case 4:	if( up&&!down ) DAC0datum += 1    ; else if( down&&!up ) DAC0datum -= 1    ; DAC0_modify=1; break;// 个位

					    case 5:	if( up&&!down ) DAC1datum += 1000 ; else if( down&&!up ) DAC1datum -= 1000 ; DAC1_modify=1; break;// 千位
					    case 6:	if( up&&!down ) DAC1datum += 100  ; else if( down&&!up ) DAC1datum -= 100  ; DAC1_modify=1; break;// 百位
					    case 7:	if( up&&!down ) DAC1datum += 10   ; else if( down&&!up ) DAC1datum -= 10   ; DAC1_modify=1; break;// 十位
					    case 8: if( up&&!down ) DAC1datum += 1    ; else if( down&&!up ) DAC1datum -= 1    ; DAC1_modify=1; break;// 个位

						case 9: if( up&&!down ) DAC0Enable = 1; else if( down&&!up ) DAC0Enable = 0; DAC0_modify = 1; break; 
						case 10:if( up&&!down ) DAC1Enable = 1; else if( down&&!up ) DAC1Enable = 0; DAC1_modify = 1; break; 
					    default:break; 
					}
					up = down = 0;
				}
				//----------------------------------------------------------
				// 上下限限制
				if( DAC0datum >4095 )DAC0datum = 0; else if( DAC0datum <0 )DAC0datum = 4095;
				if( DAC1datum >4095 )DAC1datum = 0; else if( DAC1datum <0 )DAC1datum = 4095;
				break;

		case 40://*************************************************************
		        //*************************************************************
				// 第四主屏(菜单4):小车驱动参数设置
				//*************************************************************
				//*************************************************************
		        DisplayNumber( 2,8*0,39 );   // SPEED:
				DisplayNumber( 2,8*1,36 );
				DisplayNumber( 2,8*2,25 );
				DisplayNumber( 2,8*3,25 );
				DisplayNumber( 2,8*4,24 );
				DisplayNumber( 2,8*6,17 );

				DisplayNumber( 4,8*0,39 );   // SPEED1:
				DisplayNumber( 4,8*1,36 );
				DisplayNumber( 4,8*2,25 );
				DisplayNumber( 4,8*3,25 );
				DisplayNumber( 4,8*4,24 );
				DisplayNumber( 4,8*5,1  );
				DisplayNumber( 4,8*6,17 );

				DisplayNumber( 6,8*0,38 );   // Rate:
				DisplayNumber( 6,8*1,47 );
				DisplayNumber( 6,8*2,66 );
				DisplayNumber( 6,8*3,51 );
				DisplayNumber( 6,8*4,17 );

				//-------------------------SPEED修改-------------------------
				if( horizontal == 1 ) DisplayRevNumber( 2,8*7, SPEED/100    ); else DisplayNumber( 2,8*7, SPEED/100    );
				if( horizontal == 2 ) DisplayRevNumber( 2,8*8, SPEED%100/10 ); else DisplayNumber( 2,8*8, SPEED%100/10 );
				if( horizontal == 3 ) DisplayRevNumber( 2,8*9, SPEED%10     ); else DisplayNumber( 2,8*9, SPEED%10     );
				//-------------------------SPEED1修改------------------------
				if( horizontal == 4 ) DisplayRevNumber( 4,8*7, SPEED1/100    ); else DisplayNumber( 4,8*7, SPEED1/100    );
				if( horizontal == 5 ) DisplayRevNumber( 4,8*8, SPEED1%100/10 ); else DisplayNumber( 4,8*8, SPEED1%100/10 );
				if( horizontal == 6 ) DisplayRevNumber( 4,8*9, SPEED1%10     ); else DisplayNumber( 4,8*9, SPEED1%10     );
				//--------------------------Rate修改-------------------------
				if( horizontal == 7 ) DisplayRevNumber( 6,8*7, FREQUENCY/100    ); else DisplayNumber( 6,8*7, FREQUENCY/100    );
				if( horizontal == 8 ) DisplayRevNumber( 6,8*8, FREQUENCY%100/10 ); else DisplayNumber( 6,8*8, FREQUENCY%100/10 );
				if( horizontal == 9 ) DisplayRevNumber( 6,8*9, FREQUENCY%10     ); else DisplayNumber( 6,8*9, FREQUENCY%10     );
				//-------------------SECTION_BPoint修改----------------------
				if( horizontal == 10 ) DisplayRevNumber( 2,8*11, SECTION_BPoint/10000      ); else DisplayNumber( 2,8*11, SECTION_BPoint/10000      );
				if( horizontal == 11 ) DisplayRevNumber( 2,8*12, SECTION_BPoint%10000/1000 ); else DisplayNumber( 2,8*12, SECTION_BPoint%10000/1000 );
				if( horizontal == 12 ) DisplayRevNumber( 2,8*13, SECTION_BPoint%1000/100   ); else DisplayNumber( 2,8*13, SECTION_BPoint%1000/100   );
				if( horizontal == 13 ) DisplayRevNumber( 2,8*14, SECTION_BPoint%100/10     ); else DisplayNumber( 2,8*14, SECTION_BPoint%100/10     );
				if( horizontal == 14 ) DisplayRevNumber( 2,8*15, SECTION_BPoint%10         ); else DisplayNumber( 2,8*15, SECTION_BPoint%10         );
				//-------------------SECTION_BCPoint修改---------------------
				if( horizontal == 15 ) DisplayRevNumber( 4,8*11, SECTION_BCPoint/10000      ); else DisplayNumber( 4,8*11, SECTION_BCPoint/10000      );
				if( horizontal == 16 ) DisplayRevNumber( 4,8*12, SECTION_BCPoint%10000/1000 ); else DisplayNumber( 4,8*12, SECTION_BCPoint%10000/1000 );
				if( horizontal == 17 ) DisplayRevNumber( 4,8*13, SECTION_BCPoint%1000/100   ); else DisplayNumber( 4,8*13, SECTION_BCPoint%1000/100   );
				if( horizontal == 18 ) DisplayRevNumber( 4,8*14, SECTION_BCPoint%100/10     ); else DisplayNumber( 4,8*14, SECTION_BCPoint%100/10     );
				if( horizontal == 19 ) DisplayRevNumber( 4,8*15, SECTION_BCPoint%10         ); else DisplayNumber( 4,8*15, SECTION_BCPoint%10         );
				//----------------------INTENSITY修改------------------------
				if( horizontal == 20 ) DisplayRevNumber( 6,8*11, INTENSITY/100    ); else DisplayNumber( 6,8*11, INTENSITY/100    );
				if( horizontal == 21 ) DisplayRevNumber( 6,8*12, INTENSITY%100/10 ); else DisplayNumber( 6,8*12, INTENSITY%100/10 );
				if( horizontal == 22 ) DisplayRevNumber( 6,8*13, INTENSITY%10     ); else DisplayNumber( 6,8*13, INTENSITY%10     );
				//-----------------------------------------------------------
				if( up | down )
				{
				    switch( horizontal )
					{
					    case 0: if( up&&!down ) horizontal = 5;	else if( down&&!up ) horizontal = 1;	break;

						case 1: if( up&&!down ) SPEED += 100; else if( down&&!up ) SPEED -= 100; SPEED_modify=1; break;
						case 2: if( up&&!down ) SPEED += 10 ; else if( down&&!up ) SPEED -= 10 ; SPEED_modify=1; break;
						case 3: if( up&&!down ) SPEED += 1  ; else if( down&&!up ) SPEED -= 1  ; SPEED_modify=1; break;

						case 4: if( up&&!down ) SPEED1 += 100; else if( down&&!up ) SPEED1 -= 100; SPEED_modify=1; break;
						case 5: if( up&&!down ) SPEED1 += 10 ; else if( down&&!up ) SPEED1 -= 10 ; SPEED_modify=1; break;
						case 6: if( up&&!down ) SPEED1 += 1  ; else if( down&&!up ) SPEED1 -= 1  ; SPEED_modify=1; break;

						case 7: if( up&&!down ) FREQUENCY += 100; else if( down&&!up ) FREQUENCY -= 100; FREQUENCY_modify=1; break;
						case 8: if( up&&!down ) FREQUENCY += 10 ; else if( down&&!up ) FREQUENCY -= 10 ; FREQUENCY_modify=1; break;
						case 9: if( up&&!down ) FREQUENCY += 1  ; else if( down&&!up ) FREQUENCY -= 1  ; FREQUENCY_modify=1; break;

						case 10: if( up&&!down ) SECTION_BPoint += 10000; else if( down&&!up ) SECTION_BPoint -= 10000; SECTION_BPoint_modify=1; break;
						case 11: if( up&&!down ) SECTION_BPoint += 1000 ; else if( down&&!up ) SECTION_BPoint -= 1000 ; SECTION_BPoint_modify=1; break;
						case 12: if( up&&!down ) SECTION_BPoint += 100  ; else if( down&&!up ) SECTION_BPoint -= 100  ; SECTION_BPoint_modify=1; break;
						case 13: if( up&&!down ) SECTION_BPoint += 10   ; else if( down&&!up ) SECTION_BPoint -= 10   ; SECTION_BPoint_modify=1; break;
						case 14: if( up&&!down ) SECTION_BPoint += 1    ; else if( down&&!up ) SECTION_BPoint -= 1    ; SECTION_BPoint_modify=1; break;

						case 15: if( up&&!down ) SECTION_BCPoint += 10000; else if( down&&!up ) SECTION_BCPoint -= 10000; SECTION_BCPoint_modify=1; break;
						case 16: if( up&&!down ) SECTION_BCPoint += 1000 ; else if( down&&!up ) SECTION_BCPoint -= 1000 ; SECTION_BCPoint_modify=1; break;
						case 17: if( up&&!down ) SECTION_BCPoint += 100  ; else if( down&&!up ) SECTION_BCPoint -= 100  ; SECTION_BCPoint_modify=1; break;
						case 18: if( up&&!down ) SECTION_BCPoint += 10   ; else if( down&&!up ) SECTION_BCPoint -= 10   ; SECTION_BCPoint_modify=1; break;
						case 19: if( up&&!down ) SECTION_BCPoint += 1    ; else if( down&&!up ) SECTION_BCPoint -= 1    ; SECTION_BCPoint_modify=1; break;

						case 20: if( up&&!down ) INTENSITY += 100; else if( down&&!up ) INTENSITY -= 100; INTENSITY_modify=1; break;
						case 21: if( up&&!down ) INTENSITY += 10 ; else if( down&&!up ) INTENSITY -= 10 ; INTENSITY_modify=1; break;
						case 22: if( up&&!down ) INTENSITY += 1  ; else if( down&&!up ) INTENSITY -= 1  ; INTENSITY_modify=1; break;

						default:break;
					}
					up = down = 0;
				}
				break;
		
		case 50://*************************************************************
		        //*************************************************************
				// 第五主屏(菜单5):USB
				//*************************************************************
				//*************************************************************
				DisplayRevNumber( 2,8*7,mIntStatus>>4   );
				DisplayRevNumber( 2,8*8,mIntStatus&0x0F );

				if ( mIntStatus == ERR_USB_CONNECT ) // U盘已连接 
				{
				    DisplayNumber ( 4,8*3,41     ); 
					DisplayChinese( 4,16*2,pan2  ); 
					DisplayChinese( 4,16*3,yi3   ); 
					DisplayChinese( 4,16*4,lian2 ); 
					DisplayChinese( 4,16*5,jie1  ); 
				}
				else                                 // U盘已断开 
				{
					DisplayNumber ( 4,8*3,41     );
					DisplayChinese( 4,16*2,pan2  ); 
					DisplayChinese( 4,16*3,yi3   ); 
					DisplayChinese( 4,16*4,duan4 ); 
					DisplayChinese( 4,16*5,kai1  ); 
				}

		        break;
		//-----------------------------------------------------------
		// USB Display
		case 51: // 第 51 屏 
		         DisplayChinese( 4,16*2,qing3 );	 	// 请稍候...
				 DisplayChinese( 4,16*3,shao1 );	 	
				 DisplayChinese( 4,16*4,hou4  );
				 DisplayNumber ( 4,8*10,18    );  
				 DisplayNumber ( 4,8*11,18    );  
				 DisplayNumber ( 4,8*12,18    );  

				 DisplayPic( 6,16*0,schedule,GUAGE ); 

		         break;
		case 52: // 第 52 屏 
		         DisplayChinese( 4,16*2,cao1   );	 	// 操作故障 
				 DisplayChinese( 4,16*3,zuo4   );	 	
				 DisplayChinese( 4,16*4,gu4    );		
				 DisplayChinese( 4,16*5,zhang4 );	  
  
		         break;  
		case 60://*************************************************************
		        //*************************************************************
				// 第六主屏(菜单6):芯片温度显示
				//*************************************************************
				//*************************************************************
		        DisplayChinese(2,16*0,wen);     // 温度:
				DisplayChinese(2,16*1,du4);
				DisplayNumber(2,8*4,17);

		        DisplayNumber(2,8*5,TEMPER/100);   // 温度
				DisplayNumber(2,8*6,TEMPER%100/10);
				DisplayNumber(2,8*7,18);  // .
				DisplayNumber(2,8*8,TEMPER%10);
				DisplayNumber(2,8*9,73);
				DisplayNumber(2,8*10,12);  // C
				
		        break;

		default: break;
	}
}

//=================================================================================================
void Init( void )
{
	//-------------------------------------------
    // System initialization 
    mDelaymS ( 10 );
    SYSCLK_Init ( );
    PORT_Init ( );
    FUNCTION_Init ( );

	//-------------------------------------------
	// UART initialization 
	UART0_Init ( );
    UART1_Init ( );

	//-------------------------------------------
	// LCD initialization 
	LCDInit ( );  

	//-------------------------------------------
	// Timer 12C887 initialization 
	Start12C887 ( );            // 启动时钟
	Read12C887 ( time_buf );    // 读取系统时间

	alarm_range = Read12C887RAM ( ALARM_RANGE );
	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 );  // 取得光强度参数 

	SetSQW ( alarm_range );      // 设置 SQW

	//-------------------------------------------
	// USB initialization 
	USBInit ( );

	//-------------------------------------------
	// Car initialization 
	CarStop ( );
	Stop = 1;
	SECTION = 'A'; 

	//-------------------------------------------
	// Periphery Setting
    LED_OUT_INACT ( );                   // Disable LED
	ALARM_INACT( );                      // 
}

//-----------------------------------------------------------------------------
void main ( void ) 
{
// Disable Watchdog timer
	WDTCN = 0xDE;
	WDTCN = 0xAD;

    Init( );		// 初始化系统时钟 

	UART1SendByte ( 'a' );  // Just test

	while( 1 )
	{
		KeyProcess ( ); 
		Display ( ); 
		CarDriver ( ); 
	}
}

⌨️ 快捷键说明

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