单片机课程设计[1]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验项目:智力抢答器
一、设计目的
现如今电视节目日益丰富其中的竞赛环节也越来越多,其中智力抢答器是不可或缺的器材。在本学期学习了单片机这门课之后,我们小组成员觉得可以试着自己来实现抢答器的功能,令它能准确、公正、直观地判断出第一抢答者,并通过抢答器的数码管显示和蜂鸣器报警指出抢答组别。我们最终做出一种数字式抢答器的设计方案,通过Proteus设计完成,利用WAVE6000软件编辑程序,仿真验证,适用于多种竞赛场合。
二、设计要求
设计一个用于智力竞赛的抢答器,其功能的实现是由单片机控制的,满足(1)能容许2-6组进行抢答。
(2)能显示抢答组号。
(3)各组记分,并能记分显示。
(4)比赛结束时,能发出报警声
三、设计方案
在设计中采用的单片机是AT89C51,它主要负责控制各个部分协调工作。
P1.0和P1.7由裁判控制,分别是抢答开始和停止键。P1.1—P1.6是6组抢答的输入口,按下对应按钮即为抢答。P0口为数码管的段选口,位选口用的是P2口的低4位,外部中断0。外部中断1,P3.3用于控制有组答题完成后结束计时。P3.4—P3.5分别实现了时间的加一和减一。P3.6为蜂鸣器的控制口。外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。外部还接有蜂鸣器用来发出报警音。采用7SEG-MPX4-CC-BLUE 显示,它是共阴极的由高电平点亮。系统仿真用到了WAVE6000和Proteus软件,通过仿真可以显示所设计系统的功能,对于程序的调试等有很大的帮助。
总体框图
四、硬件设计
总体设计电路图
整个系统分为:外部振荡电路、复位电路、加减分电路及蜂鸣器报警电路、抢答电路及裁判控制开始停止电路、数码管显示电路几个部分
本设计的核心是单片机AT89C51。
AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。振荡电路使用外部振荡电路,由两个1nF的电容和一个晶体振荡外部震荡电路
外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值。因为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软复位。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序开始。复位电路
P3.3接口的开关按下意味着答题结束,P3.4接口开关表示给抢答相应组加上一分,P3.5接口开关按下表示相应组减去一分。
裁判示意开始抢答、有组抢答成功、违规抢答、最后5s倒计时都会触发蜂鸣器发出警报。P3.6为蜂鸣器控制口。加减分电路及蜂鸣器报警电路
P1.0和P1.7由裁判控制,分别是抢答开始和停止键。P1.1-P1.6是6组抢答的输入口,按下按钮抢答。抢答电路及裁判控制开始停止电路
采用排阻RESPACK-8来做为上拉电阻,排阻一般应用在数字电路上,通常
作为某个并行口的上拉或者下拉电阻用。排阻具有方向性,与色环电阻相比具有整齐、少占空间的优点,比用若干只固定电阻更方便。
数码管7SEG-MPX4-CC-BLUE,它是共阴极的数码管
允许抢答后,开始倒计时从15s知道0s。在最后5s蜂鸣器会发出警报。
第三组抢答,答题时间有30s,在最后5s蜂鸣器会发出警报。
若还没有允许抢答就有人按下抢答器,那么蜂鸣器会发出警报,并显示是哪一组违规抢答。如图为第一组违规抢答
如图为第三组回答正确加一分
如图为第三组回答错误减一分
电路具有记忆功能,每次抢答后都能看到抢答组的分数。如图表示第三组已经获得4分
七、软件编程
OK EQU 20H
RING EQU 22H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP T0INT
ORG 0013H
AJMP INT1SUB
ORG 001BH
AJMP T1INT
ORG 0040H
MAIN: MOV R1,#0FH
MOV R2,#01EH
MOV TMOD,#11H;设置未定时器/模式1
MOV TH0,#0F0H
MOV TL0,#0FFH;越高发声频率越高,越尖
MOV TH1,#3CH
MOV TL1,#0B0H;50ms为一次溢出中断
SETB EA
SETB ET0
SETB ET1
SETB EX1;允许3个中断,T0/T1/INT0/INT1
CLR OK
CLR RING
SETB TR1
SETB TR0;开始就运行定时器,初始显示888如果想重新计数,重置TH1/TL1 ;=====查询程序=====
START: MOV R5,#00H
MOV R4,#00H
MOV R3,#00H
ACALL DISPLAY;未开始抢答时候显示888
ACALL DELAY
JB P1.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
ACALL BARK;按键发声
MOV A,R1
MOV R6,A;送R1->R6,因为R1中保存了抢答时间
SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答
MOV R3,0AH;抢答只显示计时,灭号数
AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面NEXT:JNB P1.1,FALSE1
JNB P1.2,FALSE2
JNB P1.3,FALSE3
JNB P1.4,FALSE4
JNB P1.5,FALSE5
JNB P1.6,FALSE6
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