红外感应自动门程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
160,165,170,175,180};
uchar const open_min_tab[10]={5,7,8,9,10,
15,20,25,30,35};
uchar const close_max_tab[10]={100,120,140,150,155,
160,165,170,175,180};
DDRD=0xf8;
PORTD=0xff;
//-----------------------------
PWMOUT_0;
SACE_0;
TCCR0=0x04;
TCNT0=0xd9;
GICR=0x40;/*c0;*/
MCUCR=0x02;/*0a;*/
TIMSK=0x01;
TCCR2=0x71;
FANXIANG_R;
#define FANXIANG_R (PORTD=PORTD&0xdf)//方向向右
#define RELAY_ON (PORTD=PORTD&0xf7)//继电器吸合
#define RELAY_OFF (PORTD=PORTD|0x08)//继电器断开
#define LOCK_ON (PORTD=PORTD&0xef)//锁停门扇打开
0x6d,0x7d,0x07,0x7f,0x6f};
uchar const act[4]={0xdf,0xbf,0x7f,0xef}; //数码管位码设定
/***********************输入量设定*************************/
uchar stoptime=3;//靠墙停顿时间设定
uint allchangdu;//总长度
uint sp_pl;//脉冲计数变量
uchar set_status;//设定状态
uchar status;//工作状态
/***********临时变量***********/
uint cnt_500;
uchar fst,val;
uchar temp;
uchar x;uchar FX=0;
{EEPROM_READ(close_min_address,open_min_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(study_speed_address+1,eep_temp);
if(eep_temp==55)
{EEPROM_READ(close_max_address,open_max_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(close_min_address+1,eep_temp);
if(eep_temp==55)
uchar const close_min_tab[10]={5,7,8,9,10,
15,20,25,30,35};
uint round_cnt; //直流电机旋转的圈数
int changdu; //ቤተ መጻሕፍቲ ባይዱ际门扇移动的长度
uint st_changdu;//设定门扇移动的长度
uint allchangdu_x; //总长度(中间变量)
}
TCNT0=0xd9;
switch (status)
{//门全开后转状态10
case 0:if(round_cnt>200){status=10;}break;
//门全关后转状态30停止
case 20:if(round_cnt>200){status=30;}break;
#include<iom16v.h>//文件包含
#include<eeprom.h>
#define uchar unsigned char //变量类型的宏定义
#define uint unsigned int
uchar const seg[10]={0x3f,0x06,0x5b,0x4f,0x66, //数码管段码设定
void timer0(void)
{SREG|=0x80;
round_cnt++;
dis_bit++;
if(dis_bit>2)dis_bit=0;
if(fst==1)cnt_500++;
if(cnt_500>500){fst=2;round_cnt=0;cnt_500=0;}
switch(dis_bit)
{EEPROM_READ(open_min_address,open_min_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(close_max_address+1,eep_temp);
if(eep_temp==55)
for(i=0;i<k;i++){
for(j=0;j<1500;j++)
{;}}
}
/*==========初始化单片机I/O口子函数==========*/
void init_IO(void)
{DDRA=0x7f;
PORTA=0x00;
DDRB=0xe0;
PORTB=0xff;
DDRC=0x01;
PORTC=0xff;
#define L 1;
#define R 0;
#define ON 0;
#define OFF 1;
#define ALL 1
#define HALF 0
/**************端口高低电平定义****************/
#define PWMOUT_0 (PORTD=PORTD|0x80)//PWM端输出0
#define OFF_TANTE1 (PINB&0x10)//关闭门外侧的红外感应探测器1
#define HALF_RUN (PIND&0x01)//门扇半开运行
#define ALLOPEN_STOP (PIND&0x02)//门扇全开后锁停
#define STOP (PINC&0x10)//门扇锁停
uchar close_max_temp=1,close_min_temp=4;
/*****************输入量的列表****************/
uint const stoptime_tab[10]={500,1000,2000,3000,4000,5000,
6000,7000,8000,9000};
#define PWMOUT_1 (PORTD=PORTD&0x7f)//PWM端输出1
#define SACE_0 (PORTD=PORTD|0x40)//SACE端输出0
#define SACE_1 (PORTD=PORTD&0xbf)//SACE端输出1
#define FANXIANG_L (PORTD=PORTD|0x20)//方向向左
uchar openflag;
uchar dis_bit,ddata=0;
/***********************************************/
uchar inc_dec_flag;//加减速的标志
uchar wide=0;//加减速的脉冲宽度变量
/****************常量定义***************/
round_cnt=0;
changdu=0;
sp_pl=0;
allchangdu=0;
changdu=0;
st_changdu=0;
status=0;
inc_dec_flag=0;
//***********************************
eep_temp=0;
EEPROM_READ(stoptime_address+1,eep_temp);
#define close_max_address 30
#define close_min_address 35
/***********************************************************/
uchar openstop;//门全开后停止不动的标志
uchar tante_flag;//门外侧的红外感应探测器1允许使用的标志
uchar eep_temp;
uchar open_inc_tab[16];//开门加速函数的计算表
uchar open_dec_tab[16];//开门减速函数的计算表
uchar close_inc_tab[16];//关门加速函数的计算表
uchar close_dec_tab[16];//关门减速函数的计算表
{EEPROM_READ(study_speed_address,study_speed_temp);}
}
/*===================================================*/
/***定时器T0的1ms中断,用于数码管显示及检测运行状态的马达堵转情况***/
#pragma interrupt_handler timer0:10
{EEPROM_READ(open_max_address,open_max_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(open_min_address+1,eep_temp);
if(eep_temp==55)
if(eep_temp==55)
{EEPROM_READ(stoptime_address,stoptime);}
//************************************
eep_temp=0;
EEPROM_READ(open_max_address+1,eep_temp);
if(eep_temp==55)
/******************函数声明***********************/
void start(void);
//void fai_zhan(void);
/****************延时子函数*******************/
void delay(uint k)
{
uint i,j;
uchar study_speed;//学习时的速度设定
uchar study_speed_temp=4;
uchar open_max,open_min; //开门最大速度、最小速度设定
uchar open_max_temp=4,open_min_temp=4;
uchar close_max,close_min; //关门最大速度、最小速度设定
/****************EEPROM内部地址定义*********************/
#define stoptime_address 10
#define study_speed_address 15
#define open_max_address 20
#define open_min_address 25
uchar const round_cnt_tab[10]={5,6,7,8,9,10,15,20,25,30};
uchar const study_speed_tab[10]={5,7,9,11,13,15,
20,25,30,35};
uchar const open_max_tab[10]={100,120,140,150,155,
#define KEY_SET (PINB&0x01)//按键输入SET
#define KEY_ADD (PINB&0x02)//按键输入ADD
#define KEY_OK (PINB&0x04)//按键输入OK
#define OFF_ALLTANTE (PINB&0x08)//关闭全部的红外感应探测器
{
case 0:PORTA=seg[status%10];PORTB=act[0];break;
case 1:PORTA=seg[(status%100)/10];PORTB=act[1];break;
case 2:PORTA=seg[status/100];PORTB=act[2];break;
default:break;
#define LOCK_OFF (PORTD=PORTD|0x10)//锁停门扇关闭
#define CON_SMAIL (PORTC&0x01)//门扇打开微小的距离运行
#define TANTE1 (PINC&0x40)//门外侧的红外感应探测器1
#define TANTE2 (PINC&0x02)//门内侧的红外感应探测器2
uchar const open_min_tab[10]={5,7,8,9,10,
15,20,25,30,35};
uchar const close_max_tab[10]={100,120,140,150,155,
160,165,170,175,180};
DDRD=0xf8;
PORTD=0xff;
//-----------------------------
PWMOUT_0;
SACE_0;
TCCR0=0x04;
TCNT0=0xd9;
GICR=0x40;/*c0;*/
MCUCR=0x02;/*0a;*/
TIMSK=0x01;
TCCR2=0x71;
FANXIANG_R;
#define FANXIANG_R (PORTD=PORTD&0xdf)//方向向右
#define RELAY_ON (PORTD=PORTD&0xf7)//继电器吸合
#define RELAY_OFF (PORTD=PORTD|0x08)//继电器断开
#define LOCK_ON (PORTD=PORTD&0xef)//锁停门扇打开
0x6d,0x7d,0x07,0x7f,0x6f};
uchar const act[4]={0xdf,0xbf,0x7f,0xef}; //数码管位码设定
/***********************输入量设定*************************/
uchar stoptime=3;//靠墙停顿时间设定
uint allchangdu;//总长度
uint sp_pl;//脉冲计数变量
uchar set_status;//设定状态
uchar status;//工作状态
/***********临时变量***********/
uint cnt_500;
uchar fst,val;
uchar temp;
uchar x;uchar FX=0;
{EEPROM_READ(close_min_address,open_min_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(study_speed_address+1,eep_temp);
if(eep_temp==55)
{EEPROM_READ(close_max_address,open_max_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(close_min_address+1,eep_temp);
if(eep_temp==55)
uchar const close_min_tab[10]={5,7,8,9,10,
15,20,25,30,35};
uint round_cnt; //直流电机旋转的圈数
int changdu; //ቤተ መጻሕፍቲ ባይዱ际门扇移动的长度
uint st_changdu;//设定门扇移动的长度
uint allchangdu_x; //总长度(中间变量)
}
TCNT0=0xd9;
switch (status)
{//门全开后转状态10
case 0:if(round_cnt>200){status=10;}break;
//门全关后转状态30停止
case 20:if(round_cnt>200){status=30;}break;
#include<iom16v.h>//文件包含
#include<eeprom.h>
#define uchar unsigned char //变量类型的宏定义
#define uint unsigned int
uchar const seg[10]={0x3f,0x06,0x5b,0x4f,0x66, //数码管段码设定
void timer0(void)
{SREG|=0x80;
round_cnt++;
dis_bit++;
if(dis_bit>2)dis_bit=0;
if(fst==1)cnt_500++;
if(cnt_500>500){fst=2;round_cnt=0;cnt_500=0;}
switch(dis_bit)
{EEPROM_READ(open_min_address,open_min_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(close_max_address+1,eep_temp);
if(eep_temp==55)
for(i=0;i<k;i++){
for(j=0;j<1500;j++)
{;}}
}
/*==========初始化单片机I/O口子函数==========*/
void init_IO(void)
{DDRA=0x7f;
PORTA=0x00;
DDRB=0xe0;
PORTB=0xff;
DDRC=0x01;
PORTC=0xff;
#define L 1;
#define R 0;
#define ON 0;
#define OFF 1;
#define ALL 1
#define HALF 0
/**************端口高低电平定义****************/
#define PWMOUT_0 (PORTD=PORTD|0x80)//PWM端输出0
#define OFF_TANTE1 (PINB&0x10)//关闭门外侧的红外感应探测器1
#define HALF_RUN (PIND&0x01)//门扇半开运行
#define ALLOPEN_STOP (PIND&0x02)//门扇全开后锁停
#define STOP (PINC&0x10)//门扇锁停
uchar close_max_temp=1,close_min_temp=4;
/*****************输入量的列表****************/
uint const stoptime_tab[10]={500,1000,2000,3000,4000,5000,
6000,7000,8000,9000};
#define PWMOUT_1 (PORTD=PORTD&0x7f)//PWM端输出1
#define SACE_0 (PORTD=PORTD|0x40)//SACE端输出0
#define SACE_1 (PORTD=PORTD&0xbf)//SACE端输出1
#define FANXIANG_L (PORTD=PORTD|0x20)//方向向左
uchar openflag;
uchar dis_bit,ddata=0;
/***********************************************/
uchar inc_dec_flag;//加减速的标志
uchar wide=0;//加减速的脉冲宽度变量
/****************常量定义***************/
round_cnt=0;
changdu=0;
sp_pl=0;
allchangdu=0;
changdu=0;
st_changdu=0;
status=0;
inc_dec_flag=0;
//***********************************
eep_temp=0;
EEPROM_READ(stoptime_address+1,eep_temp);
#define close_max_address 30
#define close_min_address 35
/***********************************************************/
uchar openstop;//门全开后停止不动的标志
uchar tante_flag;//门外侧的红外感应探测器1允许使用的标志
uchar eep_temp;
uchar open_inc_tab[16];//开门加速函数的计算表
uchar open_dec_tab[16];//开门减速函数的计算表
uchar close_inc_tab[16];//关门加速函数的计算表
uchar close_dec_tab[16];//关门减速函数的计算表
{EEPROM_READ(study_speed_address,study_speed_temp);}
}
/*===================================================*/
/***定时器T0的1ms中断,用于数码管显示及检测运行状态的马达堵转情况***/
#pragma interrupt_handler timer0:10
{EEPROM_READ(open_max_address,open_max_temp);}
//*************************************
eep_temp=0;
EEPROM_READ(open_min_address+1,eep_temp);
if(eep_temp==55)
if(eep_temp==55)
{EEPROM_READ(stoptime_address,stoptime);}
//************************************
eep_temp=0;
EEPROM_READ(open_max_address+1,eep_temp);
if(eep_temp==55)
/******************函数声明***********************/
void start(void);
//void fai_zhan(void);
/****************延时子函数*******************/
void delay(uint k)
{
uint i,j;
uchar study_speed;//学习时的速度设定
uchar study_speed_temp=4;
uchar open_max,open_min; //开门最大速度、最小速度设定
uchar open_max_temp=4,open_min_temp=4;
uchar close_max,close_min; //关门最大速度、最小速度设定
/****************EEPROM内部地址定义*********************/
#define stoptime_address 10
#define study_speed_address 15
#define open_max_address 20
#define open_min_address 25
uchar const round_cnt_tab[10]={5,6,7,8,9,10,15,20,25,30};
uchar const study_speed_tab[10]={5,7,9,11,13,15,
20,25,30,35};
uchar const open_max_tab[10]={100,120,140,150,155,
#define KEY_SET (PINB&0x01)//按键输入SET
#define KEY_ADD (PINB&0x02)//按键输入ADD
#define KEY_OK (PINB&0x04)//按键输入OK
#define OFF_ALLTANTE (PINB&0x08)//关闭全部的红外感应探测器
{
case 0:PORTA=seg[status%10];PORTB=act[0];break;
case 1:PORTA=seg[(status%100)/10];PORTB=act[1];break;
case 2:PORTA=seg[status/100];PORTB=act[2];break;
default:break;
#define LOCK_OFF (PORTD=PORTD|0x10)//锁停门扇关闭
#define CON_SMAIL (PORTC&0x01)//门扇打开微小的距离运行
#define TANTE1 (PINC&0x40)//门外侧的红外感应探测器1
#define TANTE2 (PINC&0x02)//门内侧的红外感应探测器2