#include <reg52.h>
#include <intrins.h>
#define uint unsigned int //用"uint"代替"unsigned int" 无符号整数
#define uchar unsigned char //用"uchar"代替"unsigned char" 无符号字符
unsigned char tmp;
sbit h1=P2^0; //四个红外传感器
sbit h2=P2^1;
sbit h3=P2^2;
sbit h4=P2^3;
uint shu=0;
uint ji1,ji2,ji3,ji4;
void init(); //串口初始化
void send(unsigned char a); //单字节发送函数
void ctrl(); //接收处理函数
void main()
{
init();
while(1)
{
if(RI==1) //是否有数据到来
{
RI = 0;
tmp = SBUF; //暂存接收到的数据
ctrl();
}
}
}
void init() //串口初始化
{
ES=0; //关中断
SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,
//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变
TMOD = 0x20; //定时器1工作于方式2,8位自动重载模式,用于产生波特率
TH1=TL1=0xFD; //波特率9600
PCON &= 0x7f; //波特率不倍增
TR1 = 1; //定时器1开始工作,产生波特率
//发送标志位置0
TI=0; //接收标志位置0
RI=0;
//EA=0;
ES=1;
}
void send(unsigned char a) //单字节数据发送
{ //注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻
TI=0;
SBUF=a;
while(TI==0);
TI=0;
}
void ctrl() //接收处理函数
{
switch(tmp)
{
case '1':
send(shu);
break;
}
if(ji1==0&&ji2==0&&ji3==0&&ji4==0) //如果四个红外传感器都感应到人
{
shu=4; //则说明4人到场
}
if(ji1==1&&ji2==1&&ji3==1&&ji4==1) //如果四个红外传感器都没有感应到人
{
shu=0; //则0人到场,全部旷课
}
if(ji1==0&&ji2==0&&ji3==0&&ji4==1) //如果有三个传感器感应到人,则说明三人到场
{
shu=3;
}
if(ji1==0&&ji2==0&&ji3==1&&ji4==0)
{
shu=3;
}
if(ji1==0&&ji2==1&&ji3==0&&ji4==0)
{
shu=3;
}
if(ji1==1&&ji2==0&&ji3==0&&ji4==0)
{
shu=3;
}
if(ji1==0&&ji2==0&&ji3==1&&ji4==1) //如果两个传感器感应到人,则两人到场
{
shu=2;
}
if(ji1==1&&ji2==1&&ji3==0&&ji4==0)
{
shu=2;
}
if(ji1==0&&ji2==1&&ji3==1&&ji4==0)
{
shu=2;
}
if(ji1==1&&ji2==0&&ji3==0&&ji4==1)
{
shu=2;
}
if(ji1==0&&ji2==1&&ji3==0&&ji4==1)
{
shu=2;
}
if(ji1==1&&ji2==0&&ji3==1&&ji4==0)
{
shu=2;
}
if(ji1==0&&ji2==1&&ji3==1&&ji4==0)
{
shu=2;
}
if(ji1==1&&ji2==0&&ji3==0&&ji4==1)
{
shu=2;
}
if(ji1==0&&ji2==1&&ji3==1&&ji4==1) //如果有一个传感器感应到人,说明一人到场
{
shu=1;
}
if(ji1==1&&ji2==0&&ji3==1&&ji4==1)
{
shu=1;
}
if(ji1==1&&ji2==1&&ji3==0&&ji4==1)
{
shu=1;
}
if(ji1==1&&ji2==1&&ji3==1&&ji4==0)
{
shu=1;
}
if(h1==0) //此处是红外传感器的感应触发,无实际意义,下同
{
ji1=0; //低电平触发
}
else
{
ji1=1;
}
if(h2==0)
{
ji2=0;
}
else
{
ji2=1;
}
if(h3==0)
{
ji3=0;
}
else
{
ji3=1;
}
if(h4==0)
{
ji4=0;
}
else
{
ji4=1;
}
}
|