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

📄 caralarm.c

📁 汽车防盗器主机吃C语言程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "ht48r30a-1.h"
#define Arm		0x02
#define Disarm	0x01
#define Mute	0x04
#define Find	0x08
#define Arm_Disarm 0x03

#define AccInput  _pc4//_pd0//_pc4 

#define SCL_C _15_7//5//7 
#define SDA_C _15_4 
#define SCL	  _pb7//5//_pb7 
#define SDA	  _pb4 

#define RF 	  	  _pb3 
#define VibInput  _pb2 
#define TrunkInput _pb1 
#define LearnKey  _pb0 

#define GateInput _pa7 
#define LED   	  _pa6 
#define OpenLock  _pa4 
#define CloseLock _pa5 
#define PowerOff  _pa3 
#define Bugle 	  _pa2 
#define Light 	  _pa1 
#define Sta		  _pa0 
#define OpenTrunk  Sta


#define _ton  _0e_4
#define _24c_StartAddr  0x10
/*================================
    System Program Register Bit
 ===============================*/
#define MuteModeF 			 _28_0
#define DoorErrorNotWarningF _28_1

#define CenterTimeBit1 		 _28_2
#define CenterTimeBit0 		 _28_3
#define PassiveON_F 		 _28_4
#define AutoCenterLockOFF 	 _28_5

#define TrunkSetBit1 		 _28_6
#define TrunkSetBit0 		 _28_7
#define Jacking_ON 	 		 _29_0
#define Guard_F 	 		 _29_1
unsigned char SysValue1		@0x28;
unsigned char SysValue2		@0x29;
//================================

unsigned char data1  		@0x2a;
unsigned char data2  		@0x2b;
unsigned char data3  		@0x2c;
unsigned char Rdata1 		@0x2d;
unsigned char Rdata2 		@0x2e;
unsigned char Rdata3 		@0x2f;

//unsigned char RxBuff;
unsigned char AT24c_Addr;
unsigned char MCU_Addr;
unsigned char AddrBuf;
unsigned char WriteCnt;

unsigned char LedTime;
unsigned char LedTimeBackup;
unsigned char FlashTimes; //,FlashTimesBackup;
unsigned char FlashTimesBackup;
unsigned char LockTime;
unsigned char LightTime;
unsigned long KeyInputTime; 
unsigned char KeyInputCnt;
unsigned char LearnKeyCnt;
unsigned char KeyDownTime;
unsigned char AutoLockTime; 
unsigned char OnceTime;
unsigned char TwoTimes;
unsigned char GuardTime;
unsigned char TrunkTime;
unsigned char CheckVibDelay;
unsigned char LightON_OffTime;
unsigned long RepairTime;
unsigned char RepairCnt;
unsigned long AlarmTime;
unsigned long RobTime;

bit LightFlash_F;
bit VoletStatus_F;
bit ProgramSetMode_F;
bit Exit_ModeF;
bit AutoLock_F;
bit AutoUnlock_F;
bit DisBugleExit_F;
bit TimeOutF;
bit Program1_F;
bit Program2_F;
bit Program3_F;
bit WaitRemoteF;
bit Wait10s_F;
bit KeyDown2s_F;
bit KeyDownTimeF;
bit KeyOnceF;
bit DoKey1F;
bit DoKey2F;
bit DoKey3F;
bit VibrationF;
bit EnablePassiveF;
bit PassiveF;
bit ErrorPressRemoteF;
bit DoorWarningF;
bit DoubleUnlockF;
bit	EnableVibF;
bit MuteF;
bit Rob0F;
bit Rob1F;
bit RobStatusF;
bit Trigger_F;//??
bit LedFlash_F;
bit LedAutoF;
bit RepairOperationF;
bit OpenTrunk_F;
bit CheckVibF;
bit FindF;
bit SysFlag;

