单片机课程设计智力抢答器_第1页
单片机课程设计智力抢答器_第2页
单片机课程设计智力抢答器_第3页
单片机课程设计智力抢答器_第4页
单片机课程设计智力抢答器_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计课程名称: 单片机原理与接口技术 实验项目: 智力抢答器 1、 设计目的 现如今电视节目日益丰富其中的竞赛环节也越来越多,其中智力抢答器是不可或缺的器材。在本学期学习了单片机这门课之后,我们小组成员觉得可以试着自己来实现抢答器的功能,令它能准确、公正、直观地判断出第一抢答者,并通过抢答器的数码管显示和蜂鸣器报警指出抢答组别。我们最终做出一种数字式抢答器的设计方案,通过proteus设计完成,利用wave6000软件编辑程序,仿真验证,适用于多种竞赛场合。2、 设计要求设计一个用于智力竞赛的抢答器,其功能的实现是由单片机控制的,满足(1)能容许2-6组进行抢答。(2)能显示抢答组号

2、。(3)各组记分,并能记分显示。(4)比赛结束时,能发出报警声3、 设计方案 在设计中采用的单片机是at89c51,它主要负责控制各个部分协调工作。 p1.0和p1.7由裁判控制,分别是抢答开始和停止键。p1.1p1.6是6组抢答的输入口,按下对应按钮即为抢答。p0口为数码管的段选口,位选口用的是p2口的低4位,外部中断0。外部中断1,p3.3用于控制有组答题完成后结束计时。p3.4p3.5分别实现了时间的加一和减一。p3.6为蜂鸣器的控制口。外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。外部还接有蜂鸣器用来发出报警音。采用7seg-mpx4-cc-

3、blue显示,它是共阴极的由高电平点亮。系统仿真用到了wave6000和proteus软件,通过仿真可以显示所设计系统的功能,对于程序的调试等有很大的帮助。4、 实验器件 采用单片机at89c51,10k的上拉电阻、若干按钮、扬声器、晶体振荡器x1、电容c1和c2、带极性的电容c3、排阻respack-8以及数码管7seg-mpx4-cc-blue。5、 总体框图6、 硬件设计总体设计电路图整个系统分为:外部振荡电路、复位电路、 加减分电路及蜂鸣器报警电路、 抢答电路及裁判控制开始停止电路、数码管显示电路几个部分。本设计的核心是单片机at89c51。at89c51是一种带4k字节flash存储

4、器(fperomflash programmable and erasable read only memory)的低电压、高性能cmos 8位微处理器,俗称单片机。at89c2051是一种带2k字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,at89c2051是它的一种精简版本。at89c单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 at89c

5、51 提供以下标准功能:4k 字节flash 闪速存储器,128字节内部ram,32 个i/o 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,at89c51可降至0hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止cpu的工作,但允许ram,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存ram中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。振荡电路使用外部振荡电路,由两个1nf的电容和一个晶体振荡器组成 外部震荡电路 外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电

6、平即可实现复位。硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值。因为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软复位。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序开始。 复位电路p3.3接口的开关按下意味着答题结束,p3.4接口开关表示给抢答相应组加上一分,p3.5接口开关按下表示相应组减去一分。裁判示意开始抢答、有组抢答成功、违规抢答、最后5s倒计时都会触发蜂鸣器发出警报。p3.6为蜂鸣器控制口。 加减分电路及蜂鸣器报警电路 p1.0和p1.7由裁判控制,分别是抢答开始和停止键。p1.1-p1.6是6组抢答的输入口,按下

7、按钮抢答。 抢答电路及裁判控制开始停止电路 采用排阻respack-8来做为上拉电阻,排阻一般应用在数字电路上,通常作为某个并行口的上拉或者下拉电阻用。排阻具有方向性,与色环电阻相比具有整齐、少占空间的优点,比用若干只固定电阻更方便。数码管7seg-mpx4-cc-blue,它是共阴极的数码管允许抢答后,开始倒计时从15s知道0s。在最后5s蜂鸣器会发出警报。第三组抢答,答题时间有30s,在最后5s蜂鸣器会发出警报。 若还没有允许抢答就有人按下抢答器,那么蜂鸣器会发出警报,并显示是哪一组违规抢答。如图为第一组违规抢答如图为第三组回答正确加一分如图为第三组回答错误减一分 电路具有记忆功能,每次抢

8、答后都能看到抢答组的分数。如图表示第三组已经获得4分七、软件编程 ok equ 20h ring equ 22h org 0000h ajmp main org 000bh ajmp t0int org 0013h ajmp int1sub org 001bh ajmp t1int org 0040hmain: 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 e

9、t0 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 jb p1.0,next acall delay jb p1.0,next;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询 acall bark;按键发声 mov a,r1 mov r6,a

