单片机课程设计六路抢答器.docx

上传人:b****7 文档编号:8809159 上传时间:2023-02-01 格式:DOCX 页数:26 大小:111.95KB
下载 相关 举报
单片机课程设计六路抢答器.docx_第1页
第1页 / 共26页
单片机课程设计六路抢答器.docx_第2页
第2页 / 共26页
单片机课程设计六路抢答器.docx_第3页
第3页 / 共26页
单片机课程设计六路抢答器.docx_第4页
第4页 / 共26页
单片机课程设计六路抢答器.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

单片机课程设计六路抢答器.docx

《单片机课程设计六路抢答器.docx》由会员分享,可在线阅读,更多相关《单片机课程设计六路抢答器.docx(26页珍藏版)》请在冰豆网上搜索。

单片机课程设计六路抢答器.docx

单片机课程设计六路抢答器

湖南工程学院

课程设计

课程名称单片机原理与应用

课题名称多路抢答器设计

专业电气工程及其自动化

班级

学号

姓名

指导教师

2011年5月20日

湖南工程学院

课程设计任务书

课程名称:

单片机原理与应用

题目:

多路抢答器设计

专业班级:

电气班

学生姓名:

学号:

指导老师:

审批:

 

任务书下达日期2011年5月9日

设计完成日期2011年5月11日

 

设计内容与设计要求

设计内容:

设计一款基于单片机的多路抢答器。

设计要求:

1.设计一款6路或以上的抢答器。

2.设计一个抢答控制开关(开始抢答后才允许答题者抢答)。

3.设定抢答时间限制,超过时间后,该题作废。

4.设定答题时间。

5.数字LED显示当前答题者号。

6.其他功能(创意部分)。

例:

有犯规(未按开始键就抢答的)时显示其号码。

 

说明书格式

封面

课程设计任务书

第1章设计的要求及目的

第2章系统总体方案选择与说明

第3章系统方框图与工作原理,

第4章各单元硬件设计及说明

第5章器件说明

第6章软件设计与说明(包括流程图)

第7章调试步骤、结果、使用说明

第8章设计总结

第9章参考文献

附录:

系统电路原理图(用PROTUES制作)、系统程序清单。

电气信息学院课程设计评分表

进度安排

设计时间为两周

第一周

星期一、上午:

布置课题任务,讲课及课题介绍

下午:

借阅有关资料,总体方案讨论

星期二、确定总体设计方案

星期三、硬件模块方案设计

星期四、软件模块方案设计

星期五、设计及调试

第二周

星期一、设计及调试

星期二、设计及调试

星期三、总调

星期四、写说明书

星期五、上午:

写说明书,整理资料

下午:

交设计资料,答辩

参考文献

参考文献

一、《单片机应用系统设计》何立民编北航出版社

二、《单片机原理及应用》王迎旭主编机械工业出版社

三、《51系列单片机设计实例》楼然苗等编北航出版社

四、《51单片机应用系统开发典型实例》戴家等编中国电力出版社

五、《单片微型计算机原理及接口技术》陈光东等编华中科技大学出版社

六、《单片机实用系统设计技术》房小翠编国防工业出版社

第1章设计内容及要求

1.1设计内容

设计一款基于单片机的多路抢答器。

1.2设计要求

设计一款6路或以上的抢答器。

设计一个抢答控制开关(开始抢答后才允许答题者抢答)。

设定抢答时间限制,超过时间后,该题作废。

设定答题时间。

数字LED显示当前答题者号。

其他功能(创意部分)。

例:

有犯规(未按开始键就抢答的)时显示其号码。

1.3系统主要功能

抢答器原理:

该抢答器供不多于六个的抢答比赛使用。

每个选手的座位前安装一只抢答按钮开关和一只信号灯。

主持人的座位前安装一只复原按钮开关、一只蜂鸣器和一只抢答器工作状态指示灯。

每当主持人口头发出允许抢答的号令之后,哪个队先按下座位上的按钮开关,该座位的信号灯就先被点亮,同时封锁其他按钮开关的活动。

并且熄灭主持人座位上的状态指示灯和发出3声类似于电话振铃的提示声,以“声明”此次抢答动作已经完成。

