基于单片机的教室人数统计.docx

上传人:b****6 文档编号:5545027 上传时间:2022-12-19 格式:DOCX 页数:16 大小:161.33KB
下载 相关 举报
基于单片机的教室人数统计.docx_第1页
第1页 / 共16页
基于单片机的教室人数统计.docx_第2页
第2页 / 共16页
基于单片机的教室人数统计.docx_第3页
第3页 / 共16页
基于单片机的教室人数统计.docx_第4页
第4页 / 共16页
基于单片机的教室人数统计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于单片机的教室人数统计.docx

《基于单片机的教室人数统计.docx》由会员分享,可在线阅读,更多相关《基于单片机的教室人数统计.docx(16页珍藏版)》请在冰豆网上搜索。

基于单片机的教室人数统计.docx

基于单片机的教室人数统计

基于单片机的教室人数统计

 

沈阳航空航天大学

课程设计

(论文)

 

题目教室人数统计系统的设计

 

班级

学号

学生姓名

指导教师

 

 

教室人数统计系统的设计

沈阳航空航天大学自动化学院

 

摘要

本方案为教室人数技术器系统设计,通过模拟教室人员的出入,当有同学进入时进行加计数,当有同学外出时进行减计数,并把现在教室人数通过LED显示出来。

通过这个程序,教室可以很好的了解教室内的学生人数,既方便了学生的人数统计,同时也方便了老师的教学进展。

本系统可以与智能教室系统结合到一体,根据教室人数多少只能调节光线等,达到节能环保的目的。

关键词单片机;数码管;光电传感器;

0前言

本方案基于单片机80C51我们设计了一个教室人数自动统计系统。

通过本次课设计加深了对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。

掌握外部中断和LED显示的设置以及相应的传感器原理。

通过此次课程设计能够将单片机软件结合起来,对程序进行编辑,校验。

1总体方案设计

教室前门不开,只通后门。

测量系统硬件框图所示。

利用两个光敏二极管传感器,当有人从后门进出的时候,将产生电压脉冲,再利用单片机的外部中断功能进加减计数,最终显示出教室中的实际人数。

 

光敏传感器1

显示

 

光敏传感器2

 

图1系统原理框图

 

2硬件电路设计

2.1单片机系统

2.1.1AT89C51性能

AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含

有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51功能性能:

与MCS-51成品指令系统完全兼容;4KB可编程闪速存储器;寿命:

1000次写/擦循环;数据保留时间:

10年;全静态工作:

0-24MHz;三级程序存储器锁定;128*8B内部RAM;32个可编程I/O口线;2个16位定时/计数器;5个中断源;可编程串行UART通道;片内震荡器和掉电模式。

2.1.2AT89C51各引脚功能

AT89C51提供以下标准功能:

4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。

AT89C51采用PDIP封装形式,引脚配置如图2所示。

 

 

图2AT89C51的引脚图

 

AT89C51芯片的各引脚功能为:

P0口:

这组引脚共有8条,P0.0为最低位。

这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。

P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。

P1口:

这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。

P2口:

这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。

P3口:

这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表1所示:

 

表1P3口各位的第二功能

P3口各位

第二功能

P3.0

RXT(串行口输入)

P3.1

TXD(串行口输出)

P3.2

/INT0(外部中断0输入)

P3.3

/INT1(外部中断1输入)

P3.4

T0(定时器/计数器0的外部输入)

P3.5

T1(定时器/计数器1的外部输入)

P3.6

/WR(片外数据存储器写允许)

P3.7

/RD(片外数据存储器读允许)

Vcc为+5V电源线,Vss接地。

ALE:

地址锁存允许线,配合P0口的第二功能使用,在访问外部存储器时,89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。

在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。

该脉冲序列可以作为外部时钟源或定时脉冲使用。

/EA:

片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM,

若/EA=1,则允许使用片内ROM,若/EA=0,则只使用片外ROM。

/PSEN:

片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。

RST:

复位线,可以使89C51处于复位(即初始化)工作状态。

通常89C51复位有自动上电复位和人工按键复位两种。

XTAL1和XTAL2:

片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。

2.1.3晶振电路设计

我们采用晶振电路来产生单片机工作所需的时钟信号,使用晶体震荡器时,C1、C2取值20~40pF,使用陶瓷振荡器时C1、C2取值30~50pF。

在设计电路板时,晶振和电容应尽量靠近芯片,以减小分布电容,保证振荡器的稳定性。

图2晶振电路图

2.1.4复位电路设计

单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。

CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。

MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路。

本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和2个电容即可,如图4所示。

 