bit AccON_F;
bit Flag0;
bit Flag1;
bit Flag2;
bit Flag3;
bit Flag4;
bit Free_F;
bit Lock_F;
bit UnLock_F;
bit Fast_F;
//bit Guard_F;
bit RFbit;
bit ReceiveRight_F;
/*//===================
	bit MuteModeF;//bit ChirpsON_F;
	bit DoorErrorNotWarningF;

	bit CenterTimeBit1;
	bit CenterTimeBit0;
	bit PassiveON_F;
	bit AutoCenterLockOFF;

	bit TrunkSetBit1;
	bit TrunkSetBit0;
	bit Jacking_ON;
//===================*/
void CheckLearnKey(void); //宣告函数
void ReadMemory(unsigned char addr);
void WriteMemory(unsigned char *i,unsigned char k);
void BugleON(unsigned char i,unsigned char j);
void LightON();
void Delayms(unsigned char k);
void BiBugle(unsigned char z);

void Init()
{
 _pa=0;
 _pac=0b10000000;
 _pb=0xff;
 _pbc=0x0f;
 _pc=0;     
 _pcc=0b00010000;
 //_pd=0;
 //_pdc=0xff;
 Sta=0;VibInput=1;VibrationF=0;

// LightFlash_F=0;
// RepairOperationF=0;
 CheckVibF=1;EnableVibF=1;
//-------------ProgramSetMode init ------//系统编程设置初始化
 /*MuteModeF=0;//ChirpsON_F=0;
 DoorErrorNotWarningF=0;

 CenterTimeBit1=0;CenterTimeBit0=1;
 AutoCenterLockOFF=0;
 PassiveON_F=0;

 TrunkSetBit1=0;TrunkSetBit0=1;
 Jacking_ON=0;
 Rob0F=0;Rob1F=0;
 RobStatusF=0;*/
//---------------------------------------
}
 void Receive(void)
{
 unsigned char i;
 unsigned char k;
	if(RF)
	{
		i=0;
		do
		{_clrwdt();
		 _delay(50);
		 i++;
		 if(RF==0) 
			goto CountLow;
		}while(i<10); //注意分号
		goto Error;
	}
	else 
	{
	CountLow:	
	i=0;
	do
	 {_clrwdt(); 
	  _delay(100);
	  i++;
	  if(RF) 
		{k=24;
		 if(i>50) 
			goto RightStartBit;
		}
	 }while(i<130);
	goto Error;
	}
RightStartBit:
		i=0;
		do
		{
		 _clrwdt();
		 _delay(50);
		 i++;
		 if(RF==0) goto NextCount;
		}while(i<26);
		goto Error;
NextCount:
	if(i<4) goto Error;		//不到200us丢掉
	if(i<10) {_c=0;RFbit=0;}
	 else {_c=1;RFbit=1;}
	_rlc(&data3);
	_rlc(&data2);
	_rlc(&data1);
	if(--k) goto WaitHigh;
	//_nop();	//加本机遥控码比较
	//_nop();							//0x10					//SysValue1	学习时恢复原厂默认设置,退出时保存WriteSys();	
	if(WaitRemoteF) {WriteMemory(&data1,AddrBuf);BiBugle(2);SysValue1=0x88;SysValue2=0;KeyInputTime=950;AccON_F=1;WriteCnt--;if(WriteCnt==0) {WaitRemoteF=0;KeyInputTime=0;}goto Error;}
	i=4;	//四个遥控
	AddrBuf=_24c_StartAddr;//AddrBuf=0x10;
NextCode:
	ReadMemory(AddrBuf);//(0x10);
	if((data3&0xf0)==(Rdata3&0xf0))
	  {
		if(data2==Rdata2)
			if(data1==Rdata1) 
			  { _clrwdt();
				ReceiveRight_F=1;
				return;//return(ReceiveRight_F);
			  }
	  }
	i--;
	if(i) goto NextCode;
	goto Error;

WaitHigh:
	if(RFbit)
	 {
		i=0;
		do
		{_clrwdt();
		 _delay(50);
		 i++;
		 if(RF) goto RightStartBit;
		}while(i<10); 
		goto Error;
	 }
	else
	 {
		i=0;
		do
		{_clrwdt();
		 _delay(50);
		 i++;
		 if(RF) goto RightStartBit;
		}while(i<26); 
		goto Error;
	 }

Error:		
	ReceiveRight_F=0;
	return;//return(ReceiveRight_F);
}
/*****************************************
				EEPROM
 ****************************************/
