📄 carinfor.c
字号:
/****************************************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 + -