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

📄 carinfor.c

📁 驾驶员考试电桩考试系统的车载程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                               长春智君电子有限公司
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: CarInfor.c
**创   建   人: 查立军
**最后修改日期: 2007年04月29日
**描        述: 路考车载函数
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 查立军
** 版  本: 1.0
** 日 期: 2007年04月29日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 查立军
** 版  本: 2.0
** 日 期: 2007年09月19日
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
#include "CarInfor.h"

#define byCar_Motor 		0x00800000		//DIN9		P1.23
#define byCar_Door 			0x00010000		//DIN5		P0.16
//#define byCar_Door 			0x02000000		//DIN5		P0.16
//#define byCar_Door 			0x80000000		//DIN5		P0.16
#define byCar_AirPressure 	0x00020000		//DIN6		P0.17
#define byCar_SeatBelt 		0x00100000		//DIN7		P1.20

#define byCar_A_Dir 			0xFFBFFFFF		//DIN0		P1.22
#define byCar_B_Dir 			0xFFFBFFFF 		//DIN1		P0.18
#define byCar_C_Dir 			0xFFF7FFFF 		//DIN2		P0.19
#define byCar_Motor_Dir 		0xFF7FFFFF		//DIN9		P1.23
#define byCar_Brake_Dir 		0xFFDFFFFF		//DIN4		P1.21
#define byCar_Door_Dir 			0xFFFEFFFF		//DIN5		P0.16
#define byCar_AirPressure_Dir 	0xFFFDFFFF		//DIN6		P0.17
#define byCar_SeatBelt_Dir 		0xFFEFFFFF		//DIN7		P1.20

#define bitButton1			0x02000000		//DIN9		P0.25
#define bitButton2			0x80000000		//DIN10		D31

#define byLight1	 		0x40000000		//DIN23		D30
#define byLight2	 		0x20000000		//DIN22		D29
#define byLight3	 		0x10000000		//DIN21		D28
#define byLight4	 		0x00040000		//DIN20		P1.18
#define byLight5	 		0x01000000		//DIN19		P0.24
#define byLight6	 		0x00080000		//DIN18		P1.19
#define byLight7	 		0x00800000		//DIN17		P0.23
#define byLight8	 		0x00400000		//DIN16		P0.22

#define bitButton1_Dir			0xFDFFFFFF		//DIN9		P0.25
#define bitButton2_Dir			0x7FFFFFFF		//DIN10		D31

#define byLight1_Dir 			0xBFFFFFFF		//DIN23		D30
#define byLight2_Dir 			0xDFFFFFFF		//DIN22		D29
#define byLight3_Dir 			0xEFFFFFFF		//DIN21		D28
#define byLight4_Dir 			0xFFFBFFFF		//DIN20		P1.18
#define byLight5_Dir 			0xFEFFFFFF		//DIN19		P0.24
#define byLight6_Dir 			0xFFF7FFFF		//DIN18		P1.19
#define byLight7_Dir 			0xFF7FFFFF		//DIN17		P0.23
#define byLight8_Dir 			0xFFBFFFFF		//DIN16		P0.22

#define bitOut1				0x00000800		//P0.11
#define bitOut2				0x00001000		//P0.12


//#define byCar_C 0x02000000		//DIN8		P1.25
//#define byCar_C 0x00000020		//DIN9		P0.5
//#define byCar_C 0x00000040		//DIN10		P0.6
//#define byCar_C 0x01000000		//DIN11		P1.24
//#define byCar_C 0x00020000		//DIN12		P1.17
//#define byCar_C 0x00010000		//DIN13		P1.16
//#define byCar_C 0x00000004		//DIN14		P0.2
//#define byCar_C 0x00000010		//DIN15		P0.4