void Start()
{
WaitFree:
// SDA_C=1;
// SCL_C=1;
// if(SDA==1&SCL==1) goto free;
//   else goto WaitFree;
//free:
 SDA_C=0;
 SCL_C=0;	//Output
 SDA=1;
 _nop();
 SCL=1;
 _clrwdt();
 _nop();
 SDA=0;
 _nop();
 _nop();
 SCL=0;
}
void Stop()
{
 SDA_C=0;
 SCL_C=0;
 SDA=0;
 _nop();
 SCL=1;
 _clrwdt();
 _nop();
 SDA=1;
}

char I2C_RX()
{
 unsigned char i=8;
 unsigned char RxBuff=0;
 //RxBuff=0;
 SDA_C=1;
 SCL_C=0;
 _nop();
 //SDA=1;
 _nop();
 _nop();
 do
 {
 SCL=1;
 _nop();
 _nop();
 //SCL=0;
 if(SDA) _c=1;
   else _c=0;
 _rlc(&RxBuff);
 SCL=0;
 _clrwdt();
 _nop();
 }while(--i);  //注意i--,就循环9次了
 //data1=RxBuff;
 return(RxBuff);//(data1);
}
void I2C_TX( unsigned char TxBuff)
{
 unsigned char i=8;
 //unsigned char j;
 //j=TxBuff;
 SCL_C=0;
 SDA_C=0;
 do
 {
 _rlc(&TxBuff);
 if(_c) SDA=1;
	else SDA=0;
 SCL=1;
 _nop();
 _nop();
 SCL=0;
 _nop();
 _clrwdt();
 _nop();
 }while(--i);  //注意i--,就循环9次了
//check ACK 
 SDA=1;
 SDA_C=1;
 //SCL_C=0;
 //9th clock
 _nop();
 _nop();
 _nop();
 SCL=1;
 _nop();

 //SCL=0;////????不能加,SCL=0后,就没应答信号
 _nop();
 i=0xff;
  while(i--) 
   {
	_nop();
	_clrwdt();
    if(SDA==0) 
		goto ACK_OUT;
   }
ACK_OUT:
  _nop();
  SCL=0;
}

void ReadMemory(unsigned char addr)
 {
  unsigned char *k,i;
  k=&Rdata1;
  for(i=0;i<3;i++)		//读三个字节数据
	{
  	 AT24c_Addr=addr++;AddrBuf++;
  	 //*k=ReadByte();k++;addr++;
	 Start();
  	 I2C_TX(0b10100000);
  	 I2C_TX(AT24c_Addr);
  	 Start();
  	 I2C_TX(0b10100001);
  	 _clrwdt();
  	 //_nop();
  	 *k++=I2C_RX();//RxBuff=I2C_RX();
  	 Stop();

	 //*k++=RxBuff;
	}
 }
void WriteMemory(unsigned char *i,unsigned char k)
 {
  unsigned char j;
  for(j=0;j<3;j++)		//写三个字节数据
    {
  	 MCU_Addr=*i++;
  	 AT24c_Addr=k++;AddrBuf++;
     //WriteByte();
	 Start();
  	 I2C_TX(0b10100000);
     I2C_TX(AT24c_Addr);
  	 I2C_TX(MCU_Addr);
  	 Stop();
  	 Delayms(8);//12ms ;_delay(5000);
     //i++;k++;
    }
 }
void ReadSys()
 	{ReadMemory(0);
	 SysValue1=Rdata1;SysValue2=Rdata2;	
	}
void WriteSys()
	{data1=SysValue1;data2=SysValue2;data3=0;
	 WriteMemory(&data1,0);//AddrBuf);
	}
/*********************************
 ********************************/
