微机原理与接口技术
课程设计说明书课程名称:微机原理与接口技术综合实验
设计题目:教室人数统计系统(第68组)
院系:机械与电子控制工程学院
班级:
设计者:
指导教师:
实验设计时间:
机电学院《微机原理与接口技术》课程设计任务书
设计要求:扩展两个光电传感器和一块8*8点阵LED显示器,控制系统需要实现:
1.检测教室里的人数。并在8*8点阵LED显示器显示出来;
2.设置一个按键实现复位清零。
3.用发光二极管模拟电灯,当教室有人时,发光二极管发光,无人时发
光二极管不发光。
4.
工作计划安排:
在初期大体上我们组细化为五个部分
1.对硬件器材的学习与认识
2.硬件电路板的焊接
3.程序设计与调试
4.系统软硬件知识的综合学习与研究
5.试验总结及实验报告的书写
我组组员工作的具体分工如下
卢航:主程序设计与过程调试
张沈汇:显示程序设计与过程调试
李明华、森达:辅助程序设计及过程调试
金晓东、郑斌:实验报告的撰写及程序设计调试
在本次实验中,我组齐心协力,共同研究与学习,虽各有分工,但又互相帮助,互相学习。做到每一个人各有侧重点的同时,又对总体的每一步有所参与,对总体的设计与调试都有所掌握。
目录
一,系统基本功能和实施方案(第4页)
二,设计思路及硬件部分(第4-8页)
三,程序流程图(第9-11页)
四,系统制作过程及结果(第11-12页)
五,调试程序(第12-15页)
六,心得体会(第15-16页)
七,参考文献
一、系统基本功能和实施方案
1、设计目的:
如果在进自习室前就能知道教室里有多少人,是否满员,而不用推门进去才知道,将会节省自习同学的很多时间,同时也节省管理人员的很多时间,带来很大的方便,不会更多的影响自习的同学。因此我们小组选择了设计这个教室人数统计系统,利用51单片机系统和两个光电对管器件统计教室进出的人数,最后把教师当前人数显示在一个8*8LED显示器上,方便想要自习的同学选择教室,以及管理人员的管理工作。
2、基本功能的实施方案:
模拟教室人员的进出,在出入口安装两个光电对管GK102,分别G1和G2;一块8*8LED显示教室目前人数;一个发光二极管显示教室人数是否为零;还有一个复位按键显示器清零。当有人进去时,先响应G1,后响应G2,此时将人数加一并显示出来;当有人出去时,先响应G2,后响应G1,此时将人数减一并显示出来。如果人数为零则发光二极管熄灭。如检测到复位按键按下则熄灭发光二极管,同时将人数变成零并显示出来。
二、1)设计思路
本程序分主程序、两中断程序、显示子程序与延时子程序四部分。
各部分功能如下:
1、主程序:
主程序完成相应存储单元和标志位的清零、8155的设置、开机界面显示、中断设置、对按键按下方式的检测和处理等工作。
按键按下方式及系统相应完成的功能如下:
系统起始功能:显示教室中人数并根据人数控制发光二极管亮灭。
2、中断程序:
两中断程序分别对人数增减标志位(R0)进行赋1和-1的操作。两中断响应先后决定对人数增减标志位(R2)进行赋1还是-1。具体实现方式为:在一个中断程序中加入对另一中断是否响应的判断。如另一中断没有响应,则进行赋1或-1的操作。
3、显示子程序:
显示子程序采用定行值,扫描列值的方法。具体见8*8LED原理的介绍。4、延时子程序:(一个)
本程序中有两个延时子程序,分别完成2ms的延时。
以上各部分程序的具体实现方式见程序流程图和源程序。
2)硬件部分
系统电路原理图:
主体元件工作原理如下:
1、8*8 点阵LED的工作原理:
图(1)为8×8点阵LED外观及引脚图,其等效电路如图(2)所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。
图1:8×8点阵LED外观及引脚图
图2:8×8点阵LED等效电路
图3:8×8点阵LED电路原理
点阵LED扫描法介绍
点阵LED一般采用扫描式显示,实际运用分为三种方式:
(1)点扫描;
(2)行扫描;
(3)列扫描。
若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。
若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms 即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。如图3所示。
本程序采用第三种方式。其对应的字形编码如下:
如下图所示,假设显示数字“00”
1 2 3 4 5 6 7 8
7CH 82H 82H 7CH 7CH 82H 82H 7CH
送显示代码过程如下所示:
送第一列线代码到P0端口,同时置P3端口第一列线P3.0为“0”,P3口的其它列线为“1”,延时2ms左右。
送第二列线代码到P0端口,同时置P3端口第二行线P3.1为“0”,P3口的其它列线为“1”,延时2ms左右。
如此下去,在显示完十位后,接着扫描显示个位,直到送完最后一列代码,又从头开始送。
同理可得“0”到“9”的字形代码。如:
DB 7CH,82H,82H,7CH;
DB 00H,42H,0FEH,02H;
DB 4EH,92H,82H,62H;
DB 44H,92H,92H,4CH;
DB 18H,28,0FEH,08H;
DB 0F2H,92H,92H,4CH;
DB 7CH,92H,92H,4CH;
DB 0C0H,80H,0BEH,0C0H;
DB 6CH,92H,92H,6CH;
DB 64H,92H,92H,7CH;
三、流程图
四、系统制作过程及结果
1、制作过程
(1)电路板的焊接:直接用的是成品 (2)程序编写:
在所有组员都懂得程序原理的前期下,为尽早完成任务,我们将程序分为主
体部分和细节部分两个方面分别由不同人员进行编写。其中主体部分由组长及卢航编写。细节部分由其他组员共同编写。
2.调试结果:
本系统完成了所有的基本功能并扩展了部分功能,具体总结如下:
a 检测教室里的人数并在8*8点阵LED显示器显示出来;
b 设置一个按键实现复位清零。
C用发光二极管模拟电灯,当教室有人时,发光二极管发光,无人时发光二极管不发光。
本系统存在的问题:有时反应不灵敏
五、调试程序
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP PINT0
ORG 0013H
AJMP PINT1
ORG 0100H
MAIN: ACALL FUWEI ;复位
SETB EA ;开所有中断
SETB PX0 ;令INT0中断为高优先级
SETB PX1 ;令INT1中断为高优先级
SETB IT0 ;令INT0中断为负边沿触发
SETB IT1 ;令INT1中断为负边沿触发
SETB EX0 ;开INTO中断
SETB EX1 ;开INT1中断
LOOP: JNB P1.0,DONE ;扫描P1.0电平,判断是否复位
ACALL FUWEI ;若P1.0为高电平,调用复位程序
DONE: ACALL FB ;调用分半程序,将要显示的两位数分离
ACALL XS ;调用显示程序,显示人数
SJMP LOOP ;返回LOOP,循环扫描、显示
;显示程序
XS: MOV DPTR, #0100H ;8155命令口地址送DPTR
MOV A, #03H ;方式控制字送A
MOVX @DPTR,A ;方式控制字送8155命令口
CLR C ;清除标志位cy
CJNE R2,#10,FULL ;R2和10比较,判断是否人满,并形成标志位cy FULL: JC XS0 ;人数少与10人,则显示人数
MOV R0,#72H ;人数等于或超过10人,显示人满标志符号X
MOV 72H,#0AH ;人满标志符号字形码送显示缓冲区
MOV 73H,#0BH
AJMP XS1
XS0: MOV R0,#70H ;显示缓冲区起始地址送R0
XS1: MOV R4,#0FEH ;字位码始值送R4
ACALL XSZ ;嵌套调用显示子程序,显示十位数
INC R0 ;修正显示缓冲区指针,指向71H单元地址
ACALL XSZ ;嵌套调用显示子程序,显示个位数
RET ;返回主程序
;显示子程序
XSZ: MOV R3,#04H ;循环控制量始值送R3
MOV A,@R0 ;显示缓冲区中的数送A
RL A ;A中值扩大两倍
RL A ;A中值再扩大两倍
MOV R5,A ;偏移量修正值送R5,暂存
LP: MOV A,R5
INC R5 ;修正偏移量
MOV DPTR,#ZXTB ;字形码表格地址送DPTR
MOVC A,@A+DPTR ;查表得字形码
MOV DPTR,#0101H ;A口地址送DPTR
MOVX @DPTR,A ;字形码送A口
INC DPTR ;B口地址送DPTR
MOV A,R4 ;字位码送A
MOVX @DPTR,A ;字位码送B口
RL A ;字位码左移一位
MOV R4,A ;字位码暂存在R4
ACALL DL ;延时1ms
DJNZ R3,LP ;显示下一个数码
RET
ZXTB: DB 0C1H,0BEH,0BEH,0C1H ;字形表
DB 0FFH,0BDH,080H,0BFH
DB 8DH,0B6H,0B6H,0B9H
DB 0DDH,0B6H,0B6H,0C9H
DB 0F3H,0F5H,80H,0F7H
DB 0B0H,0B6H,0B6H,0CEH
DB 0C1H,0B6H,0B6H,0CDH
DB 0FCH,0FEH,82H,0FCH
DB 0C9H,0B6H,0B6H,0C9H
DB 0D9H,0B6H,0B6H,0C1H
DB 0BEH,0DDH,0EBH,0F7H ;人满了,显示X
DB 0F7H,0EBH,0DDH,0BEH
;延时程序
DL: MOV R7,#02H ;大循环控制量初值送R7
DL1: MOV R6,#0FFH ;小循环控制量初值送R6
DL2: DJNZ R6,DL2 ;未完成则DL2,否则跳出小循环
DJNZ R7,DL1 ;未完成则DL1,否则跳出大循环
RET
;分半程序
FB: MOV R0, #70H ;R0指向70H单元地址
MOV A, R2 ;人数送A
MOV B, #0AH ;除数10送B
DIV AB ;人数的十位数送A,个位数送B
MOV @R0, A ;十位数送显示缓冲区70H地址单元
MOV A, B ;个位数送A
INC R0 ;修正缓冲区指针,指向71H单元地址
MOV @R0, A ;个位数送显示缓冲区71H地址单元
RET
;复位程序
FUWEI: MOV R2, #00H ;人数清零
CLR 7EH ;INTO中断响应标志置“0”
CLR 7FH ;INT1中断响应标志置“0”
CLR P1.1 ;小灯熄灭
RET
;INT0中断子程序
PINT0: JB 7FH, DCR2 ;若INT1响应标志为1,人数减一
JB 7EH, CLR7E ;若INT0响应标志为1,将其置“0”
SETB 7EH ;若INT0、INT1响应标志均为0,则将INT0响应标志置“1”
RETI
DCR2: DEC R2 ;人数减一
CJNE R2,#0FFH,NETT1
ACALL RSET ;人数为255(-1)时,复位
NEXTT1: CLR C ;cy标志清零
CJNE R2,#00H,NEXT ;若人数大于零,NEXT
CLR P1.1 ;若人数为零,小灯熄灭
NEXT: CLR 7FH ;将INT1响应标志置“0”
CLR7E: CLR 7EH ;将INT0响应标志置“0”
RETI
;INT1中断子程序
PINT1: JB 7EH, INCR2 ;若INT0响应标志为1,人数加一
JB 7FH, CLR7F ;若INT1响应标志为1,将其置“0”
SETB 7FH ;若INT0、INT1响应标志均为0,则将INT1响应标志置“1”
RETI ;返回主程序
INCR2: INC R2 ;人数加一
SETB P1.1 ;小灯亮
CLR 7EH ;将INT0响应标志置“0”
CLR7F :CLR 7FH ;将INT1响应标志置“0”
RETI ;中断返回
END
六、心得体会:
我们所实践的这门课,使我们机电类本科生教学的主要基础课之一,课程紧密结合机电大类专业特点,围绕单片机原理和应用主题,系统介绍单片机的基本知识,基本组成,体系结构和工作模式等,从而让我们能清楚地了单片机的结构与工作流程,建立起系统的概念,为以后的更深层次的研究打下坚实基础。
这次微机原理课程设计历时约十天完成,在这些天里,我们发扬团队合作的精神,共同克服了很多难题,在较长的时间里成功完成了本次实验,看着我们的劳动成果,我们每个人都觉得自己的付出得到了回报。虽然很累,但可以说得是苦多于甜,真理源于实践,用在这里似乎有些张扬,但此刻,我们的感受却很相似,在这段时间里,我们通过自己亲自动手去操作,主动去思考,去解决现实的问题,我们获得了很多,学到了很多。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。以前在上课的时候,把老师的种种忠告抛之脑后,而在本次实践中,我们才体会到有些在上课不曾注意过的东西在现实中是多么重要,就比如说老师经常强调在写一个程序的时候,一定要事先把程序总体原理方框图化出来,但是我开始总觉得这样做没必要,而且浪费时间,但是,这次课程设计完全改变了我以前的那种错误的认识。还有就是,老师曾强调程序的格式,以及程序的细节符号等,由于以前我接触的那些程序都是很短、很基本的东西,所以出错了很容易检查并对其进行修改,但是在课程设计中,一个程序那么长,那么繁琐,出错之后需要费很大的努力才能校正,这就需要我们对其更加认真与仔细!
以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,就比如在这次实践中,我们部分同学虽然对理论掌握得很不错,但在开始那段时间还是不能得心应手地进行设计与实践,这就是实践与理论的联系的过程,我们体会到了所谓的“纸上谈兵”,因此只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,
这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过本次课程设计,我们能够更深层次地了解和掌握单片机的基本知识和基本的编写程序,也更加深入地了解单片机这么课程,掌握汇编语言的设计和调试方法,熟悉设计的流程及程序的组合、调用和系统的调试。总之,我们默对单片机的应用有所了解,这对我们以后的研究与学习会有很大帮助!
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师以及学长的指导下,我们最终得到了很好的解决方案。在此,我代表我组所有成员,感谢老师的指导与帮助,我们会更加努力地的去学习工作!
七、
参考文献
1、胡汉才《单片机原理及其接口技术》北京:清华大学出版社 2004.2
2、胡汉才《单片机在电子电路设计中的应用》北京:清华大学出版社 2006
3、赵嘉蔚张家栋霍凯肖燕彩《单片机原理与接口技术》北京:清华大学出版2010