10、;送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 errorfa

11、lse2: acall bark mov r3,#02h ajmp errorfalse3: acall bark mov r3,#03h ajmp errorfalse4: acall bark mov r3,#04h ajmp errorfalse5: acall bark mov r3,#05h ajmp errorfalse6: acall bark mov r3,#06h ajmp error;=int1(答题对错加减分数程序)=int1sub:mov r4,#0ah mov r5,#0ah jnb p3.4,inc1 jnb p3.5,dec1 jnb p1.7,back1 aca

12、ll display ajmp int1sub mov a,r3 subb a,#01h jz xxy1 subb a,#02h jz xxy2 subb a,#03h jz xxy3 subb a,#04h jz xxy4 subb a,#05h jz xxy5 subb a,#06h jz xxy6 xxy1:mov r7,41h xxy2:mov r7,42h xxy3:mov r7,43h xxy4:mov r7,44h xxy5:mov r7,45h xxy6:mov r7,46h inc1:inc r7 cjne r3,#01h,l1 mov 51h,r7 l1:cjne r3,#

13、02h,l2 mov 52h,r7 l2:cjne r3,#03h,l3 mov 53h,r7 l3:cjne r3,#04h,l4 mov 54h,r7 l4:cjne r3,#05h,l5 mov 55h,r7 l5:cjne r3,#06h,ll mov 56h,r7 ll:acall delay1 ajmp int1sub dec1:dec r7 acall delay1 ajmp int1sub back1:reti;=倒计时程序(抢答倒计时和回答倒计时都跳到改程序)= count: mov r0,#00h;重置定时器中断次数 mov th1,#3ch mov tl1,#0b0h;重

14、置定时器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的情况,报警,显示号数

15、并清r0,重新计数 setb ring mov a,r6 jz quit;计时完毕 mov r0,#00h dec r6;一秒标志减1 ajmp checklarger: mov a,r0 cjne a,#14h,check;如果1s向下运行,否者跳到查"停/显示" dec r6;计时一秒r6自动减1 mov r0,#00h check: jnb p1.7,quit;如按下停止键退出 acall display jb ok,accout;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用) ajmp recount accout:jnb p1.1,t

16、rue1 jnb p1.2,true2 jnb p1.3,true3 jnb p1.4,true4 jnb p1.5,true5 jnb p1.6,true6 ajmp recount quit:clr ok;如果按下了"停止键"执行的程序 clr ring ajmp start;=正常抢答处理程序=true1: acall bark;按键发声 mov a,r2 mov r6,a;抢答时间r2送r6 mov r3,#01h mov r7,41h clr ok;因为答题的计时不再查询抢答,所以就锁了抢答 ajmp counttrue2:acall bark; mov a,r2

17、 mov r6,a mov r3,#02h mov r7,42h clr ok ajmp counttrue3:acall bark; mov a,r2 mov r6,a mov r3,#03h mov r7,43h clr ok ajmp counttrue4:acall bark; mov a,r2 mov r6,a mov r3,#04h mov r7,44h clr ok ajmp counttrue5:acall bark; mov a,r2 mov r6,a mov r3,#05h mov r7,45h clr ok ajmp counttrue6:acall bark; mov

18、a,r2 mov r6,a mov r3,#06h mov r7,46h clr ok ajmp count;=犯规抢答程序=error:mov r0,#00h mov th1,#3ch mov tl1,#0b0h待添加的隐藏文字内容2 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 check1flash:cjne a,#14h,check1;下面系1s的情况,响并显示号数并清r0,重

19、新计 setb ring mov r0,#00h mov r3,34h;取回号数 mov r5,#0bh mov r4,#0bh;显示ff和号数 ajmp check1check1:jnb p1.7,quit1 acall display ajmp herequit1: clr ring clr ok ajmp start;=显示程序=display:mov 41h,51h mov 42h,52h mov 43h,53h mov 44h,54h mov 45h,55h mov 46h,56h mov dptr,#dat1;查表显示程序,利用p0口做段选码口输出/p2低三位做位选码输出, mov

20、 a,r5 movc a,a+dptr mov p2,#01h mov p0,a acall delay mov dptr,#dat2 mov a,r4 movc a,a+dptr mov p2,#02h mov p0,a acall delay mov a,r3 movc a,a+dptr mov p2,#04h mov p0,a acall delay mov a,r7 movc a,a+dptr mov p2,#08h mov p0,a acall delay ret dat1:db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71h ;&qu

21、ot;灭","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,#08hloop0: acal

22、l display djnz 35h,loop0 ret;=延时(显示和去抖动用到)=delay: mov 32h,#12hloop: mov 33h,#0afhloop1: djnz 33h,loop1 djnz 32h,loop ret;=发声程序=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 end8、 调试过程 首先新建一个de

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论