//#define byCar_C 0x00400000		//DIN16		P0.22
//#define byCar_C 0x00800000		//DIN17		P0.23
//#define byCar_C 0x00080000		//DIN18		P1.19
//#define byCar_C 0x01000000		//DIN19		P0.24
//#define byCar_C 0x00040000		//DIN20		P1.18
//#define byCar_C 0x10000000		//DIN21		D24
//#define byCar_C 0x20000000		//DIN22		D29
//#define byCar_C 0x40000000		//DIN23		D30

//2008-2-8 start (for ZhangKao of ShenYang)
#define _A0		0x00000001
#define _A1		0x00000002
#define _A2		0x00000004
#define _A3		0x00000008
#define _A4		0x00000010
#define _A5		0x00000020
#define _A6		0x00000040
#define _A7		0x00000080
#define _A8		0x00000100
#define _A9		0x00000200

#define _SpeakControl 0x00020000	//P017
#define _SpeakPD      0x00040000	//P018
#define _EINT2        0x00040000	//EINT2
#define _CS2    	  0x02000000 	//P3.25    CS2
#define _A22		  0x00400000    //P3.22    A22
#define _WE			  0x08000000    //P3.27	   WE

#define byCar_Brake 		0x00100000		//right DIN15		P1.20

#define byCar_A 			0x00000400		//right DIN4		P0.10
#define byCar_B 			0x00000800		//right DIN5		P0.11
#define byCar_C 			0x00001000		//right DIN11		P0.12
//2008-2-8 end
/****************************************************************************
* 名称:CarInforPinSet() 外部函数
* 功能:
* 入口参数:
* 出口参数:
****************************************************************************/
void CarInforPinSet(void)
{
	
	IO1DIR = IO1DIR & byCar_A_Dir;			//DIN0		P1.22
	IO0DIR = IO0DIR & byCar_B_Dir;			//DIN1		P0.18
	IO0DIR = IO0DIR & byCar_C_Dir;			//DIN2		P0.19

	IO1DIR = IO1DIR & byCar_Motor_Dir;		//DIN3		P0.20
	IO0DIR = IO0DIR & byCar_Door_Dir;		//DIN5		P0.16
	IO0DIR = IO0DIR & byCar_AirPressure_Dir;//DIN6		P0.17
	IO1DIR = IO1DIR & byCar_SeatBelt_Dir;	//DIN7		P1.20
	
	//BUTTONG INFOR
	IO0DIR = IO0DIR & bitButton1_Dir;		//DIN9		P0.28
	IO2DIR = IO2DIR & bitButton2_Dir;		//DIN10		D31
	
	//light 
	IO2DIR = IO2DIR & byLight1_Dir;			//DIN23		D30
	IO2DIR = IO2DIR & byLight2_Dir;			//DIN22		D29
	IO2DIR = IO2DIR & byLight3_Dir;			//DIN21		D28
	IO1DIR = IO1DIR & byLight4_Dir;			//DIN20		P1.18
	IO0DIR = IO0DIR & byLight5_Dir;			//DIN19		P0.24
	IO1DIR = IO1DIR & byLight6_Dir;			//DIN18		P1.19
	IO0DIR = IO0DIR & byLight7_Dir;			//DIN17		P0.23
	IO0DIR = IO0DIR & byLight8_Dir;			//DIN16		P0.22

	//IO out
	IO0DIR = IO0DIR | bitOut1;
	IO0DIR = IO0DIR | bitOut2;
	
//speak
//#define _CS2    	  0x00000000 	//P3.25    CS2
//#define _A22		  0x00000000    //P3.22    A22
//#define _WE			  0x00000000    //P3.27	   WE
	IO3DIR = IO3DIR | _CS2;
	IO3DIR = IO3DIR | _A22;
	IO3DIR = IO3DIR | _WE;

//2008-2-8	
//#define byCar_Brake 		0x00100000		//right DIN15		P1.20
	PINSEL2 = PINSEL2 & 0xFFFFFFF7; //.3=0   P1.20       is GPIO        is not 
	IO1DIR = IO1DIR | byCar_Brake;
	IO1SET = byCar_Brake;

//#define byCar_A 			0x00000400		//right DIN4		P0.10
	PINSEL0 = PINSEL0 & 0xFFCFFFFF; //.21.20=00   P0.10       is GPIO        is not 
	IO0DIR = IO0DIR & 0xFFFFFBFF;

//#define byCar_B 			0x00000800		//right DIN5		P0.11
	PINSEL0 = PINSEL0 & 0xFF3FFFFF; //.23.22=00   P0.11       is GPIO        is not 
	IO0DIR = IO0DIR & 0xFFFFF7FF;

//#define byCar_C 			0x00001000		//right DIN11		P0.12
	PINSEL0 = PINSEL0 & 0xFCFFFFFF; //.25.24=00   P0.12       is GPIO        is not 
	IO0DIR = IO0DIR & 0xFFFFEFFF;
	
/*	//判断车状态:前进、后退
byA=1;
while(byA)
{
	GPIO_input =IO0PIN;// (IO1PIN & byCar_A);// >> 22;
	byA = GPIO_input;
	GPIO_input = IO0PIN;//(IO0PIN & byCar_B) >> 18;
	byB = GPIO_input;
	GPIO_input = IO0PIN;//(IO0PIN & byCar_C) >> 19;
	byC = GPIO_input;
	}
if(GPIO_input==0x44)
byA=0;
else 
byA=3;*/
}
/****************************************************************************
* 名称:BrakeControl(uint8 u8Brake) 外部函数
* 功能:控制刹车:
* 入口参数:1:表示要求刹车
			0:表示要求解除刹车
* 出口参数:
****************************************************************************/
void BrakeControl(uint8 u8Brake)
{
	if(u8Brake)
		IO1CLR = byCar_Brake;
	else
		IO1SET = byCar_Brake;
}
/****************************************************************************
* 名称:GetCarStatus() 外部函数
* 功能:获得车的状态:
* 入口参数:
* 出口参数:1,停车,2:后退,3:前进,4:熄火
****************************************************************************/
void ShowABC(unsigned char x,unsigned char y,uint8 byA,uint8 byB,uint8 byC);

