单片机课程设计---八路抢答器.doc_第1页
单片机课程设计---八路抢答器.doc_第2页
单片机课程设计---八路抢答器.doc_第3页
单片机课程设计---八路抢答器.doc_第4页
单片机课程设计---八路抢答器.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

单片机课程设计1引言单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。由于单片机具有体积小、功能全、性价比高、性能成熟稳定等诸多优点,目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域导弹的导航装置。 2总体设计2.1 设计依据抢答器由计数器、寄存器、集成定时器和译码显示等组合、时序电路组成。可分为抢答电路,定时电路,报警电路等几个单元部分。每个单元电路分别可以处理一些抢答竞赛中的基本问题。本次课程设计设计的是一个八路定时抢答器,具有锁存和显示功能。同时有主持人控制系统的清零和抢答的开始。抢答开始后,若有任何一名选手按动抢答按钮,抢答器就会显示该选手编号直至系统被主持人清零,同时其他人再抢答就无效了。2.2抢答器的工作原理抢答器的工作原理是利用单片机的定时器t0、t1中断完成,其余状态循环调用显示子程序,用3个共阴极led数码管来显示,用p0口作为数码管的八个段选,用p2口中的p2.0、p2.1、p2.2、作为3个数码管其中3个位选,p1口接8个按键,提供选手抢答,p3.2-p3.3接两个按键,提供开始、结束。抢答功能:通过八路按键配合程序来实现抢答功能。当主持人按下抢答键开始抢答后,此时任一路按下按钮均闭锁其它各路,由程序对键盘译码并显示最先按下抢答键的路数及在其前显示字母e。抢答限时:主持人按下抢答键后,设置30秒为抢答时间。若30秒内无人抢答,倒计时为0时三个数码管都显示字母e,说明该抢答题目作废。此时闭锁所有抢答按键,只有当主持人再次按下抢答键开始下一次抢答方可抢答。非法抢答:在主持人按下抢答键开始前,此时任一路按下按钮均闭锁其它各路,由程序对键盘译码并显示最先按下抢答键的路数及在其前显示字母f,说明其是非法抢答。记录此人的序号,在下一轮抢答时,该为选手不能抢答。2.3主要器件的选用2.3.1 at89c51简介采用单片机来设计制作电子时钟,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低。所以在该设计与制作中采用单片机at89c51,它是低功耗、高性能的cmos型8位单片机。片内带有4kb的flash存储器,且允许在系统内改写或用编程器编程。另外,at89c51的指令系统和引脚与8051完全兼容,片内有128字节的ram、32条i/o口线、2个16位定时计数器、5个中断源、一个全双工串行口等。本文介绍一种由单片机构成的简单的电子时钟。此电子时钟是由单片机at89c51、led显示器、按键和外围控制电路组成,可通过按键进行时间的调整,led显示器进行时、分 、秒的显示。此电子时钟采用atmel公司推出的at89c51构成的单片机系统,具有可靠性好、结构简单、成本低的优点。其引脚分布如图2.2所示图2.1 at89c51管脚配置图2.3.2 led显示电路设计与原理led显示电路是由8个led发光二极管组成,连接方式为共阳极,led接到单片机的p1口,若为低电平,可使led亮起。发光二极管的亮、灭由内部程序控制,8个led发光二极管分别对应不同的音阶,所以led会随着音阶的变化按规律亮、灭。2.3.3 时钟振荡电路at89c51中有一个用于构成内部振荡器的高增益反相放大器,引脚xtal1和xtal2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。外接石英晶体及电容c1、c2接在放大器的反馈回路中构成并联振荡电路。对外接电容c1,c2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。如果使用石英晶体,我们推荐电容使用30pf10pf,而如果使用陶瓷振荡器建议选择40pf10pf。用户也可以采用外部时钟。采用外部时钟的电路如图示。这种情况下,外部时钟脉冲接到xtal1端,即内部时钟发生器的输入端,xtal2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。振荡器电路图如下:图2.2 单片机内部、外部振荡电路3软件设计3.1 系统流程图ny开中断设定定时器初值并启动定时器抢答开始是否有按键按下是否有按键按下30秒到时中断返回调用回答的子程序ny调用非法处理子程序图 3.1 系统程序流程图3.2硬件复位流程图开 始初始化读键盘是否有键按下显示违规选手序号加字母f并禁止下轮抢答中断条件是否满足进入中断程序nnyy图3.2 硬件复位流程图3.3抢答成功流程图开始设定定时器初值并启动开始抢答显示成功抢答选手的序号加字母eret图3.3抢答成功流程图4硬件设计4.1原理图的确定5程序清单定时器t1时间初值设50ms时间初值为z,z的计算方法为(216- z)12=1250103,结果z=15536d=3cb0hok equ 20h ;抢答开始标志位ring equ 22h ;响铃标志位org 0000hajmp mainorg 0003hajmp int0suborg 000bhajmp t0intorg 0013hajmp int1suborg 001bhajmp t1intorg 0040hmain: mov r1,#30 ;初设抢答时间为30smov r2,#60 ;初设答题时间为60smov tmod,#11h ;设置定时器t0/t1模式1mov th0,#0f0hmov tl0,#0ffh ;越高发声频率越高,越尖mov th1,#3chmov tl1,#0b0h ;50ms为一次溢出中断setb easetb et0setb et1setb ex0setb ex1 ;允许四个中断,t0/t1/int0/int1clr okclr ringsetb tr1setb tr0 ;一开始就运行定时器,以开始显示eee;=查询程序=start: mov r5,#0bh mov r4,#0bh mov r3,#0bhacall display ;未开始抢答时候显示eeejb p3.0,nextacall delayjb p3.0,nextacall bark ;按键发声mov a,r1mov r6,a ;送r1-r6,因为r1中保存了抢答时间setb ok ;抢答标志位,用于count只程序中判断是否查询抢答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,tz1 jnb p1.7,tz2ajmp starttz1: jmp false7tz2: jmp false8;=非法抢答处理程序=false1: acall bark; ; 按键发声mov r3,#01h ajmp errorfalse2: acall barkmov r3,#02h ajmp errorfalse3: acall barkmov r3,#03h ajmp errorfalse4: acall barkmov r3,#04h ajmp errorfalse5: acall barkmov r3,#05h ajmp errorfalse6: acall barkmov r3,#06h ajmp errorfalse7: acall barkmov r3,#07h ajmp errorfalse8: acall barkmov r3,#08hajmp error;=int0(抢答时间r1调整程序)=int0sub:mov a,r1 mov b,#0ah div ab mov r5,a mov r4,bmov r3,#0ahacall display ;先在两个时间led上显示r1jnb p3.4,inc0 ;p3.4为+1s键,如按下跳到incojnb p3.5,dec0 ; p3.5为-1s键,如按下跳到decojnb p3.1,back0 ; p3.1为停止键,如按下跳到backoajmp int0subinc0: mov a,r1cjne a,#63h,add0 ;如果不是99,r2加1,如果加到99,r1就置0,重新加起。mov r1,#00hacall delay1ajmp int0subadd0: inc r1acall delay1ajmp int0subdec0: mov a,r1jz setr1 ;如果r1为0, r1就置99dec r1acall delay1ajmp int0subsetr1: mov r1,#63h acall delay1 ajmp int0subback0: reti ;=int1(回答时间r2调整程序)=int1sub:mov a,r2 mov b,#0ah div abmov r5,amov r4,bmov r3,#0ahacall displayjnb p3.4,inc1jnb p3.5,dec1jnb p3.1,back1ajmp int1subinc1: mov a,r2 cjne a,#63h,add1 mov r2,#00h acall delay1ajmp int1subadd1: inc r2 acall delay1 ajmp int1subdec1: mov a,r2 jz setr2 dec r2 acall delay1 ajmp int1subsetr2: mov r2,#63h acall delay1 ajmp int1subback1: reti ;=倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=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 ;取十位,存入r5 mov r4,31h ;取个位,存入r4 mov a,r6 subb a,#07h jnc larger ;回到倒计时小于5秒是,响铃提醒 mov a,r0 cjne a,#0ah,full ;1s中0.5s向下运行 clr ring ajmp checkfull: cjne a,#14h,check ;下面是1s的情况,响并显示号数并清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,#00hcheck: jnb p3.1,quit ;如按下停止键退出 acall display jb ok,accout ;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用) ajmp recountaccout: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,tz3 jnb p1.7,tz4 ajmp recounttz3: jmp true7tz4: jmp true8 quit: clr ok ;如果按下了停止键执行的程序 clr ring ajmp start;=正常抢答处理程序=true1: acall bark ;按键发声 mov a,r2 mov r6,a ;抢答时间r2送r6 mov r3,#01h clr ok ;因为答题的计时不再查询抢答,所以就锁了抢答 ajmp counttrue2:acall bark mov a,r2 mov r6,a mov r3,#02h clr ok ajmp counttrue3:acall bark; mov a,r2 mov r6,a mov r3,#03h clr ok ajmp counttrue4:acall bark; mov a,r2 mov r6,a mov r3,#04h clr ok ajmp counttrue5:acall bark; mov a,r2 mov r6,a mov r3,#05h clr ok ajmp counttrue6: acall bark; mov a,r2 mov r6,a mov r3,#06h clr ok ajmp counttrue7: acall bark; mov a,r2 mov r6,a mov r3,#07h clr ok ajmp counttrue8: acall bark; mov a,r2 mov r6,a mov r3,#08h clr okajmp 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 check1flash: cjne a,#14h,check1 ;下面是1s的情况,响并显示号数并清r0,重新计 setb ring mov r0,#00h mov r4,34h ; 取回号数 mov r3,#0dh mov r5,#0ch ;显示f和号数 ajmp check1check1: jnb p3.1,quit1 acall display ajmp herequit1: clr ring clr okajmp 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 retdat1:db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,79h,3fh,71h ;灭,1,2,3,4,5,6,7,8,9,灭,e,0,fdat2:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,79h,3fh,71h;第一个为零,其他与上相同,因为十位如果为零显示熄灭;=加减时间延时(起到不会按下就加n个数)=delay1: mov 35h,#08hloop0: acall 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 ;标志位为1时候p3.6口不断取反使喇叭发出一定频率的声音out: reti;=t1溢出中断(计时程序)=t1int: mov th1,#3ch mov tl1,#0b0h inc r0 retiend总 结两周时间的单片机原理课程设计结束了,虽然有点累,但是收获颇丰。在这两周的时间,不仅加深了我对课本知识的掌握,把以前学过的知识从理论应用到了实践,这大大培养了我独立思考的能力和动手能力,也锻炼了我遇到困难不要受到挫折的心理,我感到个人能力又得到了提高。单片机的课程设计是要求我们通过独立或协作提出并论证设计方案,进行软、硬件调试,最后获得正确的运行结果,目的是要我们加深和巩固对理论教学和实验教学内容的掌握,进一步建立计算机应用系统整体概念,初步掌握单片机软、硬件开发方法。本次设计的要求是设计一个八路抢答器,要实现软件编和试验箱的硬件连接。最终实现抢答器的功能。在我刚看到题目时,头脑里一点思路都没有,此时认识到了自己知识的不足,正如书到用时方恨少。这让我感觉无从下手,后来通过老师和同学的帮助才找到了头绪。通过设计,不仅培养我们的运用灵活的思维去思考问题,而且要从理论联系到实际,并且要求我有较强的动手能力和耐心。虽然我也曾为种种想要退却,但是最后还是坚持下来了。所以不要轻易放弃,只要我们肯努力,肯投入,一定就有回报的。在这次课程设计过程中,我遇到了几个自己不能解决的问题,通过老师和同学的帮助最终把问题解决。当我通过自己的努力和老师同学们的帮助后,在试验箱上成功的实现了抢答器的各种功能后

温馨提示

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

评论

0/150

提交评论