基于zigbee的教室人数统计系统.docx
《基于zigbee的教室人数统计系统.docx》由会员分享,可在线阅读,更多相关《基于zigbee的教室人数统计系统.docx(22页珍藏版)》请在冰点文库上搜索。
基于zigbee的教室人数统计系统
题目:
基于zigbee的教室人数统计系统
目录
摘要:
3
1.系统简介4
1.1系统方案4
1.1.2控制器模块4
1.1.3显示模块4
1.1.4光电对管5
1.1.5串口通信5
1.1.6zigbee无线网络通信5
1.1.7上位机5
1.2功能与指标6
1.2.1光电对管6
1.2.2LCD12864显示屏6
1.2.3串口通信6
1.2.4zigbee无线网络通信6
1.2.5上位机6
1.3实现原理6
1.4硬件框图7
1.5软件流程8
2.特色举例9
3.技术说明9
4.系统适用范围9
5源程序9
摘要:
本系统采用AT89S52为控制中心,能够实时自动的显示教室的使用情况,并可以通过上位机远程设置教室的使用情况,系统包括了光电对管,LCD12864和上位机,通信采用了串口通信和zigbee无线网络通信。
关键字:
AT89S52,光电对管,上位机,串口通信,zigbee无线网络通信。
Abstract:
ThissystemadoptstheAT89S52asthecontrolcenter,canreal-timedisplayautomaticallytheusageoftheclassroom,andcanbesetbyPCremoteclassroomusage,systemconsistsofthephotoelectrictube,LCD12864andsuperordinationmachine,serialportcommunicationadoptedcommunicationandzigbeewirelessnetworkcommunication.
Keywords:
AT89S52,Photoelectrictotube,Uppermachine,Aserialportcommunication,Zigbeewirelessnetworkcommunication。
1.系统简介
1.1系统方案
系统采用AT89S52芯片,整个系统分为三个部分,分别是教室部分,教学楼公示部分和总控制室部分。
教室部分采集教室信息将其用LED12864显示并且会将信息通过串口通信传输到教学楼公示部分。
教学楼公示部分会接受每间教室的使用情况并将其整体显示出,同时会通过zigbee无线网络通信将信息传输到总控室部分。
总空室部分会接受信息并将信息显示在上位机上,同时还可以通过上位机内部的课程表设置教室的使用状态。
教室部分
总控制室
教学楼公示部分
教室部分
教室部分
图一整体结构图
1.1.2控制器模块
方案一:
采用现在比较通用的AT89S52单片机。
AT89S52单片机的发展已经有比较长的时间,应用比较广泛,各种技术都比较成熟,而且价格低廉,耗能较低。
方案二:
采用ATMEL公司的ATMEGA16A单片机系统。
ATMEGA16A单片机是8位微处理器,具有体积小、集成度高、易扩展、可靠性高、结构简单、中断处理能力强等特点,内存16kb,处理速度高,内部自带A/D使用方便,性价比高,广泛应用于工业领域。
但是价钱过高,本系统所用功能无需这些功能。
综合考虑后,我们选择方案一。
1.1.3显示模块
方案一:
1602液晶显示。
由于1602液晶自身特性决定其不能显示汉字,不能很好的配合系统工作,所以我们不选它做显示器件。
方案二:
12864液晶显示。
12864液晶作为一款应用十分广泛显示设备,其自身有着许多优点。
它内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.,能够很好的显示系统的工作状态。
且应用价格也不高,是本设计的理想显示器件。
根据我们的需要,我们决定采用第二种方案,采用12864液晶显示。
1.1.4光电对管
光电对管是利用被检测物对光束的遮挡或反射,由同步回路选通电路,从而检测物体有无的。
物体不限于金属,所有能反射光线的物体均可被检测。
光电开关将输入电流在发射器上转换为光信号射出,接收器再根据接收到的光线的强弱或有无对目标物体进行探测。
安防系统中常见的光电开关烟雾报警器,工业中经常用它来记数机械臂的运动次数。
1.1.5串口通信
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
1.1.6zigbee无线网络通信
Zigbee是一组基于IEEE批准通过的802.15.4无线标准研制开发的有关组网、安全和应用软件方面的技术标准。
IEEE仅处理低级MAC层和物理层协议,Zigbee联盟对其网络层协议和API进行了标准化。
Zigbee联盟还开发了安全层,以保证这种便携设备不会意外泄漏其标识,而且这种利用网络的远距离传输不会被其他节点获得。
完整的Zigbee协议套件由层应用规范、应用会聚层、网络层、数据链路层和物理层组成。
网络层以上协议由Zigbee联盟制定,IEEE802.15.4负责物理层和链路层标准。
1.1.7上位机
上位机可以显示各个教学楼的教室使用情况,并且需要远程控制教室的使用情况显示。
1.2功能与指标
1.2.1光电对管
光电对管的功能是检测学生出入教室的次数,每个门会有两对光电对管。
塑料或金属外壳,有圆柱形、方形、叉型、玻璃或塑料光纤等直射系统检测距离长,最大100m,检测不透明物体准确、可靠,抗恶劣条件好(灰尘、散射光导)反射系统检测距离中等,最大15m,易于安装,检测不透明物体或非反射性透明物体;极性反射系统可以检测反射物体漫射系统检测距离短,最大2m。
1.2.2LCD12864显示屏
显示屏的功能是显示教室的使用情况。
指标是要求实时显示。
1.2.3串口通信
串口通信的功能是在教室部分和教学楼公示部分之间构建信息连接。
指标是要求连接保持畅通。
1.2.4zigbee无线网络通信
Zigbee无线网络通信的功能是连接上位机与教学楼公示部分。
指标是保持信息连接畅通。
1.2.5上位机
上位机的功能是显示各个教学楼的教室使用情况,并且需要远程控制教室的使用情况显示。
指标是需要智能化控制与显示。
1.3实现原理
本系统通过达盛科技开发板控制教室部分,通过串口通信传送和接受教学楼公示部分的信息。
教学楼公示部分通过zigbee无线网络与上位机保持信息传输。
图二实物图
光电对管
1.4硬件框图
LED12864
AT89S52
通信串口
LED12864
Zigbee模块
无线网络
上位机
Zigbee模块
图三硬件框图
开始
1.5软件流程
程序初始化
上位机设置
教学楼公示
教室显示
占用状态
空闲状态
出
进
教室显示
教学楼公示
上位机显示
图四程序流程图
2.特色举例
1.系统可以通过串口和PC上位机连接,实现计算机对教室使用情况的监视与管理。
2.我们使用单片机串口通信,串口通信适合长距离通信,有一定的纠错能力,信息传输快并且稳定。
3.zigbee无线网络通信近距离、低复杂度、低功耗、低成本的无线网络技术。
3.技术说明
系统使用的ZigBee无线通信技术是一种新兴的近距离、低复杂度、低功耗、低成本的无线网络技术,通讯距离从标准的75m到几百米、几公里,并且支持无限扩展。
系统的红外发射和接收都是采用软件编码硬件电路简单稳定。
我们还使用了串口通信,对教室进行了更加快速和更加方便的信息同步。
4.系统适用范围
本系统是一种教室管理系统,他的功能是对所有的教室进行集中安排和管理,本系统的优点是易于管理教室,且方便同学寻找自习教室。
系统适用于所有的高校,它将会更加方便学校管理教室,学生寻找自习教室。
如果把本系统和因特网连接,就可以通过手机或网络随时随地的对学校的教室情况进行了解。
。
随着科学技术和人们生活水平的提高,我相信本系统将会有更加广阔的发展前景。
5源程序
教室部分
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_dataP0//数据口
#definesend_dataP1//通讯口
sbitLCD_RS=P1^5;//寄存器选择输入
sbitLCD_RW=P1^6;//液晶读/写控制
sbitLCD_EN=P1^4;//液晶使能控制
sbitLCD_PSB=P1^7;//串/并方式控制
sbitwela=P2^6;
sbitdula=P2^7;
sbitC1=P1^0;//对管1
sbitC2=P1^1;//对管2
sbitE1=P3^2;
sbitE2=P3^3;
ucharcodedis1[]="教室座位";
ucharcodedis2[]="90";//="90";
ucharcodedis3[]="当前状况";
uchardis4[30];
uintnum=0;//按键计数
uintzj=1;//自家(zj)循环用数
voiddelay_1ms(uintx)
{uinti,j;
for(j=0;jfor(i=0;i<110;i++);
}
voidsend_init()
{
TMOD=0x20;
TH1=0Xfd;
TL1=0Xfd;
TR1=1;
SM0=0;
SM1=1;
//EA=1;
//ES=1;
}
voidwrite_cmd(ucharcmd)
{LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
voidwrite_dat(uchardat)
{LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
voidlocate(uinty,uintk,uchar*s)
{if(k==0)
{k=0x80;}
elseif(k==1)
{k=0x90;}
elseif(k==2)
{k=0x88;}
elseif(k==3)
{k=0x98;}
write_cmd(y+k);//显示地址
while(*s)
{write_dat(*s);
s++;
}
}
voidsend()
{SBUF=dis4[0];
while(!
TI);
TI=0;}
//voidafter()
//{if(C1==0)
//{num++;
//delay_1ms(3000);}
//elseif(C2==0)
//{num--;
//delay_1ms(3000);}
//dis4[0]=num;
//P2=num;}
//voidup()
//{if(C1==0)
//zj=zj+1;
//if(zj==100)
//zj=0;
//while(!
C1);}
//voiddown()
//{if(C2==0)
//
//zj=zj2;
//if(zj==100)
//zj=0;
//while(!
C2);
//
//
//}
//
//voidafter()
//{up();
//down();
//if(zj==20)
//{num++;
//zj=0;}
//elseif(zj==2)
//{num--;
//zj=0;}
////dis2[0]=zj;
//dis4[0]=num;}
//voidcheck()
//{if(!
C1)
//num++;
//dis4[0]=num;
//}
/*LCD初始化设定*/
voidlcd_init()
{LCD_PSB=1;//并口方式
write_cmd(0x30);//基本指令操作
delay_1ms(5);
write_cmd(0x0C);//显示开,关光标
delay_1ms(5);
write_cmd(0x01);//清除LCD的显示内容
delay_1ms(5);
write_cmd(0x02);
delay_1ms(5);
write_cmd(0x06);
delay_1ms(5);
}
voidmain()
{
EA=1;
wela=0;
dula=0;
delay_1ms(5);//延时
lcd_init();//初始化LCD
delay_1ms(5);
while
(1)
{
//after();
send_init();
if(E1==0)
{
EX1=1;
IT1=0;
}
elseif(E2==0)
{
EX0=1;
IT0=0;
}
locate(0,0,dis1);
delay_1ms(5);
locate(0,1,dis2);
locate(0,2,dis3);
delay_1ms(5);
write_cmd(0x98);
write_dat(dis4[0]+0x30);
delay_1ms(1000);
send();
}
}
voidint1()interrupt2
{num++;
dis4[0]=num;
EX1=0;
delay_1ms(500);
}
voidinit0()interrupt1
{num--;
dis4[0]=num;
EX0=0;
delay_1ms(500);
}
教学楼部分
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_dataP0//数据口
#definesend_dataP1//通讯口
sbitLCD_RS=P1^5;//寄存器选择输入
sbitLCD_RW=P1^6;//液晶读/写控制
sbitLCD_EN=P1^4;//液晶使能控制
sbitLCD_PSB=P1^7;//串/并方式控制
sbitwela=P2^6;
sbitdula=P2^7;
ucharcodedis1[]="一楼教室";
ucharcodedis2[]="有课";
ucharcodedis3[]="二楼教室";
uchardis4[30];
uintnum=0;//按键计数
voiddelay_1ms(uintx)
{uinti,j;
for(j=0;jfor(i=0;i<110;i++);
}
voidreceive_init()
{
TMOD=0X20;
TH1=0Xfd;
TL1=0Xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
voidwrite_cmd(ucharcmd)
{LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
voidwrite_dat(uchardat)
{LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
voidlocate(uinty,uintk,uchar*s)
{if(k==0)
{k=0x80;}
elseif(k==1)
{k=0x90;}
elseif(k==2)
{k=0x88;}
elseif(k==3)
{k=0x98;}
write_cmd(y+k);//显示地址
while(*s)
{write_dat(*s);
s++;
}
}
/*LCD初始化设定*/
voidlcd_init()
{LCD_PSB=1;//并口方式
write_cmd(0x30);//基本指令操作
delay_1ms(5);
write_cmd(0x0C);//显示开,关光标
delay_1ms(5);
write_cmd(0x01);//清除LCD的显示内容
delay_1ms(5);
write_cmd(0x02);
delay_1ms(5);
write_cmd(0x06);
delay_1ms(5);
}
voidmain()
{
wela=0;
dula=0;
delay_1ms(5);//延时
lcd_init();//初始化LCD
delay_1ms(5);
receive_init();
while
(1)
{
receive_init();
locate(0,0,dis1);
locate(0,1,dis2);
locate(0,2,dis3);
write_cmd(0x98);
write_dat(dis4[0]+0x30);
delay_1ms(1000);
}
}
voidcut()interrupt4
{RI=0;
dis4[0]=SBUF;
//RI=1;
}