uint8 GetCarStatus(uint32 iStopTime,uint32 iMotorTime)
{
	static uint8 byOldCarStatus,byCarStatus;
	static uint32 iStopCounter;
	static uint8 byOldMotor,byMotor;
	static uint32 iMotorCounter;
	static uint8 byForward,byBackward,byStop;

	uint8 byA,byB,byC;

	uint8 byCarSensorError1;
	uint8 byBrakeIn,byCarDoor,byAirPressure,bySeatBelt,byDead;

	uint32 GPIO_input;
	uint8 SendBufTemp;
	
	static uint8 iForwardCounter;
	static uint8 iBackwardCounter;
	
	//判断车状态:前进、后退
	
	GPIO_input = (IO0PIN & byCar_A) >> 10;
	byA = GPIO_input;
	GPIO_input = (IO0PIN & byCar_B) >> 11;
	byB = GPIO_input;
	GPIO_input = (IO0PIN & byCar_C) >> 12;
	byC = GPIO_input;
	
//	ShowABC(16,76,byA,byB,byC);
	
	byOldCarStatus = byCarStatus;
	if(byA==0 && byB==1 &&byC==1)
		byCarStatus = 0x01;
	else if(byA==1 && byB==0 &&byC==1)
		byCarStatus = 0x02;
	else if(byA==1 && byB==1 &&byC==0)
		byCarStatus = 0x03;
	else if(byA==1 && byB==1 &&byC==1)
//		byCarStatus = 0x04;
;
	else
		byCarSensorError1 = TRUE;
	
	if ((byCarStatus - byOldCarStatus)==1)// || (byOldCarStatus - byCarStatus)==2)
	{
		iStopCounter=0;
		iBackwardCounter=0;
		iForwardCounter++;
		if(iForwardCounter>1)
		{
			iForwardCounter=0;
			byForward=0x01;
			byBackward=0x00;
			byStop=0x00;
		}
	}
	else if ((byOldCarStatus - byCarStatus)==1)// || (byCarStatus - byOldCarStatus)==2)
	{
		iStopCounter=0;
		iForwardCounter=0;
		iBackwardCounter++;
		if(iBackwardCounter>1)
		{
			iBackwardCounter=0;
			byForward=0x00;
			byBackward=0x01;
			byStop=0x00;
		}
	}
	
	if (byOldCarStatus == byCarStatus)
	{
		iStopCounter++;
		if(iStopCounter>=iStopTime)
		{
			iStopCounter=0;
			byForward=0x00;
			byBackward=0x00;
			byStop=0x01;
			iForwardCounter=0;
			iBackwardCounter=0;
		}
	
	}
	else
		iStopCounter=0;
	
	//判断车状态:熄火
	byDead=FALSE;
	
	byOldMotor=byMotor;
	GPIO_input = (IO1PIN & byCar_Motor) >> 23;
	byMotor = GPIO_input;
	if(byOldMotor == byMotor)
	{
		iMotorCounter++;
		if(iMotorCounter>iMotorTime)
			byDead = TRUE;
	}
	else
	{
		iMotorCounter=0;
		byDead = FALSE;
	}

	//判断车状态:刹车、关门、气压、安全带
	GPIO_input = (IO1PIN & byCar_Brake) >> 21;
	byBrakeIn =! (GPIO_input & 0x00000001);
	GPIO_input = (IO2PIN & byCar_Door) >> 16;
	byCarDoor =! (GPIO_input & 0x00000001);
	GPIO_input = (IO0PIN & byCar_AirPressure) >> 17;
	byAirPressure =! (GPIO_input & 0x00000001);
	GPIO_input = (IO1PIN & byCar_SeatBelt) >> 20;
	bySeatBelt =! (GPIO_input & 0x00000001);

	//车状态
//	SendBufTemp=bySeatBelt*0x80 + byAirPressure*0x40 + byCarDoor*0x20 + byBrakeIn*0x10 + byDead*0x08 + byStop*0x04 + byBackward*0x02 + byForward*0x01;
//	byDead=1;
	SendBufTemp=byDead*0x08 + byStop*0x04 + byBackward*0x02 + byForward*0x01;
	return SendBufTemp;
}