在主持人确认后,按下复原按钮,状态指示灯重新点亮,并且同时发出“笛——笛——”声,为下一次的抢答作好准备。

电路中的蜂鸣器FM是一只带有助音腔的压电陶瓷蜂鸣器,用于模拟发出报警声的功率放大器和喇叭。

在FM发声的同时,灯D6也在发光。

FM可以看作是一个电容性负载,本身不能流过直流电流。

发声的原理是,作用在两个电极极板的电位在发生变化时,陶瓷材料就发生弯曲,从而振动空气发出声音。

FM和4只按钮开关SWa~SWd以及4只电阻Ra~Rd都是在演示板的基础上额外添加的。

由于RB端口内部具有上拉电阻,只要用软件设置其有效,即可省略在4只端口引脚上外接上拉电阻。

按钮开关和指示灯与座位的对应关系如表1.1所示:

座位

主持人席

座位1

座位2

座位3

座位4

座位5

座位6

按钮开关

SW1

SWa

SWb

SWc

SWd

SWe

SWf

指示灯

D7

D0

D1

D2

D3

D4

D5

蜂鸣器

表1.1按钮开关和指示灯与座位的对应关系

 

第2章系统主要硬件电路设计

为使硬件电路设计尽可能合理,应注意以下几方面:

(1)尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。

(2)留有设计余地。

在设计硬件电路时,要考虑到将来修改扩展的方便。

因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。

(3)程序空间,选用片内程序空间足够大的单片机,本设计采用AT89C51单片机。

(4)I/O端口,在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。

如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。

如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。

2.1单片机控制系统原理图

如图2-1,P1.0为开始抢答,P1.7为停止,P1.1-P1.6为六路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。

P3.2为时间加1调整,P3.3为时间减1调整。

 

图2-1系统原理图

2.2单片机主机系统电路

该六路抢答器的设计细分为时钟频率电路的设计,复位电路的设计,显示电路的设计和键盘扫描电路的设计等。

2.2.1时钟频率电路的设计

单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。

 

图2-2外部振荡源电路

一般选用石英晶体振荡器。

此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。

电路中两个电容C1,C2的作用有两个:

一是帮助振荡器起振;二是对振荡器的频率进行微调。

C1,C2的典型值为30PF。

单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。

其大小是时钟信号频率的倒数,常用fosc表示。

如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。

2.2.2复位电路的设计

单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图2-3所示:

 

图2-3复位电路

值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。

软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

2.2.3显示电路的设计

显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。

2.2.4键盘扫描电路的设计

键盘是人与微机系统打交道的主要设备。

关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。

站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。

在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。

 

图2-4独立键盘

它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。

其次就是消除在按键过程中产生的“毛刺”现象。

这里采用最常用的方法,即延时重复扫描法,延时法的原理为:

因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。

2.3发声

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。

2.4系统复位

使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。

从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。

硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。

上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。

硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。

但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。

软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。

对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。

而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。

