第一篇:单片机课设--八路抢答器
河南理工大学本科课程设计
智力竞赛抢答器
摘要
设计要求:1)能容许2-8组进行抢答。2)能显示抢答组号。3)各组记分,并能记分显示。4)比赛结束时,能发出报警声。硬件系统设计
1)控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其中单片机AT89C51是系统工作的核心,它主要负责控制各个部分协调工作.2)硬件组成及所需元件:该系统的核心器件是AT89C51。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振X1、电容C1、C2、C3、电阻RP1。P3.0和P3.1由裁判控制,分别是抢答停止和开始键。P1.0-P1.7是8组抢答的输入口, P2.0--P2.3口为数码管的段选口,位选口用的是P0.0--P0.6口输出,外部中断0、1和P3.3,P3.4为抢答记时调整口,实现的对个队进行计时,并且加减调整,外部中断0,1实现了答题时间调整.P3.4 P3.5分别实现了时间的加一和减一.P3.6为蜂鸣器的控制口。
控制系统防真用到了伟福软件,集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。系统仿真还用到了PROTUCE软件,可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助.河南理工大学本科课程设计
目录 概述..................................................................................................................3 系统总体方案及硬件计............................................................................4
2.1控制系统及所需元件组成..........................................................................4 2.2实验原理.......................................................................................................4 软件设计.........................................................................................................8.Proteus软件仿真.......................................................................................12
4.1伟福软件......................................................................................................12 4.2在Proteus软件............................................................................................12
5心得体会...........................................................................................................19
参考文献................................................................................................................20
附1:源程序代码.............................................................................................21 附2:计算器模拟系统电图.........................................................................30
河南理工大学本科课程设计
概述
《单片机原理及应用技术》是一门技术性,应用性、实践性很强的学科。课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的和任务就是配合单片机的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。在实际生活中有好多地方都用到了单片机,因此学习好这门课程有着十分重要的意义。
要求的模拟的抢答器:1)能容许2-8组进行抢答。2)能显示抢答组号。3)各组记分,并能记分显示。4)比赛结束时,能发出报警声。
硬件系统设计
1)控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其中单片机AT89C51是系统工作的核心,它主要负责控制各个部分协调工作.2)硬件组成及所需元件:该系统的核心器件是AT89C51。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振X1、电容C1、C2、C3、电阻RP1。P3.0和P3.1由裁判控制,分别是抢答停止和开始键。P1.0-P1.7是8组抢答的输入口, P2.0--P2.3口为数码管的段选口,位选口用的是P0.0--P0.6口输出,外部中断0、1和P3.3,P3.4为抢答记时调整口,实现的对个队进行计时,并且加减调整,外部中断0,1实现了答题时间调整.P3.4 P3.5分别实现了时间的加一和减一.P3.6为蜂鸣器的控制口。
控制系统防真用到了伟福软件,集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。系统仿真还用到了PROTUCE软件,可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助.河南理工大学本科课程设计
2系统总体方案及硬件计
1:控制系统及所需元件
控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其中单片机AT89C51是系统工作的核心,它主要负责控制各个部分协调工作.所需元件:该系统的核心器件是AT89C51。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振X1、电容C1、C2、C3、电阻RP1、P3.0和P3.1由裁判控制,分别是抢答停止和开始键。P1.0-P1.7是8组抢答的输入口, P2.0--P2.3口为数码管的段选口,位选口用的是P0.0--P0.6口输出,外部中断0、1和P3.3,P3.4为抢答记时调整口,实现的对个队进行计时,并且加减调整,外部中断0,1实现了答题时间调整.P3.4 P3.5分别实现了时间的加一和减一.P3.6为蜂鸣器的控制口。2:实验原理
智力竞赛抢答器用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成, 采用单片机AT89C51,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。该智力竞赛抢答器的准确度很高,其误差主要由晶振自身的误差所造成。
AT89C51单片机由微处理器,存储器,I/O口以及特殊功能寄存器SFR等部分构成。其存储器在物理上设计成程序存储器和数据存储器两个独立的空间,片内程序存储器的容量为4KB,片内数据存储器为128个字节。89C51单片机有4个8位的并行I/O口:P0口,P1口,P2口和P3口。各个接口均由接口锁存器,输出驱动器,和输入缓冲器组成。P1口是唯一的单功能口,仅能用作通用的数据输入/输出口。P3口是双功能口除了具有数据输入/输出功能外,每条接口还具有不同的第二功能,如P3.0是串行输入口线,P3.1口是串行输出口线。在需要外部程序存储器和数据存储器扩展时,P0可作为分时复用的低8位地址/数据总线,P2口可作为高8位的地址总线。P3口也可作为AT89C51的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号。
AT89C51的管脚图:
河南理工大学本科课程设计
外部振荡电路单片机必须在AT89C51的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元。外部振荡电路见图一
(图一)
外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。硬件复位后的各状态可知寄存器及存储器的值都恢复到了 4
河南理工大学本科课程设计
初始值,应为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位。只能用软复位。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程。复位电路采用图二所示:
外部还接有蜂鸣器(由于缺少驱动器,发生器不响,所以,用绿灯换了)用来发出报警音,其图形如下:
采用七段码7SEG-MPX4-CC 显示,它是共阴极的由高电平点亮。图形如下:
河南理工大学本科课程设计
采用八个BUTTON按钮作为抢答的选择按键如图所示:
河南理工大学本科课程设计
3软件系统设计
智力竞赛抢答器要求有计时记忆功能,一次时间设置完, 复位后不需重新进行时间设定,通过键盘扫描输出按键信息,再通过单片机将它转换成能在七段数码管上显示字型码.当抢答完毕时,会在数码管上显示抢答者数字号码提示以表示抢答成功.同时显示其分数,分数的加减可由裁判手动进行.采用独立式键盘,可实现8路抢答.在显示时使用的是七段数码管显示在本设计中根据实际情况采用的是动态显示方法.并通过查表法 将其在数码管上显示出来,其中P1口为字型码输入端,P2口低6位为字选段输入端.通过查表将字型码送给7段数码管显示的数字。软件去抖动,如果“开始键”按下就向下执行,否者跳到开始。采用倒计时程序,使其具有倒计时功能。回答倒计时30秒。抢答时间5秒。采用发声警报(由于发生器不响,所以,用绿灯换了),起到报警作用。
1、如果想调节抢答时间或答题时间,按“抢答时间调节”键或“答题时间调节”键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下“加1s”键,如果想减一秒按一下“-1s”键,时间LED上会显示改变后的时间,调整范围为0s~99s, 0s时再减1s会跳到99,99s时再加1s会变到0s。主持人按“抢答开始”键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设60s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。倒数时间到小于5s会每秒响一下提示音。
如倒计时期间,主持人想停止倒计时可以随时按“停止”按键,系统会自动进入准备状态,等待主持人按“抢答开始”进入下次抢答计时。
4、如果主持人未按“抢答开始”键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下“停止” 键为止。
5、P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入 数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。P3.2抢答时间调整结,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
河南理工大学本科课程设计
下面是部分功能程序(附部分说明):;=====查询程序===== START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH ACALL DISPLAY;未开始抢答时候显示FFF JB P3.0,NEXT;ddddddd ACALL DELAY JB P3.0,NEXT;去抖动,如果“开始键”按下就向下执行,否者跳到非法抢答查询
ACALL BARK;按键发声 MOV A,R1 MOV R6,A;送R1->R6,因为R1中保存了抢答时间
SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答
MOV R7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号 MOV R3,#0AH;抢答只显示计时,灭号数
AJMP COUNT;进入倒计时程序,“查询有效抢答的程序”在COUNT里面 NEXT: JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,FALSE3 JNB P1.3,FALSE4 JNB P1.4,FALSE5 JNB P1.5,FALSE6 JNB P1.6,FALSE7 JNB P1.7,FALSE8 AJMP START;=====INT0(抢答时间R1调整程序)===== INT0SUB:MOV A,R1 MOV B,#0AH DIV AB MOV R5,A 8
河南理工大学本科课程设计
MOV R4,B MOV R3,#0AH ACALL DISPLAY;先在两个时间LED上显示R1 JNB P3.4,INC0;P3.4为+1s键,如按下跳到INCO JNB P3.5,DEC0;P3.5为-1s键,如按下跳到DECO JNB P3.1,BACK0;P3.1为确定键,如按下跳到BACKO AJMP INT0SUB INC0: MOV A,R1 CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。MOV R1,#00H ACALL DELAY1 AJMP INT0SUB ADD0: INC R1 ACALL DELAY1 AJMP INT0SUB DEC0: MOV A,R1 JZ SETR1;如果R1为0, R1就置99,DEC R1 ACALL DELAY1 AJMP INT0SUB SETR1: MOV R1,#63H ACALL DELAY1 AJMP INT0SUB BACK0: RETI;=====读抢答按键数据口程序=====;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性 AAAA1: MOV A,P1 9
河南理工大学本科课程设计
CJNE A,#0FFH,AA1;当不全为1时的数据为有效数据 AA0: MOV 36H,A;将有效数据送到36H暂存 AJMP LOOP2 AA1: DEC R7 AJMP AA0;=====发声程序===== BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING;按键发声 RET;=====TO溢出中断(响铃程序)===== T0INT: MOV TH0,#0ECH MOV TL0,#0FFH JNB RING,OUT;CPL P3.6;RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音
OUT: RETI;=====T1溢出中断(计时程序)===== T1INT: MOV TH1,#3CH MOV TL1,#0B0H INC R0 RETI END
河南理工大学本科课程设计 系统仿真
1:伟福软件
用到了伟福软件,集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。用于对程序的调试和编辑。
其界面如下:
2:PROTUCE软件
系统仿真还用到了PROTUCE软件,可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助.系统仿真时首先要在使用伟福编译器,把所写的程序进行编译,同时在仿真器里设置生成HEX文件,编译无错误时进行PROTUCE仿真。首先要新建一个文档是
河南理工大学本科课程设计
DNS型的找出需要的器件,可以使用搜索功能。接着把各个器件放到合适的位置都要放到蓝色框内。然后根据自己的设计要求连线。等所有的元件都连接完成后可以把,伟福编译生成的无错误文件加载到AT89C51中,方法是,右键点中器件然后在用左键点击,出来一个对话框在program file后选择要添加文件,文件要求必须是HEX文件。然后可以点击运行观察现象,看与自己设置的符合否,如果不相符在查找错误进行修改,一般的错误都是程序中的,所以要认真的读取程序的每一个部分
作好的PROTUCE图:
河南理工大学本科课程设计
六号抢答到时时的显示图:
河南理工大学本科课程设计
使用加法调整时的图:
减法调整图:
河南理工大学本科课程设计
倒计时到30秒时的显示图:
河南理工大学本科课程设计
倒计时还有5秒时的报警显示图: 提示灯会呈闪亮状:
河南理工大学本科课程设计
河南理工大学本科课程设计
5心得体会
单片机课程设计是一门很实用,很难的设计。这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。
完成本次课程设计的过程,是一个从无到有的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。刚做做课程设计时,仔细阅读设计的题目和要求,以为没什么困难的,所用的知识书上都有。可是当我动手开始做的时候,才发现其中的算法,设计是那么繁琐。经过一天的努力,毫无结果。失落的心情油然而生。于是,再到图书馆和网上查找资料,在经过借鉴很多类似的资料,文献后,总算是有点眉目了。埋头苦干的过程是痛苦的,尤其是在思考算法和程序框架时,迷茫,烦躁,特别是当苦思出来一个结果,又被自己推翻,心痛的无法言绘。在痛苦中挣扎,建立,推翻,参考别人的思路,建立,再次在推翻,在这不断循环中,终于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知领域”的困难。但当课程设计完成时,那感觉是甜蜜的,没有耕耘,哪来得收获的喜悦,不懂付出怎么能知道回报的快乐,一分耕耘一分收获,有付出才会有回报,就在这样的痛与快乐的交换中,我学到了知识,学到了做人的道理。
通过这短短一周的实践,我感觉到自己从课本上学到的理论知识和实践仍有很大的差距。最少很多元器件根本不知道有什么功效,在仿真仪器中是什么代码。有的知识,自己感觉已经掌握得差不多了,但是实际操作起来就有问题出现了。我遇到了不少问题,花费了很多的时间。这让我重新反思我们的学习,深刻领悟到我们这个专业动手,实践的重要性。理论不经过实践考验,是没法实施的,就像我们编的程序,很多方面考虑的都不够,几乎没有涉及到实际应用时的防范方法措施。
这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。最大的收获是:对键盘,显示器,C51语言(虽然最后还是用汇编语言编写的,但是,我也试着学用了C51)的应用有了深刻的了解。
河南理工大学本科课程设计
6参考文献
中国矿业大学出版社《单片机原理及应用技术》 主编 余发山
国防工业出版社《单片微型计算机接口技术及其应用》 主编 张淑清等
北京航空航天大学出版社《单片机课程设计实例指导》 李光飞 楼然苗 胡佳文编著
http:///bbs.html网站上的资料等
谢象佐19
河南理工大学本科课程设计
附1:源程序代码
OK EQU 20H;抢答开始标志位
RING EQU 22H;响铃标志位
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT0SUB
ORG 000BH
AJMP T0INT
ORG 0013H
AJMP INT1SUB
ORG 001BH
AJMP T1INT
ORG 0040H MAIN:
MOV R1,#30;初设抢答时间为30s
MOV R2,#60;初设答题时间为60s
MOV TMOD,#11H;设置未定时器/模式1
MOV TH0,#0F0H
MOV TL0,#0FFH;越高发声频率越高,越尖
MOV TH1,#3CH
MOV TL1,#0B0H;50ms为一次溢出中断
SETB EA
SETB ET0
SETB ET1 SETB EX0 SETB EX1;允许四个中断,T0/T1/INT0/INT1
CLR OK CLR RING
SETB TR1
SETB TR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
;=====查询程序===== START:
MOV R5,#0BH
MOV R4,#0BH
MOV R3,#0BH
河南理工大学本科课程设计
ACALL DISPLAY;未开始抢答时候显示FFF
JB P3.0,NEXT;ddddddd
ACALL DELAY
JB P3.0,NEXT;去抖动,如果“开始键”按下就向下执行,否者跳到非法抢答查询
ACALL BARK;按键发声
MOV A,R1
MOV R6,A;送R1->R6,因为R1中保存了抢答时间
SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答
MOV R7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号
MOV R3,#0AH;抢答只显示计时,灭号数
AJMP COUNT;进入倒计时程序,“查询有效抢答的程序”在COUNT里面 NEXT:
JNB P1.0,FALSE1
JNB P1.1,FALSE2
JNB P1.2,FALSE3
JNB P1.3,FALSE4
JNB P1.4,FALSE5
JNB P1.5,FALSE6
JNB P1.6,FALSE7
JNB P1.7,FALSE8
AJMP START;=====非法抢答处理程序===== FALSE1: MOV R3,#01H
AJMP ERROR FALSE2: MOV R3,#02H
AJMP ERROR FALSE3: MOV R3,#03H
AJMP ERROR FALSE4: MOV R3,#04H
AJMP ERROR FALSE5: MOV R3,#05H
AJMP ERROR FALSE6: MOV R3,#06H
AJMP ERROR FALSE7: MOV R3,#07H
AJMP ERROR FALSE8: MOV R3,#08H
AJMP ERROR;=====INT0(抢答时间R1调整程序)===== 21
河南理工大学本科课程设计
INT0SUB:MOV A,R1
MOV B,#0AH
DIV AB
MOV R5,A
MOV R4,B
MOV R3,#0AH
ACALL DISPLAY;先在两个时间LED上显示R1
JNB P3.4,INC0;P3.4为+1s键,如按下跳到INCO
JNB P3.5,DEC0;P3.5为-1s键,如按下跳到DECO
JNB P3.1,BACK0;P3.1为确定键,如按下跳到BACKO
AJMP INT0SUB INC0:
MOV A,R1 CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOV R1,#00H
ACALL DELAY1 AJMP INT0SUB ADD0:
INC R1
ACALL DELAY1
AJMP INT0SUB DEC0:
MOV A,R1
JZ SETR1;如果R1为0, R1就置99,DEC R1
ACALL DELAY1
AJMP INT0SUB SETR1: MOV R1,#63H
ACALL DELAY1
AJMP INT0SUB BACK0: RETI
;=====INT1(回答时间R2调整程序)===== INT1SUB:MOV A,R2
MOV B,#0AH
DIV AB MOV R5,A
MOV R4,B
MOV R3,#0AH
ACALL DISPLAY
JNB P3.4,INC1
JNB P3.5,DEC1 22
河南理工大学本科课程设计
JNB P3.1,BACK1
AJMP INT1SUB INC1:
MOV A,R2
CJNE A,#63H,ADD1
MOV R2,#00H
ACALL DELAY1 AJMP INT1SUB ADD1:
INC R2
ACALL DELAY1
AJMP INT1SUB DEC1:
MOV A,R2
JZ SETR2
DEC R2
ACALL DELAY1
AJMP INT1SUB SETR2: MOV R2,#63H
ACALL DELAY1
AJMP INT1SUB BACK1: RETI
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)===== REPEAT:MOV A,R2
;使用锦囊时重新计时
MOV R6,A
CLR RING
COUNT: MOV R0,#00H;重置定时器中断次数
MOV TH1,#3CH
MOV TL1,#0B0H;重置定时器
RECOUNT:MOV A,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6
MOV B,#0AH
DIV AB;除十分出个位/十位
MOV 30H,A;十位存于(30H)
MOV 31H,B;个位存于(31H)
MOV R5,30H;取十位
MOV R4,31H;取个位
MOV A,R6
SUBB A,#07H
JNC LARGER;大于5s跳到LARGER,小于等于5s会提醒
MOV A,R0
CJNE A,#0AH,FULL;1s中0.5s向下运行
河南理工大学本科课程设计
CLR RING
AJMP CHECK FULL:
CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计
SETB RING
MOV A,R6
JZ QUIT;计时完毕
MOV R0,#00H
DEC R6;一秒标志减1
AJMP CHECK LARGER: MOV A,R0
CJNE A,#14H,CHECK;如果1s向下运行,否者跳到查“停/显示”
DEC R6;计时一秒R6自动减1
MOV R0,#00H CHECK: JNB P3.1,QUIT;如按下停止键退出
JNB OK,CHECKK
;只在回答倒计时才有效
AJMP NEXTT CHECKK:JNB P3.0,REPEAT
;判断是否使用锦囊 NEXTT: ACALL DISPLAY
JB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMP RECOUNT ACCOUT:
MOV A,36H
JNB ACC.0,TRUE1
JNB ACC.1,TRUE2
JNB ACC.2,TRUE3
JNB ACC.3,TRUE4
JNB ACC.4,TRUE5
JNB ACC.5,TRUE6
JNB ACC.6,TZ1
JNB ACC.7,TZ2
AJMP RECOUNT TZ1:JMP TRUE7 TZ2:JMP TRUE8
QUIT: CLR OK;如果按下了“停止键”执行的程序
CLR RING
AJMP START;=====正常抢答处理程序===== 24
河南理工大学本科课程设计
TRUE1: ACALL BARK
MOV A,R2
MOV R6,A;抢答时间R2送R6
MOV R3,#01H
CLR OK;因为答题的计时不再查询抢答,所以就锁了抢答
AJMP COUNT TRUE2:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#02H
CLR OK
AJMP COUNT TRUE3:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#03H
CLR OK
AJMP COUNT TRUE4:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#04H
CLR OK
AJMP COUNT TRUE5:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#05H
CLR OK
AJMP COUNT TRUE6: ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#06H
CLR OK
AJMP COUNT TRUE7:ACALL BARK
MOV A,R2 25
河南理工大学本科课程设计
MOV R6,A
MOV R3,#07H
CLR OK
AJMP COUNT TRUE8:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#08H
CLR OK
AJMP COUNT;=====犯规抢答程序===== ERROR: MOV R0,#00H
MOV TH1,#3CH
MOV TL1,#0B0H
MOV 34H,R3;犯规号数暂存与(34H)HERE:
MOV A,R0
CJNE A,#06H,FLASH;0.3s向下运行->灭并停响
CLR RING
MOV R3,#0AH
MOV R4,#0AH
MOV R5,#0AH;三灯全灭
AJMP CHECK1 FLASH: CJNE A,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清R0,重新计
SETB RING
MOV R0,#00H
MOV R3,34H;取回号数
MOV R5,#0BH
MOV R4,#0BH;显示FF和号数
AJMP CHECK1 CHECK1: JNB P3.1,QUIT1
ACALL DISPLAY
AJMP HERE QUIT1: CLR RING
CLR OK
AJMP START;=====显示程序===== DISPLAY:MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出, 26
河南理工大学本科课程设计
MOV A,R3
MOVC A,@A+DPTR
MOV P2,#0feH
MOV P0,A
ACALL DELAY2
MOV DPTR,#DAT2
MOV A,R5
MOVC A,@A+DPTR
MOV P2,#0fdH
MOV P0,A
ACALL DELAY2
MOV A,R4
MOVC A,@A+DPTR
MOV P2,#0fbH
MOV P0,A
ACALL DELAY2
RET DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
;“灭”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“灭”,“F” DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;第一个为零,其他与上相同,因为十位如果为零显示熄灭;====加减时间延时(起到不会按下就加N个数)====== DELAY1: MOV 35H,#08H LOOP0: ACALL DISPLAY
DJNZ 35H,LOOP0
RET;=====延时4236个机器周期(去抖动用到)===== DELAY: MOV 32H,#12H LOOP:
MOV 33H,#0AFH LOOP1: DJNZ 33H,LOOP1
DJNZ 32H,LOOP
RET;=====延时4236个机器周期(显示用到)===== DELAY2: MOV 32H,#43H LOOP3:
MOV 33H,#1EH
MOV A,R7
;每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理
JNZ AAAA1
;没读到有效数据时继续转到AAAA1 27
河南理工大学本科课程设计
LOOP2: DJNZ 33H,LOOP2
DJNZ 32H,LOOP3
RET;=====读抢答按键数据口程序=====;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性 AAAA1:
MOV A,P1
CJNE A,#0FFH,AA1
;当不全为1时的数据为有效数据
AA0:
MOV 36H,A
;将有效数据送到36H暂存
AJMP LOOP2
AA1:
DEC R7
AJMP AA0
;=====发声程序===== BARK:
SETB RING
ACALL DELAY1
ACALL DELAY1
CLR RING;按键发声
RET;=====TO溢出中断(响铃程序)===== T0INT: MOV TH0,#0ECH
MOV TL0,#0FFH
JNB RING,OUT;
CPL P3.6;RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音OUT:
RETI;=====T1溢出中断(计时程序)===== T1INT: MOV TH1,#3CH
MOV TL1,#0B0H
INC R0
RETI END
河南理工大学本科课程设计
附2:系统原理图
第二篇:单片机课设_AT89C51八路抢答器
《单片机原理及应用》
课程设计
题 目∶
院 系∶ 专业班级∶ 姓 名∶ 学 号∶ 指导教师∶ 成 绩∶
流水灯 机电工程系 机电一体化机电0911
晓寒 21 沈全鹏
2011年 12 月 日
单片机课程设计任务书
1.课题名称
抢答器设计 2.设计目的
1. 进一步理解和掌握单片机理论课程知识,加强对专业知识的合运用;
2. 学会熟练使用单片机编程工具软件及单片机软件编程; 3. 学习单片机小系统的硬件设计及PCB布线。4. 学会如何整理资料,划分模块,提高自己的编程技巧;3.设计思路
a.了解抢答器的工作方式; b.单片机按键输入的设计;
c.单片机驱动发光二极管显示及数码管的动态扫描工作方式; d.延时子程序设计; e.定时器的应用; 4.设计要求
1.在本设计中要求设计一个八组单片机控制的抢答器模拟器; 2.要求由两个LED(红绿)指示抢答成功或失败; 3.要求由1位数码管显示抢答成功(或失败)的组; 4.发挥部分:剩余时间显示,各组积分显示; 5.课程设计结束后,要求交设计心得,课程设计报告;
目录
第一章 概述 ………………………………………………………………
第二章 八路抢答器设计方案及选取 …………………… 2
2.1电路设计方案一 ………………………………………… 2 2.2电路设计方案二 ………………………………………… 2 2.3电路设计方案的选取 …………………………………… 2 第三章 电路设计原理及硬件设计 …………………………
3.1单片机最小系统的原理 ………………………………… 3 3.2八路抢答器工作原理 ………………………………… 4 3.3控制系统及所需元件 …………………………………
第四章 软件系统设计及仿真 ……………………………… 7
4.1软件系统设计 …………………………………………… 7 4.2电路仿真 ………………………………………………… 8
第五章 电路板制作与调试 ……………………………………
5.1电路板制作 ……………………………………………… 9 5.2电路调试 ………………………………………………… 9 第六章 心得体会 ………………………………………………
第七章 参考文献 ……………………………………………
鸣谢
………………………………………………………………
附录一 源程序……………………………………………………
2 第一章 概述
《单片机原理及应用技术》是一门技术性,应用性、实践性很强的学科。课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的和任务就是配合单片机的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。在实际生活中有好多地方都用到了单片机,因此学习好这门课程有着十分重要的意义。
在本设计中要求设计一个八组单片机控制的抢答器模拟器;要求由两个LED(红绿)指示抢答成功或失败;要求由1位数码管显示抢答成功(或失败)的组;发挥部分:剩余时间显示,各组积分显示;
1)控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其中单片机AT89C51是系统工作的核心,它主要负责控制各个部分协调工作.2)硬件组成及所需元件:该系统的核心器件是AT89C51。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器(没有驱动器,所以就没有用扬声器了)。元件为:晶振X1、电容C1、C2、C3、电阻RP1。P3.0和P3.1由裁判控制,分别是抢答开始和停止键。P1.0-P1.7是8组抢答的输入口, P2.0--P2.3口为数码管的段选口,位选口用的是P0.0--P0.6口输出,外部中断0、1实现的对个队进行计时,P3.6为蜂鸣器的控制口。
控制系统防真用到了protuse软件,用keil软件与protuce软件级联可以进行模拟调试,既可以检测方案的正确性,又可以避免实物多次调试。Keil集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助.第二章 八路抢答器设计方案及选取
2.1电路设计方案一: 系统各部分采用中小规模集成数字电路,用机械开关按钮作为控制开关,完成抢答输入信号的触发。该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,并且制作过程工序比较烦琐,使用不太方便。
2.2电路设计方案二: 该系统采用MCS-51系列单片机AT89S51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改性。CS-51单片机特点如下: 可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以烧写在ROM许多信号通道都在同一芯片,因此可靠性高。易扩充:单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。
2.3电路设计方案的选取:
方案比较及其选用依据,显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上及其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。另外AT89S51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。依此依据选择方案二比较适合。第三章 电路设计原理及硬件设计
3.1单片机最小系统的原理
本课题采用了单片机最小系统来实现八路抢答器,下面是单片机最小系统的原理。单片机的主要功能是负责整个系统的控制,不承担复杂的数据处理任务,因此在设计单片机最小系统时通常选用AT89C5l、AT89C52、AT89S51、AT89S52(S系列芯片支持ISP功能)等型号的8位单片机作为MCU。本单片机最小系统采用的是AT89S51。
一个典型的单片机最小系统一般由时钟电路、复位电路、片外RAM、片外ROM、按键、数码管、液晶显示器、外部扩展接口等部分组成,图3-1、图3-2分别给出了单片机最小系统的结构框图、原理图。
图3-1 单片机最小系统的结构框图
图3-2单片机最小系统的原理图
3.2八路抢答器工作原理
智力竞赛抢答器用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成, 采用单片机AT89C51,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。该智力竞赛抢答器的准确度很高,其误差主要由晶振自身的误差所造成。
AT89C51单片机由微处理器,存储器,I/O口以及特殊功能寄存器SFR等部分构成。其存储器在物理上设计成程序存储器和数据存储器两个独立的空间,片内程序存储器的容量为4KB,片内数据存储器为128个字节。89C51单片机有4个8位的并行I/O口:P0口,P1口,P2口和P3口。各个接口均由接口锁存器,输出驱动器,和输入缓冲器组成。P1口是唯一的单功能口,仅能用作通用的数据输入/输出口。P3口是双功能口除了具有数据输入/输出功能外,每条接口还具有不同的第二功能,如P3.0是串行输入口线,P3.1口是串行输出口线。在需要外部程序存储器和数据存储器扩展时,P0可作为分时复用的低8位地址/数据总线,P2口可作为高8位的地址总线。P3口也可作为AT89C51的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号。3.3控制系统及所需元件
控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其中单片机AT89C51是系统工作的核心,它主要负责控制各个部分协调工作.所需元件:该系统的核心器件是AT89C51。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振X1、电容C1、C2、C3、电阻RP1、P3.0和P3.1由裁判控制,分别是抢答开始和停止键。P1.0-P1.7是8组抢答的输入口, P2.0--P2.3口为数码管的段选口,位选口用的是P0.0--P0.6口输出, P3.6为蜂鸣器的控制口。
AT89C51的管脚图如下图3-3所示:
图3-3 AT89c51的管脚图
外部振荡电路单片机必须在AT89C51的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元。外部振荡电路见图3-4所示:
图3-4外部振荡电路 外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,应为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位。只能用软复位。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程。复位电路采用图3-5所示:
图3-5复位电路
采用七段码7SEG-MPX4-CC 显示,它是共阴极的由高电平点亮。图形如下图3-6所示。:
图3.6 共阴极
采用八个BUTTON按钮作为抢答的选择按键如图3-7所示:
图3-7八个BUTTON按钮
第四章 软件系统设计及仿真
4.1软件系统设计
智力竞赛抢答器要求有计时记忆功能,一次时间设置完, 复位后不需重新进行时间设定,通过键盘扫描输出按键信息,再通过单片机将它转换成能在七段数码管上显示字型码.当抢答完毕时,会在数码管上显示抢答者数字号码提示以表示抢答成功.同时显示其分数,分数的加减可由裁判手动进行.采用独立式键盘,可实现8路抢答.在显示时使用的是七段数码管显示在本设计中根据实际情况采用的是动态显示方法.并通过查表法 将其在数码管上显示出来,其中P1口为字型码输入端,P2口低6位为字选段输入端.通过查表将字型码送给7段数码管显示的数字。软件去抖动,如果“开始键”按下就向下执行,否者跳到开始。采用倒计时程序,使其具有倒计时功能。回答倒计时30秒。抢答时间5秒。采用发声警报(缺少驱动器,所以没有用扬声器了),起到报警作用。
1、如果想调节抢答时间或答题时间,按“抢答时间调节”键或“答题时间调节”键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,主持人按“抢答开始”键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设30s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。数码管上只显示第一个抢答的选手号,倒数时间到小于5s会每秒响一下提示音。如倒计时期间,主持人想停止倒计时可以随时按“停止”按键,系统会自动进入准备状态,等待主持人按“抢答开始”进入下次抢答计时。下次抢答是先按复位键。
4、如果主持人未按“抢答开始”键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下“停止” 键为止。
5、P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入 数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。P3.6为蜂鸣器的控制口。八路抢答器的源程序见附录1.7 4.2 电路仿真
利用keil软件编写源程序,其源程序见附录1,在protues中画好其总电路图如下图4.1所示::
图4-1 八路抢答器总电路图
把keil软件中的源程序生成可执行文件,下载到protuce中进行仿真,调试。其选手没有抢答时的状态如下图4-2所示:
图4-2 选手准备抢答时的显示图
6号选手抢答成功如下图4-3所示:
图4-3 6号选手抢答成功显示
第五章 电路板制作与调试
5.1电路板制作:
单片机最小系统的PCB图如下图4-1所示:
图4-1单片机最小系统的PCB图
将打印好PCB的转印纸平铺在覆铜板上,准备转印。再用电熨斗加温(要很热)将转印纸上黑色塑料粉压在覆铜板上形成高精度的抗腐层。准备好三氯化铁溶液进行腐蚀。腐蚀好后进行焊接。清理出焊盘部分,剩下的部分用于阻焊,安装所需预定原件并焊接好。然后进行调试。
5.2电路调试
5.2.1总结调试的原则和方法(1)通电观察 把经过准确测量的电源接入电路。观察有无异常现象,包括有无元件发热,甚至冒烟有异味电源是否有短路现象等;如有此现象,应立即断电源,待排除故障后才能通电。(2)静态调试
交流和直流并存是电子电路工作的一个重要组成部分。一般情况下,直流为交流服务,直流是电路工作的基础。因此,电子电路的调试有静态和动态调试之分。静态调试过程:如,通过静态测试模拟电路的静态工作点,数字电路和各输入端和输出端的高低电平值及逻辑关系等,可以及时发现已损坏的元器件,判断电路工作情况,并及时调整电路参数,使电路工作状态符合设计要求。(3)动态调试
调试的方法是在电路的输入端接入适当频率和幅值的信号,并循着信号流向来检测各有关点的波形,参数和性能指标。发现故障应采取各种方法来排除。通过调试,最后检查功能块和整机的各种指标是否满足设计要求,如必要再进一步对电路参数提出合理的修正。5.2.2调试中注意的事项
我们在调试时,为了保证效果,必须尽量减小测量误差,提高测量精度。调试结果是否正确,很大程度受测量正确与否和测量精度的影响。为此,需注意以下几点:
(1)正确使用测量仪器的接地端。
(2)测量电压所用仪器的输入端阻抗必须远大于被测处的等效阻抗。因为,若测量仪器输入阻抗小,则在测量时会引起分流给测量结果带来很大误差。(3)要正确选择测量点,用同一台测量仪进行测量进,测量点不同,仪器内阻引起的误差大小将不同。
(4)调试过程中,不但要认真观察和测量,还要于记录。记录的内容包括实验条件,观察的现象。只有有了大量的可靠实验记录并与理论结果加以比较,才能发现电路设计上的问题,完善设计方案。
(5)调试时出现故障,要认真查找故障原因,切不可一遇故障解决不了的问题就拆掉线路重新安装。因为重新安装的线路仍可能存在各种问题。我们应该认真检查.第六章 心得体会
单片机课程设计是一门很实用,很难的设计。这次课程设计历时二个星期多左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
这次的课程设计也让我看到了团队的力量,我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。刚开始的时候,大家就分配好了各自的任务,大家有的绘制原理图,进行仿真实验,有的积极查询相关资料,并且经常聚在一起讨论各个方案的可行性。在课程设计中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们成功的一项非常重要的保证。而这次设计也正好锻炼我们这一点,这也是非常宝贵的。
在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。虽然这只是一次的极简单的课程制作(八路抢答器),可是平心而论,也耗费了我们不少的心血,这就让我不得不佩服专门搞单片机开发的技术前辈,才意识到老一辈对我们社会的付出,为了人们的生活更美好,他们为我们社会所付出多少心血啊!但当课程设计完成时,那感觉是甜蜜的,没有耕耘,哪来得收获的喜悦,不懂付出怎么能知道回报的快乐,一分耕耘一分收获,有付出才会有回报,就在这样的痛与快乐的交换中,我学到了知识,学到了做人的道理。
这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。最大的收获是:对键盘,显示器,C51语言(虽然最后还是用汇编语言编写的,但是,我也试着学用了C51)的应用有了深刻的了解。还有学会了团队合作精神。
第七章 参考文献
[1]谢自美.电子线路设计.华中科技大学出版社, 2005-08.[2]曹才开,电工电子实训教程.清华大学出版社,1998.[3] 余发山,单片机原理及应用技术.中国矿业大学出版社,2002.[4] 张淑清,单片微型计算机接口技术及其应用.国防工业出版社,2002.[5]李光飞,单片机课程设计实例指导,北京航空航天大学出版社,2001.鸣谢
在这三个星期的课程设计中,感谢老师的细心指导;感谢实验室老师的鼎力支持;感谢同学们的热心帮助;感谢湖南工学院。因为有了你们的帮助,才使我们圆满的完成了这次课程设计。附录1 源程序
OK EQU 20H;抢答开始标志位 RING EQU 22H;响铃标志位 ORG 0000H AJMP MAIN ORG 000BH AJMP TT0 ORG 001BH AJMP TT1 ORG 0040H;避开中断向量区
MAIN: MOV R1,#30;初设抢答时间为30s MOV TMOD,#11H;设置定时器/方式1 MOV TH0,#0F0H MOV TL0,#0FFH;越高发声频率越高,越尖 MOV TH1,#3CH MOV TL1,#0B0H;50ms为一次溢出中断/F=12MHz SETB EA SETB ET0 SETB ET1;允许2个中断,T0/T1 CLR OK CLR RING SETB TR1 SETB TR0;一开始就运行定时器,以开始显示PPP.如果想重新计数,重置TH1/TL1就可以了;=====查询程序===== START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH ACALL DISPLAY;未开始抢答时候显示PPP JB P3.0,FEIFA;ACALL DELAY JB P3.0,FEIFA;去抖动,如果“开始键”按下就向下执行,否者跳到非法抢答查询
ACALL BARK;按键发声 MOV A,R1 MOV R6,A;送R1->R6,因为R1中保存了抢答时间
SETB OK;抢答标志位,用于COUNT子程序中判断是否查询抢答 MOV R3,#0AH;抢答只显示计时,灭号数
AJMP COUNT;进入倒计时程序,“查询有效抢答的程序”在COUNT里面 FEIFA: JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,FALSE3 JNB P1.3,FALSE4 JNB P1.4,FALSE5 JNB P1.5,FALSE6 JNB P1.6,FALSE7 JNB P1.7,FALSE8 AJMP START;=====非法抢答处理程序===== FALSE1: ACALL BARK;按键发声 MOV R3,#01H AJMP ERROR FALSE2: ACALL BARK MOV R3,#02H AJMP ERROR FALSE3: ACALL BARK MOV R3,#03H AJMP ERROR FALSE4: ACALL BARK MOV R3,#04H AJMP ERROR FALSE5: ACALL BARK MOV R3,#05H AJMP ERROR FALSE6: ACALL BARK MOV R3,#06H AJMP ERROR FALSE7: ACALL BARK MOV R3,#07H AJMP ERROR FALSE8: ACALL BARK MOV R3,#08H AJMP ERROR;=====倒计时程序(抢答倒计时跳到改程序)===== COUNT: MOV R0,#00H;重置定时器中断次数 MOV TH1,#3CH MOV TL1,#0B0H;重置定时器
RECOUNT: MOV A,R6;R6保存了倒计时的时间,之前先将抢答时间给R6 MOV B,#0AH DIV AB;除十分出个位/十位 MOV 30H,A;十位存于(30H)MOV 31H,B;个位存于(31H)MOV R5,30H;取十位 MOV R4,31H;取个位 MOV A,R6 SUBB A,#016H JNC LARGER;大于10s跳到LARGER/小于等于10s会提醒 MOV A,R0 CJNE A,#0AH,FULL;1s中0.5s向下运行 CLR RING AJMP CHECK FULL: CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计数
SETB RING MOV A,R6 JZ QUIT;计时完毕 MOV R0,#00H DEC R6;一秒标志减1 AJMP CHECK LARGER: MOV A,R0 CJNE A,#14H,CHECK;如果1s向下运行,否者跳到查“停/显示” DEC R6;计时一秒R6自动减1 MOV R0,#00H CHECK: JNB P3.1,QUIT;如按下停止键退出 ACALL DISPLAY JB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)AJMP RECOUNT ACCOUT: JNB P1.0,TRUE1 JNB P1.1,TRUE2 JNB P1.2,TRUE3 JNB P1.3,TRUE4 JNB P1.4,TRUE5 JNB P1.5,TRUE6 JNB P1.6,TRUE7 JNB P1.7,TRUE8 AJMP RECOUNT QUIT: CLR OK;如果按下了“停止键”执行的程序 CLR RING
ACALL BARK AJMP START;=====正常抢答处理程序===== TRUE1: ACALL BARK;按键发声 MOV R3,#01H CLR OK;因为答题的计时不再查询抢答,所以就锁了抢答 AJMP COUNT TRUE2: ACALL BARK;MOV R3,#02H CLR OK AJMP COUNT TRUE3: ACALL BARK;MOV R3,#03H CLR OK AJMP COUNT TRUE4: ACALL BARK;MOV R3,#04H CLR OK AJMP COUNT TRUE5: ACALL BARK;MOV R3,#05H CLR OK AJMP COUNT TRUE6: ACALL BARK;MOV R3,#06H CLR OK AJMP COUNT TRUE7: ACALL BARK;MOV R3,#07H CLR OK AJMP COUNT TRUE8: ACALL BARK;MOV R3,#08H CLR OK AJMP COUNT;=====犯规抢答程序===== ERROR: MOV R0,#00H MOV TH1,#3CH MOV TL1,#0B0H MOV 34H,R3;犯规号数暂存与(34H)HERE: MOV A,R0 CJNE A,#0AH,FLASH;0.5s向下运行->灭并停响
CLR RING
MOV R3,#0AH MOV R4,#0AH MOV R5,#0AH;三灯全灭 AJMP CHECK1 FLASH: CJNE A,#14H,CHECK1;下面是1s的情况,响并显示号数并清R0,重新计 SETB RING MOV R0,#00H MOV R3,34H;取回号数 MOV R5,#0BH MOV R4,#0BH;显示pp和号数 AJMP CHECK1 CHECK1: JNB P3.1,QUIT1 ACALL DISPLAY AJMP HERE QUIT1: CLR RING CLR OK AJMP START;=====显示程序===== DISPLAY: MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出, MOV A,R3 MOVC A,@A+DPTR MOV P2,#0feH MOV P0,A ACALL DELAY MOV DPTR,#DAT2 MOV A,R5 MOVC A,@A+DPTR MOV P2,#0fdH MOV P0,A ACALL DELAY MOV A,R4 MOVC A,@A+DPTR MOV P2,#0fbH MOV P0,A ACALL DELAY RET DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,73H;“灭”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“灭”,“p” DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,73H;第一个为零,其他与上相同,因为十位如果为零显示熄灭;=====报警延时====== DELAY1: MOV 35H,#08H LOOP0: ACALL DISPLAY DJNZ 35H,LOOP0 RET;=====延时(显示和去抖动用到)===== DELAY: MOV 32H,#12H LOOP: MOV 33H,#0AFH LOOP1: DJNZ 33H,LOOP1 DJNZ 32H,LOOP RET;=====发声程序===== BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING;按键发声 RET;=====TO溢出中断(响铃程序)===== TT0: MOV TH0,#0ECH MOV TL0,#0FFH JNB RING,OUT;CPL P3.6;RING标志位为1时候P3.6口不断取反使喇叭发出一定频率的声音
OUT: RETI;=====T1溢出中断(计时程序)===== TT1: MOV TH1,#3CH MOV TL1,#0B0H INC R0 RETI END 18
第三篇:八路抢答器实验报告
数字电子设计课程设计
八路智力竞赛抢答器设计
一.实验目的
掌握抢答器的工作原理及其设计方法。
学会用Multisim8软件操作实验内容。
掌握设计性试验的实验方法
二.实验要求
八路智力竞赛抢答器功能要求:
基本功能:
1.设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,他们的编号分别是0、1、2、3、4、5、6、7,各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是0、1、2、3、4、5、6、7。
2.给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答的开始。
3.抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号。此外,要封锁输入电路,禁止其他选手抢答。优先抢答选手的编号一直保持到主持人将系统清零为止。
扩展功能:
1.抢答器具有定时抢答的功能。当节目支持人按下“开始”按钮后,要求定时器立即倒计时,并在显示器上显示。
2.参赛选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。
3.如果定时抢答的时间已到,却没有选手抢答,则本次抢答无效,系统封锁输入电路,禁止选手超时后抢答,时间显示器上显示00.三.实验原理
根据对功能要求的简要分析,将定时抢答器电路分为主题电路和扩展电路两部分。主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答器按钮
数字电子设计课程设计
时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。扩展电路完成定时抢答及报警功能。
比赛开始时,接通电源,节目主持人将开关置于“清零”位置,抢答器处于禁止工作状态,编号显示器灭灯,定时显示器上显示设定时间。当节目主持人宣布“抢答开始”,同时将控制开关拨到“开始”位置,抢答器处于工作状态,定时器开始倒计时。若定时时间到,却没有选手抢答时,系统报警,并封锁输入电路,禁止选手超时后抢答。若选手在定时时间内按动抢答按钮时,抢答器要完成以下四项工作:1.优先编码器电路立即分辨出抢答者的编号,并由锁存器进行锁存,然后由译码显示电路显示编号; 2.扬声器发出短暂声响,提醒节目主持人注意; 3.控制电路要对输入编码电路进行封锁,避免其他选手再次进行抢答; 4.控制电路要使定时器停止工作,时间显示器上显示剩余的抢答时间,并保持到主持人将系统清零为止。当选手将问题回答完毕时,主持人操作控制开关,使系统回复到禁止工作状态,以便进行下一轮抢答。
上述方案所示抢答器的工作过程:主持人按动开始抢答的开关后,最先抢答的选手的电平信号先经过优先编码器,再依次经过数据锁存器,此时已经限制了其他选手的抢答,信号再经过译码器和七段数码显示器,将最先抢答的该选手的编号显示出来,并同时产生报警信号,到此完成的是抢答功能;如果没有人抢答,30秒减计数器减到00时也会发出报警信号,此时完成计时功能。
数字电子设计课程设计
它的优点表现在以下几个方面:这种方案原理比较简单。主持人对整体电路的控制只需几个门电路就可完成,不必用特别的芯片来组成控制电路;更容易实现报警提示功能,在有选手抢答后或者计时开始和结束时。既减少了布线使整个电路更直观简单,又降低了产生错误的可能性。
四.实验器材
元器件:74LS48,72LS192,74LS279、74LS148、74LS00、74LS08、74LS32、NE555、CC4511各几个,数码管三个,发光二极管一个,开关、电阻、电容若干
仿 真:Multisim8仿真软件
五.实验步骤
1.抢答电路设计
抢答电路的功能有两个:一是能分辨出选手按按钮的先后,并锁存优先抢答者的编号,供译码显示电路用;二是要使其他选手的按钮操作无效。因此,选用优先编码器74LS148和RS锁存器74LS279以及译码显示电路完成上述功能。
74LS148是一八线-三线优先编码器,该编码器由8个信号输入端,3个二进制输出端,输入输出均为低电平有效。EI为输入使能端,低电平有效,当EI为低电平时,编码器处于工作状态;EO为输出使能端,只有在EI=0,且所有输入都为1时,输出为0;GS表征编码器的工作状态,当且仅当EI为低电平,且输入至少有一各为有效电平时,GS才有效。因此,可根据EI、EO、GS功能扩展端的特点,对电路进行相应控制。编码器在抢答电路中功能是判断抢答者的编号。
74LS279是由4个RS锁存器组成,且均为与非门构成的RS锁存器。其中,1S和3S有两个输入端,S1和S2均为相与的关系。本设计中,将S2均接高电平,仅利用S1控制输出。其引脚图如图四所示,下表为SR锁存器的功能真值表,值得注意的是S和R不能同时为高电平,否则输出不确定。
74LS48为七段显示译码器。该集成译码器设有多个辅助控制端,以增强器件的功能。BI/RBO为灭灯输入,当BI=0时,所有字形熄灭。LT为试灯输入,当LT=0且RBO=1时,显示字形为8,常用于检测自身的好坏。RBI为动态灭灯输入,当LT=1,RBI=0且输入均为0时,输出均为低电平,数码管“灭零”。
译码器74LS48输出高电平有效,用以驱动共阴极数码管。七段显示译码器一般与七段数码显示器相连,共同构成四输入端的数码显示电路。
数字电子设计课程设计
2.定时电路设计
设计中选用十进制同步加/减计数器74LS192进行设计,74LS192是具有置数和清零功能,其引脚图和逻辑图如图1所示,真值表如表5所示。图1 74LS192引脚图和逻辑图
P0、P1、P2、P3——置数并行数据输入; Q0、Q1、Q2、Q3——计数数据输出; CR————————清零端; LD————————置数端;
CPu ———————加法计数CP输入; CPd ———————减法计数CP输入; CO————————进位输出端; BO————————借位输出端。
根据设计要求,需要两片74LS192构成100进制减计数器。由功能真值表可知,只需将个位74LS192的借位输出端BO与十位74LS192的CPd即可实现100进制减计数。值得注意的是,要使其实现减计数,CPu端口必须接高电平。
计数器的时钟脉冲由秒脉冲电路提供。秒脉冲电路由555构成的多谐振荡器构成,如图2所示,谐振荡器无需外加输入信号就能在接通电源自行产生矩形波输出。
数字电子设计课程设计
图2多谐振荡器
因为周期为一秒,所以频率是1赫兹。图中电容的充放电时间分别是: t1=RB×C×ln2≈0.7RB×C t2=(RA+RB)×C×ln2≈0.7(RA+RB)C 所以555的3端输出的频率为: f=1/(t1+t2)≈1.43/[(2RA+RB)C] 我们采用的电阻和电容值分别是:RA=15KΩ,R2=68KΩ,C1=10uf,满足上式,即得到的是秒脉冲。
由以上集成芯片设计的定时电路如下图所示。
工作原理: 555构成秒脉冲产生电路为计时电路提供脉冲。抢答开始前主持人闭合开关,74LS192的置数端PL为低电平有效,处于置数状态,数码管显示定时时间。抢答开始,主持人打开开关,计数器处于计数状态,555产生的秒脉冲与十位74LS192借位输出端(其初始状态为高电平)相与。计数器递减计数至00,十位74LS192借位输出端为低电平,计数器停止工作,产生报警。计时期间有人抢答,减计数器停止计时,显示器上显示此刻时间。
3.时序控制电路设计
时序控制电路是抢答器设计的关键,需要完成以下三项功能:
a.主持人将控制开关拨到“开始”位置时,抢答电路和定时电路进入正常抢
数字电子设计课程设计
答工作状态。
b.当竞赛选手按动抢答键时,抢答电路和定时电路停止工作。c.当设定的抢答时间到,无人抢答时抢答电路和定时电路停止工作。
4.抢答器整体电路
通过控制电路将抢答、定时电路进行连接后,构成了抢答器电路的整体设计,总电路图如图17所示:
主电路:
数字电子设计课程设计
六,实验结论
1.主持人将开关拨到开始的位置,抢答电路和定时电路进入正常抢答状态。2.在30秒内当选手按动抢答键,抢答电路和定时电路停止工作,同时数码管显示相应选手的编号。
3.如果在30秒内无人抢答,抢答电路和定时电路停止工作,选手再按抢答键,将不会显示编号,同时定时电路显示00.七.实验小结
通过本次课程设计,不仅有效巩固了本学期所学数电的相关知识,加强了对重要知识点的记忆和理解,还学会如何运用Multisim8仿真进行仿真,以及如何使用面包板进行实物制作,受益匪浅,现总结如下。
本设计的难点在于时序控制电路的设计,如何在第一位抢答者抢答题目后让编码器停止工作;如何使计时电路在抢答后停止倒计时;如何让定时电路和抢答电路同时清零。设计过程中,根据以往抢答器设计思路,及查阅相关资料,可运用74LS279的输出1Q完成上述控制任务。从这一点,折射出自己在平时的学习中较死板,缺乏变通思考的能力。
在电路仿真的过程中,由于Multisim8操作相对较简单,因此在仿真过程中较为顺利。但仿真软件的操作环境比较理想化,实物操作时会受到部分因素的干扰,例如在仿真电路中电路完全没有问题,但当焊接好实物后,定时电路与抢答电路单独运行都没有问题,但互相反馈时互相干扰。最终通过与互相讨论,请教老师,解决了问题。
通过本次实践操作,也让我深刻明白:只有将课本上的理论知识,结合实践不断练习,不断总结提炼,反复思考实践中的经验教训,才能够真正消化为自己的知识。
第四篇:八路抢答器实验报告
八路抢答器的实验报告
一、设计题目
八路抢答器设计
二、设计要求
1.设计一个竞赛抢答器,可同时供8名选手或者8个代表队参加比赛,他们的编号分别是1、2、3、4、5、6、7、8,各用一个抢答器的按钮,按钮的编号与选手的编号相对应。
2.给节目主持人设计一个控制开关,用来控制系统的清零和抢答开始。3.抢答器具有数据锁存、显示的功能和声音提示功能。抢答开始后,若有选手按动按钮,编号立即锁存,在数码管上显示选手的编号,并有声音提示。此外,要封锁其他选手抢答。优先抢答的选手的编号一致保持到主持人将系统清零为止。
三、设计思路
工作原理为:
1.接通电源前,抢答按钮与清零按钮都未按下。接通电源后,主持人清除开关处于工作状态,抢答器处于工作状态,编号显示器显示为0,蜂鸣器未鸣响(为方便控制,电路设计为清除开关按下时是清零状态,未按下时为工作状态)。等一轮抢答完成后(七段数码管显示出优先抢答队员编号,并蜂鸣器鸣响),主持人将清零开关按下数码管清为零,蜂鸣器停止鸣响。然后先后把各队员抢答按钮与主持人清零按钮复位。即可进入下一轮抢答。
原理为:电路中清零按钮控制D触发器集成块74LS175清零端低电平输入,按下时清零端输入为低电平(清零端低电平有效),未按下时输入高电平。清零后D触发器集成块74LS175 Q`端输出全变为高电平,使编码器74HC147(有效输入电平为低电平)无有效低电平输入,七段数码管上显示为0。
2.抢答时,队员按下抢答按钮的时间有先后次序,电路中每个抢答按钮连接一个D触发器,当一抢答按钮按下后其对应的触发器锁存住信号,Q`端输出有效低电平,同时通过反馈电路使D触发器集成块得脉冲信号终止输入,从而使其他D触发器停止工作,抢答后也无法锁存。达到有先输入有先锁存功能。原理为:根据与门功能特点:只要有一低电平输入输出即为低电平。当D触发器集成块74LS175输出端输出一有效低电平后,电路中第7个与门U15A输出即为低电平,而U15A输出信号又与555触发器构成的多谐振荡器输出信号相与,因此只要U15A输出低电平,多谐振荡器产生的脉冲就无法输入,只有当D触发器集成块74LS175输出端输出全为高电平时脉冲才正常输入,各D触发器正常工作。
3.抢答后,数码管显示优先抢答队员编码,蜂鸣器鸣响。
原理为:D触发器集成块74LS175输出输出锁存信号(有效低电平)后通过编码器 集成块74HC147把输入低电平有效信号的端序号(1至8),编码为四位二进制数0001至1000。然后通过74LS47集成块(数码管驱动器),在数码管上显示相应的数字,即优先抢答队员编码。当蜂鸣器两端分别输入高低电平时,风鸣器鸣响,当两端都为低电平时不鸣响。已知第7个与门U15A在位抢答前为高电平,抢答后为低电平。由此可根据与门U15A输出电平随抢答状态的变化来控制风鸣器的鸣响。使蜂鸣器低电平端接地,高电平端通过一非门接与门U15A输出端即可。
四、实验电路 1.电路原理图
电路原理图1:
1.由于七管脚半导体数码管是理想器件,不存在。因此改用74LS47集成块驱动七段字符显示器。
2.由于八管脚或非门集成块未找到,后改用7个与门代替,集成块为74LS08.3.为方便控制,电路改进为清除开关按下时是清零状态,未按下时为工作状态。
修改后的电路原理图如下图。
电路原理图2:
2.组装电路图与实验结果
五、调试过程
在设计电路图在仿真软件Multisim上仿真成功,领到相应的器件后,我们就开始了在电路板上进行了电路的组装,并在组装过程中进行了相应的检验与校正。1.首先在电路连接方面,由于刚开始连电路时未按一定的方法步骤,容易出现连错和漏连情况。
2.由于器件的限制及实际操作情况,电路要做相应的改变。
由于七管脚半导体数码管是理想器件,不存在。因此改用74LS47集成块驱动七段字符显示器。
由于八管脚或非门集成块未找到,后改用7个与门代替,集成块为74LS08.为方便控制,电路改进为清除开关按下时是清零状态,未按下时为工作状态。3.由于器件的损害,使电路无法正常工作。
经过多次对电路的检查,确定电路没连错而仍无法正常工作达到预期功能后,我们开始对各部分电路分别进行了检测:
首先,我们检测了555触发器构成的脉冲产生模块。用的方法:用我们电路中的脉冲产生模块去替代别的同学已经成功电路板中的脉冲模块来触发其电路,结果发现电路板能正常工作,所以验证了:我们的脉冲产生模块是能正常工作的。
然后,我们检测了我们D触发器构成的信号锁存模块。用的方法:用LED灯检测D触发器Q输出端输出电平状况。LED灯一端接地另一段通过电阻接D触发器Q输出端,当抢答按钮按下后,检测相应的Q输出端是否输出高电平,使LED灯点亮。结果发现抢答按钮按下后相应的Q输出端并没有输出高电平使LED灯点亮,于是我们确定了我们的D触发器集成块已损害。替换成相应的集成块后,电路就能正确工作了。
六、实验心得
在此次实验中,我们体验到了理论知识在实际中的运用,体验到了创造过程中的探索的艰难和成功的喜悦。通过此次实验即巩固了我们的理论知识,又锻炼了我们的动手能力。也让我们认识到了把理论运用到实际过程中可能会遇到一些不同的困难,但只要认真分析、仔细思考,用科学冷静的头脑去研究问题,终究能发现问题的所在,取得成功。
第五篇:单片机课设
华 南 理 工 大 学 广 州 学 院
单片机课程设计报告
题 目: 简易电子时钟
评 分
专业: 自动化 班级: 15级自动化一班 姓名: 黎泽钧 同组队员: 郑立涵、曾迪濠、佘庭枫、李明志、方昊辉
学号/座位序号: 201510087034
日 期: 2017 年 03 月
一、设计目的
通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解并灵活运用。
二、设计要求和方案选择
1.设计要求:
(1)通过程序直接对实时时钟时间进行设置,启动时钟运行。用8位数码管显示。
(2)通过按钮对实时时钟时间进行设置,使时钟能正常运行。(3)其他发挥功能。2.设计方案的选择
(1)计时方案
方案1:采用现成实时时钟芯片
使用一些实时时钟集成电路,如DS1287、DS12887、DS1302等。这些实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时等功能,计时数据的更新每秒自动进行一次,不需要程序干预。因此,在工业实时测控系统中多采用这类专用芯片来实现实时时钟功能。
方案2:使用单片机内部的可编程定时器
利用单片机内部的定时计数器进行中断定时,配合软件延时实现时、分、秒的计时。该方案优点是节省硬件成本,可以利用程序代替。缺点是程序设计相对微型控制器时钟电路声光报时校时输入数据显示较为复杂,精确度不高,同时还可能会和延时冲突,导致显示效果不佳。
鉴于以上原因,我们采用了方案二,使用了单片机内部的可编程定时器。(2)显示器件的选择与对比
方案一:采用LED数码管显示。
LED显示器可以分为有静态显示方式和动态显示方式两种。静态显示就是当数码管显示某个字符时,相应的段恒定的导通,直到要显示下一个字符为止。数码管工作在静态显示方式时,共阴极COM端要接地;若为共阳极COM端接在+5V电源。每位的段选线应分别与一个8位数据口的输出端相连,数码管的各位是相互独立的,且要显示字符一经确定,相应数据的输出将必须维持不变。静态显示数码管一直在工作,因而数码管静态显的亮度较高。在这种显示方式编程比较容易,管理也较简单,但占用I/O口线资源较多,因而在显示位数较多的情况下,我们大都都采用数码管动态显示方式进行显示。而对于动态显示方式,虽可以避免静态显示的问题,但设计上如果处理不当,易造成亮度低,有闪烁等问题。方案二:采用LCD显示。
LCD液晶显示具有丰富多样性、灵活性、电路简单、易于控制而且功耗小等优点,对于一般的段式液晶屏,需要专门的驱动电路,而且也经显示作为一种被动显示,可视性相对较差;对于具有驱动电路和微处理器接口的液晶显示模块(字符或点阵),一般多采用并行机接口,对于微处理器的接口要求较高,占用资源多。另外,89C52本身没有专门的液晶驱动接口。
鉴于上述原因,我们采用方案一,采用了数码管显示方式。数码管作为一种主动显示器件,具有亮度高、价格便宜、功耗低、驱动简单等优点。
三、硬件部分
1.STC89C52单片机(1)结构
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
同时具有以下标准功能: 8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。(2)主要特性
8K字节程序存储空间; 512字节数据存储空间; 内带4K字节EEPROM存储空间;可直接使用串口下载;(3)器件参数
1.增强型8051单片机,6 时钟/机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051.2.工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V 单片机)3.工作频率范围:0~40MHz,相当于普通8051 的0~80MHz,实际工作 频率可达48MHz 4.用户应用程序空间为8K字节 5.片上集成512 字节RAM 6.通用I/O 口(32 个),复位后为:P1/P2/P3 是准双向口/弱上拉,P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片
8.具有EEPROM 功能
9.共3 个16 位定时器/计数器。即定时器T0、T1、T2 10.外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒
11.通用异步串行口(UART),还可用定时器软件实现多个UART 12.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)13.PDIP封装
STC89C52单片机的引脚如图所示:
2.时钟电路
STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图(a)所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用。外部方式的时钟电路如图(b)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。如图所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。
内部时钟电路如图所示,在XTAL1和XTAL1引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件是石英晶体和电容组成的并联谐振回路,晶体振荡器选择11.0532MHz,电容采用30PF。
3.按键输入电路
独立式按键采用每个按键单独占有一个I/O口的结构,这是最简单的键盘输入设计。当按下和释放按键时,输入到I/O口端的电平是不一样的,单片机程序根据不同端口的电平变化判断是否有键按下以及是哪一个键被按下。独立式键盘的原理简单,每个按键的电路是独立的,占用一条数据线。
LED数码管电路
LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
四、软件设计
#include
unsigned char dispbuf[8]={0,0,16,0,0,16,2,1};unsigned char dispbitcnt;unsigned char second;unsigned char minite;unsigned char hour;unsigned int tcnt;unsigned char mstcnt;unsigned char i,j;void main(void){ TMOD=0x02;TH0=0x06;TL0=0x06;TR0=1;ET0=1;EA=1;while(1){ if(P0_0==0){ for(i=5;i>0;i--)for(j=248;j>0;j--);if(P0_0==0){ second++;if(second==60){ second=0;} dispbuf[0]=second%10;dispbuf[1]=second/10;while(P0_0==0);} } if(P0_1==0){ for(i=5;i>0;i--)for(j=248;j>0;j--);if(P0_1==0){ minite++;if(minite==60){ minite=0;} dispbuf[3]=minite%10;dispbuf[4]=minite/10;while(P0_1==0);} } if(P0_2==0){ for(i=5;i>0;i--)for(j=248;j>0;j--);if(P0_2==0){ hour++;if(hour==24){ hour=0;} dispbuf[6]=hour%10;dispbuf[7]=hour/10;while(P0_2==0);} } } } void t0(void)interrupt 1 using 0 {
mstcnt++;if(mstcnt==8){ mstcnt=0;
P3=0xff;//关闭所有显示
P1=dispcode[dispbuf[dispbitcnt]];P3=dispbitcode[dispbitcnt];dispbitcnt++;if(dispbitcnt==8){ dispbitcnt=0;} } tcnt++;if(tcnt==4000){ tcnt=0;second++;if(second==60){ second=0;minite++;if(minite==60){ minite=0;hour++;if(hour==24){ hour=0;} } } dispbuf[0]=second%10;dispbuf[1]=second/10;dispbuf[2]=17;dispbuf[3]=minite%10;dispbuf[4]=minite/10;dispbuf[5]=17;dispbuf[6]=hour%10;dispbuf[7]=hour/10;} }
五、调试及运行结果
六、总结(感想和心得等)
在这次的课程设计中,开始以为电路很简单,但是做实物的时候才知道走线的重要性。数码管的走线都弄成一块了,看来确实得多实践。因为电脑上画的图跟实物有很大区别,得要注意好布局。应该多开设些实践课,为以后的求职之路打下了基础。课程设计分成了硬件和软件两大模块。总的来说,硬件部分很好入手,电路也教简单,主要涉及的是简单的按键、电容、电阻、晶振和数码管。在软件部分,细分为了按键模块、显示模块、定时/计数模块,最后把几个模块整合在主程序模块中。整个设计过程中遇到的最大问题是软件的编写,由于采用的是汇编语言,其间使用到的各种寄存器、存储器地址、变量很多,很难对程序的整体把握。通过电子钟的设计,对单片机的原理、结构、外围电路进一步的了解。要了解在整个设计过程中学到了团体精神和独立解决问题的重要性。