图4复位电路

电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是30±10pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。

 

2.3LED显示电路设计

2.3.1LED基本结构

LED是发光二极管显示器的缩写。

LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。

LED显示器是由若干个发光二极管组成显示字段的显示器件。

在单片机中使用最多的是七段数码显示器。

LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。

LED引脚排列如下图7所示:

 

图5LED引脚排列

 

2.3.2LED译码方式

译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。

硬件译码是指利用专门的硬件电路来实现显示字符码的转换。

软件译码就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序。

本设计系统中为了简化硬件线路设计,LED译码采用软件编程来实现。

由于本设计采用的是共阴极LED,其对应的字符和字段码如下表2所示。

 

表2共阴极字段码表

显示字符

共阴极字段码

0

3FH

1

06H

2

5BH

3

4FH

4

66H

5

6DH

6

7DH

7

07H

8

7FH

9

6FH

3软件设计

3.1工作原理

8051单片机可以响应外部中断中断请求,外部中断源的中断请求信号可以从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程序流程图:

 

图5程序流程图

3.3显示子程序

显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。

在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。

4调试分析

图6系统调试图

 

参考文献

[1]胡健.单片机原理及接口技术.北京:

机械工业出版社,2004

[2]谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006

[3]李广弟.单片机基础.北京航空航天大学出版社,2007

[4]姜志海,黄玉清等著.单片机原理及应用[M].北京:

电子工业出版社.2005

[5]魏立峰.单片机原理及应用技术.北京大学出版社,2005

[6]周润景.Protues在MCS-51&ARM7系统中的应用百例.第一版.北京:

电子工业出版社,2006

[7]边春远等著.MCS-51单片机应用开发实用子程序[M].北京:

人民邮电出版社.2005

[8]宋凤娟.基于89C51单片机的数字电压表设计[J].制造业自动化报刊,2007,29(03).

 

课设体会

经过两周的课设,我的体会是,我感觉我学习到很多东西,也成长很多。

以前只是在书本的东西,通过课设,我可以真正看到实际的运用。

这次课程设计是我第一次设计电路,并用Proteus实现了仿真。

在这整个过程中,我对电路设计,单片机的使用等都有了更进一步的认识。

通过这次设计,我学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,学到了很多东西。

我第一次做单片机课设,知识及经验的匮乏使我遇到很多困难,如果没有老师的督促指导以及同学们的支持,很难顺利的完成此次课程设计。

从课程设计开始到论文和答辩的顺利完成,都离不开老师、同学、朋友给予的帮助,在这里致以衷心的感谢,谢谢王艳辉老师!

 

[2014年1月8日完成]

附录1电路原理图

 

附录2程序清单

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitk=P3^4;

sbitk1=P3^0;

sbitk2=P3^1;

uinta=0;

uintb=0;

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

ucharcodeScan_BITs[]={0x20,0x10,0x08};

uchardataBuffer_Counts[]={0,0,0};

uintCount_A=0;

 

voidDelayMS(uintx)

{

uchart;

while(x--)

{

for(t=0;t<120;t++);

}

}

voidShow_Counts()

{

uinti;

Buffer_Counts[2]=Count_A/100;

Buffer_Counts[1]=Count_A%100/10;

Buffer_Counts[0]=Count_A%10;

if(Buffer_Counts[2]==0)

{

Buffer_Counts[2]=0x0a;

if(Buffer_Counts[1]==0)

{

Buffer_Counts[1]=0x0a;

}

}

 

for(i=0;i<3;i++)

{

P2=Scan_BITs[i];

P0=DSY_CODE[Buffer_Counts[i]];

DelayMS

(1);

}

}

voidmain()

{

IT0=1;

IT1=1;

PX0=1;

IE=0x85;

while

(1)

{

Show_Counts();

if(k==0){Count_A=0;}

elseif(k1==0)

{

DelayMS(5);

if(k1==0)

{

a++;

if(b!

=0)

{

Count_A++;

a=0;

b=0;

}

while(!

k1);

}

}

elseif(k2==0)

{

DelayMS(5);

if(k2==0)

{

b++;

if(a!

=0)

{

Count_A--;

a=0;

b=0;

}

while(!

k2);

}

}

}

}

 

/*

voidEX_INT0()interrupt0

{

a++;

if(b!

=0)

{

Count_A++;

a=0;

b=0;

}

while(k1!

=0);

}

voidEX_INT1()interrupt2

{

b++;

if(a!

=0)

{

Count_A--;

a=0;

b=0;

}

while(k2!

=0);

}*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1