|
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int //用"uint"代替"unsigned int" 無(wú)符號(hào)整數(shù)
#define uchar unsigned char //用"uchar"代替"unsigned char" 無(wú)符號(hào)字符
unsigned char tmp;
sbit h1=P2^0; //四個(gè)紅外傳感器
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); //單字節(jié)發(fā)送函數(shù)
void ctrl(); //接收處理函數(shù)
void main()
{
init();
while(1)
{
if(RI==1) //是否有數(shù)據(jù)到來(lái)
{
RI = 0;
tmp = SBUF; //暫存接收到的數(shù)據(jù)
ctrl();
}
}
}
void init() //串口初始化
{
ES=0; //關(guān)中斷
SCON = 0x50; // REN=1允許串行接受狀態(tài),串口工作模式1,
//10位UART(1位起始位,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn)),波特率可變
TMOD = 0x20; //定時(shí)器1工作于方式2,8位自動(dòng)重載模式,用于產(chǎn)生波特率
TH1=TL1=0xFD; //波特率9600
PCON &= 0x7f; //波特率不倍增
TR1 = 1; //定時(shí)器1開(kāi)始工作,產(chǎn)生波特率
//發(fā)送標(biāo)志位置0
TI=0; //接收標(biāo)志位置0
RI=0;
//EA=0;
ES=1;
}
void send(unsigned char a) //單字節(jié)數(shù)據(jù)發(fā)送
{ //注意:若單片機(jī)TXD(P3.1)無(wú)上拉能力,必須在P3.1端接上拉電阻。本次測(cè)試需要接上拉電阻
TI=0;
SBUF=a;
while(TI==0);
TI=0;
}
void ctrl() //接收處理函數(shù)
{
switch(tmp)
{
case '1':
send(shu);
break;
}
if(ji1==0&&ji2==0&&ji3==0&&ji4==0) //如果四個(gè)紅外傳感器都感應(yīng)到人
{
shu=4; //則說(shuō)明4人到場(chǎng)
}
if(ji1==1&&ji2==1&&ji3==1&&ji4==1) //如果四個(gè)紅外傳感器都沒(méi)有感應(yīng)到人
{
shu=0; //則0人到場(chǎng),全部曠課
}
if(ji1==0&&ji2==0&&ji3==0&&ji4==1) //如果有三個(gè)傳感器感應(yīng)到人,則說(shuō)明三人到場(chǎng)
{
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) //如果兩個(gè)傳感器感應(yīng)到人,則兩人到場(chǎng)
{
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) //如果有一個(gè)傳感器感應(yīng)到人,說(shuō)明一人到場(chǎng)
{
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) //此處是紅外傳感器的感應(yīng)觸發(fā),無(wú)實(shí)際意義,下同
{
ji1=0; //低電平觸發(fā)
}
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;
}
}
|
|