基于单片机统计教室人数系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与接口技术
课程设计说明书
课程名称:微机原理与接口技术综合实验
设计题目:教室人数统计系统
院系:机械与电子控制工程学院
班级:机电1011班机电1012班
设计者: 周子航(10223058)韩振洋(10223036)尤兴权(10223024)狄长路(10223034)
龚军建(10223035)姚雪阳(10223053)设计时间:2012 年6月25日至2012年7月4号
机电学院《微机原理与接口技术》课程设计任务书
●设计要求:扩展两个光电传感器和一块8*8点阵LED显示器
●控制系统需要实现:
1.检测教室里的人数。
并在8*8点阵LED显示器显示出来;
2.设置一个按键实现复位清零。
3.用发光二极管模拟电灯,当教室有人时,发光二极管发光,
无人时发光二极管不发光。
注:我们组作品的扩展功能:
1、当教室内人数超过十人时,8*8点阵LED显示器显示
“OK”;
2、早退报警功能;
3、上课倒计时50分钟功能;
4、开机显示“BJTU”功能。
●工作计划安排:
在初期大体上我们组细化为五个部分
1.对硬件器材的学习与认识
2.仿真程序的大致框架
3.程序设计与调试
4.系统软硬件知识的综合学习与研究
5.试验总结及实验报告的书写
我组组员工作的具体分工如下
周子航、韩振洋:主程序设计与仿真调试
龚军建、尤兴权:辅助程序设计及会议记录
狄长路、姚雪阳:实验报告的前期撰写及过程调试
在本次实验中,我组齐心协力,共同研究与学习,虽各有分工,但又互相帮助,互相学习。
做到每一个人各有侧重点的同时,又对总体的每一步有所参与,对总体的设计与调试都有所掌握。
目录
一、摘要
二、系统基本功能和实施方案
三、设计思路
四、程序流程图
五、仿真过程及结果
六、心得体会
七、参考文献
八、附件
1、附件1:硬件原理图
2、附件2:源程序
3、附件3:会议纪要
正文
一、摘要
自习室是学生们学习的重要场所,选择合适的自习室对自习的同学来说是一件比较麻烦的事,要轻松地挑出一间人数较少的自习室是比较麻烦的,每次只有推门进去看看,才能知道里面有多少人,才能做出是否在这里自习的决定。
这样不但自己不方便,也会影响到其它上自习的同学。
同时对于自习室的管理工作也会带来很大帮助,通过此设备,管理人员可以很容易地了解自习室的利用情况,以适时适量地对自习室进行供电供暖的调节。
从人达到对资源的有效利用,避免浪费!因此,我组利用MCS-51 单片机来设计教室人数统计系统,扩展两个光电传感器和一块8*8LED显示器,可以将当前教室人数显示在门口,以方便同学们方便快捷地选择自习室进行自习,同时方便管理人员的管理工作。
关键词: 8*8点阵LED显示器人数统计复位清零倒计时早退监测
二、系统基本功能和实施方案
1、设计目的:
如果在进自习室前就能知道教室里有多少人,是否满员,而不
用推门进去才知道,将会节省自习同学的很多时间,同时也节省管理人员的很多时间,带来很大的方便,不会更多的影响自习的同学。
因此我们小组选择了设计这个教室人数统计系统,利用51单片机系统和两个光电对管器件统计教室进出的人数,最后把教师当前人数显示在一个8*8LED显示器上,方便想要自习的同学选择教室,以及管理人员的管理工作。
另:本系统扩展了上课早退记录功能和倒计时功能,通过按键控制可实现不同功能之间的转换。
而且为老师上课把握时间,增设了50分钟的倒计时,更好的促进课堂教学。
2、基本功能的实施方案:
模拟教室人员的进出,原本在出入口安装两个光电对管GK102,分别G1和G2;为方便仿真,改用两个开关代替。
由一块8*8LED
显示教室目前人数;一个发光二极管显示教室人数是否为零;还有一个复位按键显示器清零。
当有人进去时,先响应G1,后响应G2,此时将人数加一并显示出来;当有人出去时,先响应G2,后响应G1,此时将人数减一并显示出来。
如果人数为零则发光二极管熄灭。
如检测到复位按键短按下则熄灭发光二极管,同时将人数变成零并显示出来;长按则进入早退报警功能。
按P1.0则进入50分钟的倒计时。
三、设计思路
本程序分主程序、两中断程序、显示子程序与延时子程序四部分。
各部分功能如下:
1、主程序:
主程序完成相应存储单元和标志位的清零、8155的设置、开机界面显示、中断设置、对按键按下方式的检测和处理等工作。
程序中设一个循环程序用以判断按键是否按下、按下的奇偶次数、按下时间的长短。
并按按键按下方式的不同对二极管和LED进行控制。
按键按下方式及系统相应完成的功能如下:
系统起始功能:显示教室中人数并根据人数控制发光二极管亮灭。
P1.3短按:复位。
P1.3长按:系统进入上课早退监测功能,显示“止”字后,如有人在上课时间走出课堂则LED显示的“X”字表示“早退”,同时发光二极管亮以警示。
P1.0按键:进入倒计时功能。
LED显示由50开始,至0为止,间隔为50minutes的上课倒计时。
2、中断程序:
两中断程序分别对人数增减标志位(21H)进行赋1和-1的操作。
两中断响应先后决定对人数增减标志位(21H)进行赋1还是-1。
具体实现方式为:在一个中断程序中加入对另一中断是否响应的判断。
如另一中断没有响应,则进行赋1或-1的操作。
3、显示子程序:
显示子程序采用定行值,扫描列值的方法。
具体见8*8LED原理的介绍。
4、延时子程序:(两个)
本程序中有两个延时子程序,分别完成1ms和0.2s的延时。
以上各部分程序的具体实现方式见程序流程图和源程序。
四、程序流程图
1、主程序
2、显示程序
3、中断程序(INT0中断与INT1中断)
五、仿真过程及结果
系统电路原理图见附件
主体元件工作原理如下:
1、8*8 点阵LED的工作原理:
图(1)为8×8点阵LED外观及引脚图,其等效电路如图(2)所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。
例如如果想使左上角LED点亮,则Y0=1,X0=0即可。
应用时限流电阻可以放在X轴或Y轴。
图2:8×8点阵LED外观及引脚图
图3:8×8点阵LED等效电路
图4:8×8点阵LED电路原理
点阵LED扫描法介绍
点阵LED一般采用扫描式显示,实际运用分为三种方式:(1)点扫描;
(2)行扫描;
(3)列扫描。
若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。
若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。
此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。
如图3所示。
本程序采用第三种方式。
其对应的字形编码如下:
字形编码:
根据电路图的连接情况可知,8*8点阵显示只有当PA口和PB 口相对应的列和横线都输入为“0”时,相应的点才发光显示。
数字“1”显示如下图所示
其显示代码为:0FFH, 0FFH, 0FFH, 7BH, 01H, 7FH, 0FFH, 0FFH
只要把这些代码分别送到相应的列线上面,然后采用列循环,即可实现“1”的数字显示。
显示过程如下
将代码送到8155的A口,同时置第一列线为低电平,其他列线为高电平(即8155的B口为0EFH),延时2ms。
按第一列方式对第二列进行显示,如此下去直至一次显示完成。
其余数字字形编码及显示方式依次类推。
2、开机画面
3、人数统计(人数大于0则显示数目并且LED变亮)
4、人数超过30则显示“OK”
5、短按P1.3复位
6、长按P1.3进入上课状态显示“止”字
7、有人早退显示“×”并且P1.2的LED开始亮
8、短按P1.0进入上课50分钟倒计时
六、心得体会
周子航:作为一名组长,首先表示对自己的一开始的轻敌表示深深的自责。
确实,如果只是按照要求把功能实现出来并不是什么难事,但是如果想做好做到位,把自己学到的东西尽可能的发挥出来,这确实还要查找很多的资料以及整个小组所有成员的共同努力。
另外,分工确实很重要,但是合作也比必不可少。
一开始的各自为战证明是行不通的,而且还会影响组员的积极性问题以及系统的最后整合。
不过最后我们小组还是在要求的基本功能的基础上添加了不少我们能够想到的小功能,虽然算不上高深,但是至少把我所学得到的东西都尽可能的展现出来,更加坚固了自己单片机的基础以及应用能力。
韩振洋:过本次小学期任务的完成,我首先对单片机的原理与编程有了更加深刻的理解与认识。
其次,我在参与编程时对线选法控制的并行I/O接口更加深刻体会,同时也可以更加熟练的找到各个接口地址,还有中断系统与子程序调用系统,我也可以运用的更加娴熟。
但我认为最大的收获是在实物电路中调试时,学到了如何根据实际情况来更改程序和部分电路,如刚开始的程序CLR P1.0,如果不改掉,就会造成当按下复位按键式,造成短路,功能实现不了。
所以,要根据实际电路改变程序和程序要求增加电路部分。
同时感
谢学校提供给我们这次机会来实践单片机,也感谢指导老师不断地鼓舞与支持,在初期,老师给予我们指导和疑难问题的解答,对我们帮助良多。
尤兴权:这次单片机课程设计和我想象中的有点不一样,我本以为要做实物的,最后却只需要一个仿真就够了。
在单片机研究性教学时我选的是时钟,那次我主要负责程序,我想想这次我负责仿真吧,把仿真好好学一下。
在这次做仿真的过程中我发现我学到了不少东西,虽然已经给好了电路图但有很多元器不是在元件库里能够找到的,找起来很费劲。
在最后总算是把仿真做出来了,可发现和程序又有点不兼容,之后不得不对仿真进行修改。
不过总体来说还算顺利。
这次唯一的遗憾就是没哟做实物,我知道不是随便做好仿真,搞懂程序就能把实物做好的,做实物有很多我们无法预知的问题。
在上次单片机研究性教学时我也尝试做实物,结果以失败告终。
这次没给我这个机会,希望下次我能找到一个做实物的机会。
姚雪阳:通过这次实验,我感受很多,最为深刻的是对团队合作的理解和一个团队合作对一个项目的重要性。
在过程调试的时候,我们遇到一些问题,包括仿真,程序等各个方面。
尤其是附加功能一块,起初大家对于附加什么功能都没什么思路,但经过大家的讨论还是逐渐找到思路,最终确定了当教室内人数超过十人时,8*8点
阵LED显示器显示“OK”;早退报警功能;上课倒计时50分钟功能;开机显示“BJTU”四个功能。
还有,在撰写实验报告时,我和组员狄长路精确分工,他负责整理和WORD的应用,我负责文字录入,使得这个过程十分快捷,节省了很多时间。
龚军建:这次单片机的小学期时间很充裕,研究的题目是“教室人数统计”,组长分配给我的任务是和尤兴权一起完成仿真。
电路模拟在平时的单片机实验课中也有涉及,这次正好能利用这个机会试试。
但是发现给定的电路里有好多东西在软件带的元器件库中找不到,所以再在想应该可以用哪些东西来代替,不仅找起来费工费时,还面临着玩不转的风险。
搭档的功底比我深厚得多,我学到了很多知识,在合作下电路得以完成,但是和程序还有矛盾的地方。
程序如果是我单独来读,还不能全部读懂,这也是我的薄弱之处,而这次不要求做出实物,也算得上是个不小的遗憾。
因为实际总和计算有偏差。
狄长路:经过小学期对单片机的学习,对单片机有了一个更深的认识,接触到了更多的知识与实践的机会。
在组内,主要参加了对于程序的设计与报告等的编写工作。
大家在工作中齐心协力,共同努力,一起编写的教师人数调查的程序。
期间出现过很多的问题,比如,LED灯显示出现问题,先后次序出现错误;与电路出现冲突
(阴阳极的选择)。
但是经过大家的讨论,与对资料的查找之后,问题都得到了很好的解决,我们也从中学到了很多的知识
七、参考文献
1、胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2004.2
2、胡汉才. 单片机在电子电路设计中的应用. 北京:清华大学出版社,2006
3、刘波粒.模拟电子技术. 北京: 国防工业出版社, 2006
4、刘法治.常用电子元器件及典型芯片的应用技术.北京:机械工业出版社,2007
八、附件
1、附件1:电路图
2、附件2:源程序
KEY BIT P1.0
KEY1 BIT P1.1
KEY2 BIT P1.2
KEY3 BIT P1.3
ORG 0000H
AJMP MAIN
ORG 0003H;INT0入口地址
LJMP INT0ZHD
ORG 0013H;INT1入口地址
LJMP INT1ZHD
ORG 0060H
MAIN: MOV 20H,#00H;存放人数的单元清零MOV 21H,#00H;人数增减单元清零
MOV 22H,#00H;查表偏移量十位存储单元清零
MOV 23H,#00H;查表偏移量个位存储单元清零
MOV 24H,#00H;倒计时起始值控制单元清零
CLR P1.1;放光二极管控制口P1.1口清零
CLR 2AH;INT0中断标志位清零
CLR KEY2
CLR 2BH;INT1中断标志位清零
CLR 2CH;按键次数奇偶标志位
CLR 2DH;长按键次数奇偶标志位
CLR 2EH;百位标志位清零
MOV R0,#30H;LED行由左至右依次扫描,
;B口所用值存入以30H为首地址的数据块中MOV A,#0FEH
FUZHI: MOV @R0,A
RL A
INC R0
CJNE R0,#38H,FUZHI;循环赋值
MOV DPTR,#0100H;8155工作方式设置
MOV A,#0FH
MOVX @DPTR,A
MOV 10H,#04H ;开机动画显示循环次数
MOV R0,#0AH ;偏移量送入相应单元
START: MOV 22H,R0
INC R0
MOV 23H,R0
LCALL DISPLAY
LCALL YSI
MOV R0,23H
INC R0
DJNZ 10H,START
SETB IT0;中断设置(两个均为负边沿触发)
SETB IT1
MOV IE,#85H;开中断
MOSHI: JNB KEY, JUDGE
AJMP DUANFUWEI
JUDGE:
JNB KEY3,NORESET;判断是否有复位信息,如无则调用显示程序 MOV R4,#05H;延时约1S
YANSHI1: ACALL DELAYT;延时0.205602S
DJNZ R4,YANSHI1
CLR KEY1
JNB KEY3,LOOP5;如按键长按则进入报警程序
AJMP LOOP3
LOOP5: MOV 20H,#00H
MOV 21H,#00H
AJMP XSCHULI
AJMP MOSHI
NORESET: MOV A,20H
JNZ EJG
AJMP EJGT
EJG: SETB P1.1
AJMP XSCHULI
EJGT: CLR P1.1
ACALL DELAY
XSCHULI: MOV A,20H
ADD A,21H
MOV 21H,#00H
MOV 20H,A
CJNE A,#30,NEXT
NEXT: JC PURE
MOV R0,#12H ;偏移量送入相应单元
MOV 22H,R0
INC R0
MOV 23H,R0
LCALL DISPLAY
LCALL YSI
AJMP JUDGE
ZHCHANG: SETB 2EH ;高于99人,百位标志位置一
PURE: MOV R0,A ;十位个位分离
ANL A,#0FH
MOV 23H,A
CJNE A,#0AH,FL1
MOV 23H,#00H
MOV A,R0
ADD A,#10H
MOV R0,A
FL1: CJNE A,#0FH,FL2
MOV 23H,#09H
FL2: MOV A,R0
ANL A,#0F0H
SWAP A
MOV 22H,A
CJNE A,#0AH,FL3
MOV 22H,#00H
SETB 2EH
FL3: CJNE A,#0FH,PU
JNB 2EH,DDD
CLR 2EH
MOV 22H,#09H
SJMP PU
DDD: MOV 22H,#00H
PU: SWAP A
ADD A,23H
MOV 20H,A
ACALL DISPLAY
AJMP MOSHI
DUANFUWEI: MOV 24H,#50H;五十分钟计时赋值 MOV 40H,#3CH;循环60次
MOV A,24H
ANL A,#0F0H
SWAP A
MOV 22H,A
MOV A,24H
ANL A,#0FH
MOV 23H,A
CHONGXIAN1:
ACALL DISPLAY
CHONGXIAN2:
ACALL YSI
DJNZ 40H,CHONGXIAN2;显示一分钟 DEC 23H
MOV R4,23H
CJNE R4,#0FFH,CHONGXIAN1
JB 2EH,THEN
MOV R5,22H
CJNE R5,#00H,THEN
FANHUI: AJMP JUDGE
THEN: MOV 23H,#09H
DEC 22H
MOV R5,22H
CJNE R5,#0FFH,CHONGXIAN1
JNB 2EH,FANHUI
MOV 22H,#09H
CLR 2EH
SJMP CHONGXIAN1
LOOP3:
MOV 22H,#16H
MOV 23H,#17H
ACALL DISPLAY
LCALL YSI
LOOP4: MOV A,21H
JB ACC.0,CHUMEN
SJMP LOOP4
CHUMEN: MOV 22H,#14H
SETB P1.2
MOV 23H,#15H
ACALL DISPLAY
ACALL YSI
CLR KEY2
AJMP JUDGE
;中断响应程序
INT0ZHD: JB 2BH,ZHD01;判断INT1是否已响应
SETB 2AH;中断标志位,用于表示INT0中断已响应
ACALL DELAY
AJMP ZHD02
ZHD01: CLR 2AH
MOV 21H,#0FFH
ZHD02: CLR 2BH
ACALL DELAYT
RETI
INT1ZHD: JB 2AH,ZHD11;判断INT1是否已响应
SETB 2BH;中断标志位,用于表示INT0中断已响应
ACALL DELAY
AJMP ZHD12
ZHD11: CLR 2BH
MOV 21H,#01H
ZHD12: CLR 2AH
ACALL DELAYT
RETI
;以下为显示程序
DISPLAY: JNB 2EH,DISNEXT3;判断是否需要显示高位 MOV R0,#41H
MOV A,#01H
MOV 45H,#04H
MOV B,#04H
MUL AB
MOV 22H,A
MOV DPTR,#TABLE
LOOP: MOV A,22H
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ 45H,LOOP
MOV R2,#04H
MOV R1,#41H
ACALL SHOW1
DISNEXT3: MOV R0,#50H
MOV DPTR,#TABLE
MOV A,22H
MOV B,#04H
ACALL CHABIAO
MOV A,23H
MOV DPTR,#TABLE
MOV B,#04H
ACALL CHABIAO
MOV R2,#08H
MOV R1,#57H
SHOW1: MOV R0,#30H;行扫描数据地址
SHOW: MOV DPTR,#0102H
MOV A,@R0
MOVX @DPTR,A;行扫描所用数据送入B口
DEC DPL
MOV A,@R1
MOVX @DPTR,A; 列数据送入A口
MOV R5,#02H; 延时2ms
YANSHI5: ACALL DELAY
DJNZ R5,YANSHI5
INC R0
DEC R1
DJNZ R2,SHOW
RET
;以下利用位操作的方法进行1S的延时。
应用该方法的好处在于;避免了常规延时中所用R0与显示程序中的Rn之间的冲突。
同时
;可在延时程序中插入显示程序使显示图形稳定
YSI: MOV 28H,#01H;延时1.019840s
DL0: MOV 27H,#01H
DL1: MOV 26H,#01H;
DL2: INC 26H
JNB 37H,DL2;127*2=254微秒
INC 27H
ACALL DISPLAY;8272微秒
JNB 3AH,DL1;3*8280=24760
INC 28H
JNB 45H,DL0;31*24765=767715
RET
;以下为查表程序
CHABIAO: MOV 45H,#04H MUL AB
MOV 11H,A LOOP1: MOV A,11H
MOVC A,@A+DPTR MOV @R0,A
INC R0
INC DPTR
DJNZ 45H,LOOP1 RET
TABLE: DB 3EH,41H,41H,3EH;0
DB 00H,42H,7FH,40H;1
DB 72H,49H,41H,46H;2
DB 22H,49H,49H,36H;3
DB 38H,26H,7FH,20H;4
DB 4EH,49H,49H,31H;5
DB 7EH,49H,49H,72H;6
DB 03H,79H,05H,03H;7
DB 36H,49H,49H,36H;8
DB 26H,49H,49H,3EH;9
DB 00H,7FH,49H,49H;
DB 49H,49H,49H,36H;
DB 00H,00H,41H,81H;
DB 7FH,01H,01H,00H;
DB 00H,01H,01H,01H;
DB 7FH,01H,01H,01H;
DB 00H,7FH,80H,80H;
DB 80H,80H,7FH,00H;
DB 7EH,42H,42H,7EH;
DB 7EH,08H,34H,42H;
DB 81H,62H,26H,18H;
DB 18H,26H,62H,81H;
DB 00H,40H,78H,40H;
DB 7EH,48H,40H,00H;
DELAY: MOV R7,#02H;延时1.028ms DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
DELAYT: MOV R5,#0C8H;延时0.205602S DELAYT0: ACALL DELAY
DJNZ R5,DELAYT0
RET
END
3、附件3:会议纪要。