/****************************************************************************
* 名称:SpeakerPinSet() 外部函数
* 功能:
* 入口参数:
* 出口参数:
****************************************************************************/
void SpeakerPinSet(void)
{
//2008-2-5	
//#define _EINT2      	  0x00040000	//EINT2
//	PINSEL0 = PINSEL0 & 0xBFFFFFFF; //.31.30=10   P0.15       is not GPIO        is  EINT2
//	PINSEL0 = PINSEL0 | 0x80000000; 
	PINSEL0 = PINSEL0 & 0x3FFFFFFF; //.31.30=00   P0.15       is GPIO        is not EINT2
	IO0DIR = IO0DIR & 0xFFFF7FFF;
 
//2008-2-5	
//#define _SpeakControl 0x00020000	//P017
	PINSEL1 = PINSEL1 & 0xFFFFFFF3; //.3.2=00   P0.17       is GPIO        not  
	IO0DIR = IO0DIR | _SpeakControl;

//2008-2-5	
//#define _SpeakPD      0x00040000	//P018
	PINSEL1 = PINSEL1 & 0xFFFFFFFC; //.5.4=00   P0.18       is GPIO        not  
	IO0DIR = IO0DIR | _SpeakPD;

	IO3DIR = IO3DIR | 0x000003FF;//bySpeakPinA0-A9;
//	
	// _RW		P3.27		设为输出
	IO3DIR = IO3DIR | 0x08000000;
///*	

	IO3CLR=_CS2;
	IO3CLR =_A22;

⌨️ 快捷键说明

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