有的编程人员用020000(LJMP0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。

软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。

由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。

在所有的指令中,只有RETI指令能够清除中断激活标志。

前文各处提案到的出错处理程序ERR主要完成这一功能,其他的善后工作交由复位后的系统去完成。

这部分程序如下:

POWERDATA67H;上电标志存放单元

ERR:

CLREA;关中断

MOVDPTR,#ERR1;准备返回地址

PUSHDPL

PUSHDPH

RETI;清除高级中断激活标志

ERR1:

MOVPOWER,#0AAH;重建上电标志

CLRA;准备复位地址

PUSHACC;压入复位地址0000H

PUSHACC

RETI;清除低级中断激活标志,从程序0000H开始执行

这段程序先关中断,以便后续处理能顺利进行,然后用两个RETI指令代替两个LJMP指令,从而清除了两级中断激活标志。

有相应软件陷阱捕捉来的程序可能没有全部激活两个标志,这也无妨。

 

第3章系统软件设计

软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。

3.1主程序系统结构图

 

图3-1软件系统结构图

3.2程序流程图

在本设计中包括了以下八个主要的程序:

主程序、非法抢答序、抢答时间调整程序、回答时间调整程序、倒计时程序、正常抢答处理程序、犯规处理程序、显示及发声程序。

主流程图如3-2所示:

 

图3-2程序设计流程图

3.3系统程序

P1.0为开始抢答,P1.7为停止,p1.1-p1.6为六路抢答输入数码管段选P0口,位选P2口,蜂鸣器输出为P3.6口。

程序代码如下:

OKEQU20H;抢答开始标志位

RINGEQU22H;响铃标志位

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT0SUB

ORG000BH

AJMPT0INT

ORG0013H

AJMPINT1SUB

ORG001BH

AJMPT1INT

ORG0040H

MAIN:

MOVR1,#0FH;初设抢答时间为15s

MOVR2,#0AH;初设答题时间为10s

MOVTMOD,#11H;设置未定时器/模式1

MOVTH0,#0F0H

MOVTL0,#0FFH;越高发声频率越高,越尖

MOVTH1,#3CH

MOVTL1,#0B0H;50ms为一次溢出中断

SETBEA

SETBET0

SETBET1

SETBEX0

SETBEX1;允许四个中断T0/T1/INT0/INT1

CLROK

CLRRING

SETBTR1

SETBTR0;一开始就运行定时器,以开始显示FFF

;果想重新计数重置TH1/TL1就可以了

查询程序:

START:

MOVR5,#0BH

MOVR4,#0BH

MOVR3,#0BH

ACALLDISPLAY;未开始抢答时候显示FFF

JBP1.0,NEXT

ACALLDELAY

JBP1.0,NEXT;去抖动,如果"开始键"按下就向下执行

;否者跳到非法抢答查询

ACALLBARK;按键发声

MOVA,R1

MOVR6,A;送R1->R6,因为R1中保存了抢答时间

SETBOK;抢答标志位,用于COUNT只程序中判断

;是否查询抢答

MOVR3,0AH;抢答只显示计时,灭号数

AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"

;在COUNT里面

NEXT:

JNBP1.1,FALSE1

JNBP1.2,FALSE2

JNBP1.3,FALSE3

JNBP1.4,FALSE4

JNBP1.5,FALSE5

JNBP1.6,FALSE6

AJMPSTART

非法抢答处理程序:

FALSE1:

ACALLBARK;按键发声

MOVR3,#01H

AJMPERROR

FALSE2:

ACALLBARK

MOVR3,#02H

AJMPERROR

FALSE3:

ACALLBARK

MOVR3,#03H

AJMPERROR

FALSE4:

ACALLBARK

MOVR3,#04H

AJMPERROR

FALSE5:

ACALLBARK

MOVR3,#05H

AJMPERROR

FALSE6:

ACALLBARK

MOVR3,#06H

AJMPERROR

INT0(抢答时间R1调整程序):

INT0SUB:

MOVA,R1

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY;先在两个时间LED上显示R1

JNBP3.2,INC0

JNBP3.3,DEC0

JNBP1.7,BACK0

AJMPINT0SUB

INC0:

MOVA,R1

CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99了

;R1就置0新加起

MOVR1,#00H

ACALLDELAY1

AJMPINT0SUB

ADD0:

INCR1

ACALLDELAY1

AJMPINT0SUB

DEC0:

MOVA,R1

JZSETR1;如果R1为0,R1就置99

DECR1

ACALLDELAY1

AJMPINT0SUB

SETR1:

MOVR1,#63H

ACALLDELAY1

AJMPINT0SUB

BACK0:

RETI

INT1(回答时间R2调整程序):

INT1SUB:

MOVA,R2

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY

JNBP3.2,INC1

JNBP3.3,DEC1

JNBP1.7,BACK1

AJMPINT1SUB

INC1:

MOVA,R2

CJNEA,#63H,ADD1

MOVR2,#00H

ACALLDELAY1

AJMPINT1SUB

ADD1:

INCR2

ACALLDELAY1

AJMPINT1SUB

DEC1:

MOVA,R2

JZSETR2

DECR2

ACALLDELAY1

AJMPINT1SUB

SETR2:

MOVR2,#63H

ACALLDELAY1

AJMPINT1SUB

BACK1:

RETI

倒计时程序(抢答倒计时和回答倒计时都跳到该程序):

COUNT:

MOVR0,#00H;重置定时器中断次数

MOVTH1,#3CH

MOVTL1,#0B0H;重置定时器

RECOUNT:

MOVA,R6;R6保存了倒计时的时间之前

;先将抢答时间或回答时间给R6

MOVB,#0AH

DIVAB;除十分出个位/十位

MOV30H,A;十位存于(30H)

MOV31H,B;个位存于(31H)

MOVR5,30H;取十位

MOVR4,31H;取个位

MOVA,R6

SUBBA,#07H

JNCLARGER;大于5s跳到LARGER

;小于等于5s会提醒

MOVA,R0

CJNEA,#0AH,FULL;1s中0.5s向下运行

CLRRING

AJMPCHECK

FULL:

CJNEA,#14H,CHECK;下面系1s的情况,响并显示号数

;并清R0,重新计时

SETBRING

MOVA,R6

JZQUIT;计时完毕

MOVR0,#00H

DECR6;一秒标志减1

AJMPCHECK

LARGER:

MOVA,R0

CJNEA,#14H,CHECK

DECR6;计时一秒R6自动减1

MOVR0,#00H

CHECK:

JNBP1.7,QUIT;如按下停止键退出

ACALLDISPLAY

JBOK,ACCOUNT;如果是抢答倒计时,如是则查询

;抢答,否者跳过查询继续倒数

AJMPRECOUNT

ACCOUT:

JNBP1.1,TRUE1

JNBP1.2,TRUE2

JNBP1.3,TRUE3

JNBP1.4,TRUE4

JNBP1.5,TRUE5

JNBP1.6,TRUE6

AJMPRECOUNT

QUIT:

CLROK;如果按下了"停止键"执行的程序

CLRRING

AJMPSTART

正常抢答处理程序:

TRUE1:

ACALLBARK;按键发声

MOVA,R2

MOVR6,A;抢答时间R2送R6

MOVR3,#01H

CLROK;因为答题的计时不再查询抢答

;所以就锁了抢答

AJMPCOUNT

TRUE2:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#02H

CLROK

AJMPCOUNT

TRUE3:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#03H

CLROK

AJMPCOUNT

TRUE4:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#04H

CLROK

AJMPCOUNT

TRUE5:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#05H

CLROK

AJMPCOUNT

TRUE6:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#06H

CLROK

AJMPCOUNT

犯规抢答程序:

ERROR:

MOVR0,#00H

MOVTH1,#3CH

MOVTL1,#0B0H

MOV34H,R3;犯规号数暂存与(34H)

HERE:

MOVA,R0

CJNEA,#0AH,FLASH;0.5s向下运行->灭并停响

CLRRING

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三灯全灭

AJMPCHECK1

FLASH:

CJNEA,#14H,CHECK1;下面系1s的情况,响并显示号数

;并清R0,重新计算

SETBRING

MOVR0,#00H

MOVR3,34H;取回号数

MOVR5,#0BH

MOVR4,#0BH;显示FF和号数

AJMPCHECK1

CHECK1:

JNBP1.7,QUIT1

ACALLDISPLAY

AJMPHERE

QUIT1:

CLRRING

CLROK

AJMPSTART

显示程序:

入口参数:

R5,R4,R3存入的分别为第一,二,三为数码所显示的位码

出口参数:

DISPLAY:

MOVDPTR,#DAT1;查表显示程序,利用P0口做段选码口

;输出/P2低三位做位选码输出

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#01H

MOVP0,A

ACALLDELAY

MOVDPTR,#DAT2

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#02H

MOVP0,A

ACALLDELAY

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#04H

MOVP0,A

ACALLDELAY

RET

DAT1:

DB00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H

;"灭","1","2","3","4","5","6","7","8","9","灭","F"

DAT2:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H

;第一个为零,其他与上相同,因为十位如果为零显示熄灭

加减时间延时(起到不会按下就加N个数):

DELAY1:

MOV35H,#08H

LOOP0:

ACALLDISPLAY

DJNZ35H,LOOP0

RET

延时(显示和去抖动用到):

DELAY:

MOV

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

当前位置:首页 > 初中教育

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

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