#pragma vector timer0 @0x08;
void timer0(void)
 {
    _tmr=0;
    if(LedTime) LedTime--;
	if(LockTime) LockTime--;
	if(LightTime) LightTime--;
	if(AccON_F) 
		{
		 if(KeyInputTime) KeyInputTime--;
		 else {AccON_F=0;LED=0;
			   if(AccInput) TimeOutF=1;//超时关钥匙中控自动化 
			   if(DisBugleExit_F) 			   //On/OFF 3 次,转为10s等待Volet按下
				  {if(Wait10s_F) {KeyInputTime=650;AccON_F=1;Wait10s_F=0;}
					}//else LearnKeyCnt=0;KeyInputCnt=0;}
			   else	  		//超时退出,无声提示必须DisBugleExit_F=1,有声必须DisBugleExit_F=0;
				  {Exit_ModeF=1;LearnKeyCnt=0;KeyInputCnt=0;}//DisBugleExit_F=1;}
			  }
		}
	if(KeyDownTimeF) {
		if(KeyDownTime) KeyDownTime--;
		else {KeyDownTimeF=0;KeyDown2s_F=1;}}
	if(AutoLockTime) AutoLockTime--;
	if(AlarmTime) AlarmTime--;
	if(RobTime) RobTime--;			
	if(GuardTime) {if(--GuardTime==0) {Guard_F=1;SysFlag=1;PowerOff=1;if(VibInput) CheckVibF=1;else {CheckVibF=0;CheckVibDelay=190;}}}
	if(RepairTime) RepairTime--;//维修时间				`		//设防时有振动则等待,直到没有振动后3s才扫描振动传感器
	if(TrunkTime) TrunkTime--;
	if(CheckVibDelay) {CheckVibDelay--;if(!VibInput) CheckVibDelay=190;}
	else CheckVibF=1;       //设防时有振动则等待,直到没有振动后3s才扫描振动传感器
	if(LightON_OffTime) {if(--LightON_OffTime==0) {LightFlash_F=0;Light=0;}}
 }
void Delayms(unsigned char k)
 {
	unsigned char i,j;
	for(i=0;i<k;i++)
	for(j=0;j<250;j++) _clrwdt();
 }
/*void Delayus()
 {}*/
/*void BugleON(unsigned char i,unsigned char j)	//响i声,闪j下
 {
	unsigned char z;
	(i<j)?(z=j):(z=i);
	//if(i<j) z=j;
	 // else z=i;
	while(z--){
		 if(!MuteModeF){if(!MuteF) {if(i) {i--;Bugle=1;}}}
		 				if(j) {j--;Light=1;}Delayms(28);
		 	 			Bugle=0;Delayms(41);Light=0;Delayms(70);} //(111);}
 }*/
void BugleON(unsigned char i,unsigned char j)	//响i声,闪j下
 {
	unsigned char k,z;
	k=28;z=111;//if(Exit_ModeF) {k=28;z=200;}///
	if(FindF) {k=100;z=200;} FindF=0;
	LightTime=29;
	if(j) {LightFlash_F=1;Light=1;}else LightFlash_F=0;
	LightON_OffTime=j;
	/*if(j==1) LightON_OffTime=43;	//闪1次时间
	if(j==2) LightON_OffTime=102;	//闪2次时间
	if(j==3) LightON_OffTime=161;	//闪3次时间*/
	//if(j==5) LightON_OffTime=255;	//闪5次时间,出错
	while(i--){ LightON();
		 if(!MuteModeF){if(!MuteF) Bugle=1;} Delayms(k);//Delayms(28);
		 	 			Bugle=0;Delayms(z);}     //Delayms(111);}
		
 }
void BiBugle(unsigned char z)	//响z声,闪z下
 {
	while(z--){
		 	Bugle=1;Light=1;if(Exit_ModeF) Delayms(28);else Delayms(56);//(73);
		 	Bugle=0;Light=0;if(Exit_ModeF) Delayms(200);else Delayms(100);}//(255);}
 }
void Trunk()
 {
	if(TrunkTime!=0&&OpenTrunk_F==1) OpenTrunk=1;
	else {if(!TrunkSetBit1||!TrunkSetBit0) OpenTrunk=0;OpenTrunk_F=0;}
 }
void Lock()
 {
	if(LockTime!=0&&Lock_F==1) CloseLock=1;
	else {CloseLock=0;Lock_F=0;}
 }
void Unlock(void)
 {
	if(LockTime!=0&&UnLock_F==1) OpenLock=1;
	else {OpenLock=0;UnLock_F=0;}
 }
void LightON()
 {
	if(LightFlash_F)
	 {	
		if(!LightTime) { Light=!Light;LightTime=29;}
		//else Light=0;
	 }
 }
void LightOFF()
 {
	LightFlash_F=0;Light=0;//LightTime=0;
 }
void AutoLock()
 {

⌨️ 快捷键说明

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