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

📄 chechuangsw.c

📁 车窗玻璃下降
💻 C
字号:
//Program name:车窗开关
//Date:07-31-2007
//Program version: NO.GX--V01
//Author:GengJianQiao
//Company:ZZYB
//************************************
//	p1.5		------ nc
//********************
//	p0.1/K1		------|----p1.1
//	p1.0/K3		------|
//	p1.2/K4		------|----p0.7
//********************
//	p0.2/K2		------	p0.3=L
//********************
//	p0.5/CmpRef	------|----CO---p1.1
//	P0.4/CmpIn	------|
//************************************
#include<reg9107.h>
//************************************
//k1=p0.1,k2=p0.2,k3=p1.0,k4=p1.2
sbit 	K1		=	P0^1;
sbit	K2		=	P0^2;
sbit    K3		=	P1^0;
sbit	K4		=	P1^2;
sbit 	LedPort	=	P0^3;
sbit 	UpPort	=	P1^1;
sbit 	DownPort	=	P0^7;

//************************************
#define FALSE	0
#define TURE	1
#define High	1
#define Low		0
#define AllTime	 220
//************************************
unsigned char Result,AutoDown;
unsigned int DynamicTime;
//************************************
void wdt_init(void);
void clr_wdt(void);
void Lpc9107init(void);
void keyscan(void);
void Delay(unsigned int t);
void Us(void);
void cmp_init(void);
bit comp(void);
void UpDownOut(void);	
//************************************
//进行端口刷新k1=p0.1,k2=p0.2,k3=p1.0,k4=p1.2
void keyscan(void)
{ 	
//	K1=K3=K4=High;			   
	if((K1&K3&K4)==0)
	{
		Delay(10);								//延时约10毫秒
		if((K1&K3&K4)==0)
		if(Result==0)DynamicTime=0;
		Result=(char)~K4<<2|(char)~K1<<1|(char)~K3;	
	}
	else
		Result=0;
}
//**************************************

void timer0_int() interrupt 1
{
	TR0=0;									//关闭定时器
		TH0=256-46296/256;					//定时50ms
		TL0=256-46296%256;					 //清除溢出标志
	TF0=0;
	if(Result!=0||AutoDown!=0)DynamicTime+=1;	//玻璃上升动作时间
	if(DynamicTime>AllTime)DynamicTime=AllTime;
   	TR0=1;
}
//**********//比较器中断*******************

void cmp_isr()interrupt 8
{
	EA=0;
	if(CMP1&0x01==0x01)					//比较器输出1
	{
		AutoDown=0;
		UpPort=DownPort=Low;
	}
	DynamicTime=AllTime;
	CMP1&=0xfe;							//清比较器中断标志
	EA=1;
}
//*******比较器初始化******************
void cmp_init(void)
{
	PT0AD|=0x30;			 			//禁止数字输入功能 
	P0M1|=0x30;							//转换为模拟功能
	P0M2&=0xcf;							//禁止数字输出功能
	CMP1=0x20;							//打开比较器功能
	Us();								//延时10微秒
	CMP1&=0xfe;							//清比较器中断标志
	EC=0;								//打开比较器中断
	EA=1;
}
//*********初始化看门设置*************//
void wdt_init(void)
{
	WDL=255;							//看门狗设置为2.6毫秒
	EA=0;								//关闭所有中断										
	WDCON=0xe4;							//启动看门狗定时器	
	WFEED1=0xa5;
	WFEED2=0x5a;
	EA=1;							 	//开中断
}
//***********喂狗序列***************//
void clr_wdt(void)
{
	EA=0;								//关闭所有中断	
	WFEED1=0xa5;
	WFEED2=0x5a;
	EA=1;							 	//开中断
}
//*******************************************
/*	过电流时返回COMP_F=1;否则COMP_F=0;	*/
/*
bit comp(void)
{
	bit cof;
	PT0AD|=0x30;			 			//禁止数字输入功能 
	P0M1|=0x30;							//转换为模拟功能
	P0M2&=0xcf;							//禁止数字输出功能
	
	CMP1=0x20;							//打开比较器功能
	CMP1&=0xfc;
	Us();								//延时10微秒
	if(CMP1&0x01==0x01)cof=1;			//比较器输出1
	else
		cof=0;
	CMP1=0x00;							//关闭比较器
	return cof;
}
*/
//**********************************//
void Lpc9107init(void)
{
	PCONA=0x80;			   				//禁止实时时钟
	RTCCON=0;							//实时时钟关闭
	DIVM=2;								//0.9MHz
	P0M1=0x30;							//p0.4,p0.5配置为模拟输入口
	P0M2=0x80;
	P1M1=0x0;                                                    
	P1M2=0x02;
	AUXR1|=	0x80;
	LedPort=1;
	UpPort=0;
	DownPort=0;
	TAMOD=0X00;
	TMOD=0x01;							//定时器0工作在定时方式1,16位定时模式
	TH0=256-46296/256;					//定时50ms
	TL0=256-46296%256;					//重装定时器
	ET0=1;								//开定时器0中断
	EA=1;								//开总中断
	TR0=1;								//启动定时器0
	K1=K2=K3=K4=1;		 
}
//*******************************************
//***************************************	
//堵转电流大于12A,玻璃升降器停止工作//
void main(void)
{
	
	Lpc9107init();
	wdt_init();
	cmp_init();
	while(1)
	{	
		clr_wdt();
		keyscan();
		LedPort=~K2;			 	//发光管指示输出
		UpDownOut();
	}
}

//****************输出电机控制****************
//若UpDownDat=1时,玻璃上升;UpDownDat=2时,玻璃下降;
//UpDownDat=3时,玻璃自动下降;UpDownDat=0时,输出为零
void UpDownOut(void)					
{
	switch(Result)						//玻璃上升
	{
		case 0:
			if(DynamicTime>AllTime)
			{
				AutoDown=0;
				UpPort=DownPort=Low;
  			}
			if(AutoDown==0){UpPort=DownPort=Low;EC=0;}	
			break;

	    case 2:							//玻璃下降
			if(DynamicTime<AllTime){UpPort=High;Delay(150);EC=1;}
			else
				UpPort=Low;		
			DownPort=Low;
			AutoDown=0;
			break;  
   
		case 4:
			if(DynamicTime<AllTime){DownPort=High;Delay(200);EC=1;}
			else
				DownPort=Low;
			UpPort=Low;	
		  	break;

     	case 5:
			if(DynamicTime<AllTime)
			{
				AutoDown=Result;
				DownPort=High;
				UpPort=Low;
				Delay(200);EC=1;
			}
			else
			{
				AutoDown=0;
				DownPort=Low;
			}
			break;                                           
	}								
}
//****************************************************
//延时约1毫秒
void Delay(unsigned int t)			   		
{
	unsigned char cnt;
	while(t--)
		for(cnt=0;cnt<=113;cnt++);
}
void Us(void)
{
	unsigned char n;
   	for(n=0;n<10;n++);
}		

⌨️ 快捷键说明

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