📄 chechuangsw.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 + -