(1)当检测到有人进车时能够自动开启车门,开启后延时10秒自动关闭。开门系统由电动机控制,开门时电动机正转,闭门时电动机反转。开门限度由限位开关确定;
(2)能够自动记录进入车内人的个数,当人数超过50时不在开启进车门;
(3)当车内人员有特殊情况需外出时,只能通过按下车内请求按钮,后门开启才能离开,离开之后记录人数自动减一;
(4)当车内人员未满绿色显示灯亮,正常满员时,车门上黄色显示灯亮;当有超载情况出现时,车内报警器自动报警,同时车门红色灯亮。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit buz=P2^0;//超载时蜂鸣器报警
sbit relay=P2^1;//超载时关闭客车发动机
sbit LED1=P2^2;//超载时红灯警报
sbit LED2=P2^3;//正常人数时绿灯指示
sbit LED3=P2^4;//有人要下车时黄灯指示
sbit SET=P2^5;//设置超载人数
sbit getoff=P2^6;//乘客下车指示
sbit geton=P2^7;//乘客上车检测
sbit up=P3^5;//增加超载人数上限
bit set_st; //状态标志
sbit P36=P3^6;
sbit P37=P3^7;//定义数码管引脚
uchar max=5;//定义超载人数
char count;//定义车内人数
uchar count1,count2,n1,n2;
const uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //显示0~9
/*****延时子程序*****/
void delay(uint num)
{
while( --num );
}
/*****外部中断0*****/
void int0() interrupt 0
{
count++; //上车人数记录
if (count>99)
count=0;
}
/*****外部中断1*****/
void int1() interrupt 2
{
count--; //下车人数记录
if (count<0)
count=0;
}
/*****设置超载人数*****/
void set()
{
if(SET==0)
{
delay(200);
TR1 = 1; //打开定时器1
set_st=1;
}
else if(SET==1)
set_st=0;
}
/*****显示人数子程序*****/
void Disp_num()
{
count2=count/10; //十位
count1=count%10; //个位
P1=tab[count1]; //个位显示
P36=1;
delay(50);
P36=0;
P1=tab[count2]; //十位显示
P37=1;
delay(50);
P37=0;
}
/*****显示超载人数子程序*****/
void Disp_alarm()
{
n2=max/10; //十位
n1=max%10; //个位
P1=tab[n1]; //个位显示
P36=1;
delay(50);
P36=0;
P1=tab[n2]; //十位显示
P37=1;
delay(50);
P37=0;
}
/*****定时器0*****/
void timer0isr(void) interrupt 1
{
uchar i;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定时50ms
i++;
if(i==200) //延时10s
{
P0=0x03; //电机反转,关闭车门
i=0;
}
}
/*****定时器1*****/
void timer1isr(void) interrupt 3
{
max++;
if (max>99)
max=0;
}
void main(void)
{
IT0=1;
IT1=1; //设置边沿触发方式
EX0=1; //打开 INT0 的中断允许。
EX1=1; //打开 INT1 的中断允许。
EA=1; //打开总中断
TMOD = 0x61; //设定T/C0工作在计数器
TH1 = 256-1;
TL1 = 256-1; //装载计数初值
ET1 = 1; //开T/C0中断
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//定时50ms
ET0 = 1; //开T/C0中断
buz=0;
relay=0;
LED1=1;
LED2=1;
LED3=1;
P0=0x03; //初始化
while(1)
{
if(geton==0)//乘客上车检测
{
P0=0x06; //电机正转,打开车门
TR0=1;//打开定时器0
}
if(count>max)//超载
{
relay=1;//超载时关闭客车发动机
LED1=0;//超载时红灯警报
LED2=1;//超载时关闭绿灯
buz=~buz;//超载蜂鸣器报警
delay(50);
}
else if(count<=max)//人数正常
{
buz=0;//正常人数时关闭蜂鸣器
relay=0;//正常人数时打开客车发动机
LED1=1;//正常人数时关闭红灯
LED2=0;//正常人数时绿灯指示
}
if(getoff==0)//乘客下车检测
LED3=0; //有人要下车时黄灯指示
else if(!INT1)//检测乘客是否已经下车
LED3=1;//乘客下车后关闭黄灯
链接:https://pan.baidu.com/s/1fh-3HXzxvSAF_hmm70ReDQ
提取码:g3ud