教室人数统计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1.目的和意义 (1)
1.1设计目的及意义 (1)
1.2设计内容 (1)
1.3设计要求 (1)
2.硬件电路设计 (1)
2.1设计思路 (1)
2.2单片机电路如图 (2)
2.3光敏二极管传感器 (2)
3.软件电路设计 (2)
3.1工作原理 (3)
3.2程序流程图 (4)
3.2.1程序主流程图 (4)
3.2.2 加法流程图 (5)
3.2.3 减法流程图 (5)
3.3汇编程序 (6)
4.电路调试 (9)
5.仿真结果 (10)
6.实验感想 (10)
7.参考文献 (11)
1.目的和意义
1.1设计目的及意义
教室人数统计对于一些人数比较大的课堂一直是个比较困难的问题。于是,基于单片机89C51我们设计了一个教室人数自动统计系统。通过本次课程设计加深了对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。掌握外部中断和LED显示的设置以及相应的传感器原理。通过此次课程设计能够将单片机软件结合起来,对程序进行编辑,校验。
1.2设计内容
设计教室人数统计系统,人员进入时系统进行加计数,人员离开时系统进行减计数并能够通过LED实时显示教室内的人数。
1.3设计要求
统计出教室内上课人数并能够通过LED显示出来。
2.硬件电路设计
2.1设计思路
教室前门不开,只通后门。利用两个光敏二极管传感器,当有人从后门进出的时候,将产生电压脉冲,再利用单片机的外部中断功能进加减计数,最终显示出教室中的实际人数。
设计电路利用89C51通过8155及74LS138扩展4只共阴极LED数码管的接口电路,并结合了所查的资料进行了光敏二极管的理论研究(开关中以开关替代)。图中8155的B扣和所有LED的a~h引线相连,故B口为字形扣;各LED的位选线和8155的C口相连,故C口为字
位口。
2.2单片机电路如图
图1 Proteus模拟电路图
2.3光敏二极管传感器(程序中利用开关了进行仿真)
结构原理:光敏二极管的结构与一般二极管相似。它装在透明玻璃外壳中,其PN结装在管的顶部,可以直接受到光照射。
工作原理:光敏二极管在电路中一般是处于反向工作状态,在没有光照射时,反向电阻很大,反向电流很小,反向电流称为暗电流,当光照射在PN结上,光子打在PN结附近,使PN结附近产生光生电子和光生空穴对,它们在PN结处的内电场作用下作定向运动,形成光电流。光的照度越大,光电流越大因此光敏二极管在不受适当波长光照射时处于截止状态,受适当波长光照射时处于导通状态,如图2。
图2 光敏二极管工作电路图
装置结构:将两个光敏二极管安装于同学们进出的过道一侧,并间隔一定的距离L,在相对的一侧安装两个激光发射器,如图3。
图3 装置结构图
工作过程:当过道中无人员经过时,激光照射光敏二极管,使二极管导通,则图2中的电路导通,电阻RL两端高电压。当过道中有人员通过时,二极管截止,RL两端低电压。将两个传感器电路中RL 电压变化产生的电压脉冲信号分别接入单片机的外部中断输入端/INT0与/INT1,触发中断程序,在中断程序中进行相应的操作,即可实现人数的加减计数。
注:为满足单片机工作电平要求,图2电路中,电源E取5V,R 取适当值。
3.软件电路设计
3.1工作原理
89C51单片机可以响应外部中断中断请求,外部中断源的中断请求信号可以从P3.2和P3.3(即/INT0和/INT1)引脚上输入,有电平或负边沿两种引起中断的触发方式。本系统中利用负边沿触发方式,光敏二极管1电路中RL电压信号接/INTO,光敏二极管2电路中RL 电压信号接/INT1。
工作过程:进入--当有人员进入教室时,光敏二极管l首先被隔断,/INT0端首先产生负脉冲信号,引发单片机中断,在相应的中断程序中对计算人数的存储器R2进行加l计算,同时在程序中关闭/INTl的中断使能,这样就不会引起/INT1触发中断,并开始定时,在隔一定时间后利用定时中断打开/INT1中断使能。出去--当有人员离开教室时,光敏二极管2光线首先被隔断,/INTl端首先产生负脉冲信号,引发单片机中断,在相应的中断程序中对计算人数的存储器R2进行减l计算,同时在程序中关闭/INT0的中断使能,这样就不会引起/INT0触发中断,并开始定时,在隔一定时间后利用定时中断打开/INT0中断使能,最终通过相应的LED显示程序显示的人数即当前教室里的人数了。
3.2程序流程图
3.2.1程序主流程图:
3.2.2加法流程图:
3.2.3减法流程图:
3.3汇编程序
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP CT1
ORG 000BH
LJMP YS
ORG 0013H
AJMP CT2
GW EQU 20h
SW EQU 21H
BW EQU 22H
QW EQU 23H
MOV 20H,#00H
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV R2,#00H
MAIN: SETB EX0 ;开INT0 SETB EX1 ;开INT1 SETB EA
JIA: MOV R4,#00H ;加法运算 MOV SP,#60H
MOV DPTR,#2100H
MOV A,#0EH
MOVX @DPTR,A
ACALL FB
LOOP1: ACALL DIR
MOV A,R2
CJNE A,52H,BACK1
SJMP LOOP1
JIAN: MOV R4,#00H ;减法运算
MOV SP,#60H
MOV DPTR,#2100H
MOV A,#0EH
MOVX @DPTR,A
ACALL FB2
LOOP2: ACALL DIR
MOV A,R2
CJNE A,52H,BACK
SJMP LOOP2
CT1: CLR EX1
MOV 52H,R2 ;关INT1
INC R2
MOV TMOD,#01H ;T0选择定时器方式1工作
MOV TH0,#0BH ;装入初值
MOV TL0,#0DCH
SETB ET0 ;开T0中断
SETB TR0 ;启动中断
BACK2: MOV A,P3
CJNE A,#0FFH,BACK2 ;判断按键是否弹开,避免1人多次计数 LJMP JIA
BACK: RETI
CT2: CLR EX0 ;关INT0
MOV 52H,R2
DEC R2
MOV TMOD,#01H
MOV TH0,#0BH
MOV TL0,#0DCH
SETB ET0
SETB TR0
BACK3: MOV A,P3
CJNE A,#0FFH,BACK3
LJMP JIAN
BACK1: RETI
YS: SETB EX0