单片机八路竞赛抢答器课程设计_第1页
单片机八路竞赛抢答器课程设计_第2页
单片机八路竞赛抢答器课程设计_第3页
单片机八路竞赛抢答器课程设计_第4页
单片机八路竞赛抢答器课程设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、目录摘要21 设计方案选择及讨论31.1方案设计31.2核心控制器件89c52简介32硬件电路设计52.1单元电路设计52.2单元电路设计5 2.2.1核心控制器件stc89c52最小系统6 2.2.2时序控制电路设计6 2.2.3复位与加减时间电路的设计7 2.2.4抢答与数码管显示电路7 2.2.5声音电路设计73 软件编程设计83.1大体思路84仿真及调试105焊接与实际调试116心得体会12参考文献13附录i 元件清单14附录 程序代码15摘要抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用at89c52单片机及外

2、围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-30s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。关键词:抢答器 单片机 软硬件结合 1 方案设计 1.1方案设计 该系统采用51系列单片机stc89c52作为控制核心

3、,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。stc89c52单片机特点如下: 第一,可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的cpu,程序指令和数据都可以写在rom里,许多信号通道都在同一芯片,因此可靠性高,易扩充。 第二,单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。 第三, 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富

4、的条件分支跳跃指令。其原理框图如下:抢答按扭优先编码电路锁存器译码电路译码显示裁判控制开关控制电路报警电路秒脉冲产生电路定时电路译码电路显示电路图1.1 原理框图 1.2 核心控制器件89c52简介 stc89c52是stc公司生产的一种低功耗、高性能cmos8位微控制器,具有 8k 在系统可编程flash存储器。stc89c52使用经典的mcs-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位cpu 和在系统可编程flash,使得stc89c52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节flash,512

5、字节ram, 32 位i/o 口线,看门狗定时器,内置4kb eeprom,max810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 stc89c52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu 停止工作,允许ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35mhz,6t/12t可选。其引脚图如下:图1.2 单片机引脚图2 硬件电路设计 2.1抢答器的电路框图 如图1.1

6、所示为电路框图。其工作原理为:接通电源后,裁判将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间,裁判可在抢答开始;裁判将开关置“开始”状态,宣布“开始”抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由裁判再次操作开始、停止状态开关。 2.2 单元电路设计 2.2.1 核心控制器件stc89c52最小系统 此次课程设计使用原码实验室的89c52最小系统板进行设计,再加上一块焊有数码管等外围模块的电路板。原码实验室

7、的单片机最小系统已经焊接完成,其中只对需要用到的时钟晶振外部电路,中断,以及复位和一些逻辑i/o口进行电路图绘制,其他进行程序烧入的部分。最小系统电路图如下:图2.2.1 stc89c52最小系统电路图中我们可以看到p2整个八个关键用来为抢答者提供抢答器,当按键开关第一次被按下后,那位抢答者所对应的座位便可以显示出来。 2.2.2时序控制电路设计 时序控制电路是抢答器设计的关键,它要完成以下功能:第一,裁判将控制开关拨到开始位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。 第二,当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。 2.2.3复位与加减时间电路的设计 外

8、部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。而对时间的加减设置也可以通过对相应的按键中断进行定义以实现。复位电路如下图所示:图2.2.2 复位电路图 2.2.4抢答以及数码管显示电路 抢答电路即裁判与抢答者的用按键扫描来完成,剩下的由软件完成其功能。而数码管的显示则需要经过74hc573这个锁存器芯片进行锁存,在第一位抢答者抢答成功之后倒计

9、时以及显示“谁抢到”的2个2段数码管分别被两个锁存器进行锁存,是数码管现实不会再有变化,即实现功能。数显电路如下图:图2.2.3 数显电路 2.2.5声音电路设计 声音电路用于以声音提示,当遇到报警信号时,发出警报。一般喇叭是一种电感性原件。89c52驱动喇叭的信号为各种频率的脉冲。因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。在右图中电阻r为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。不过,如果要由p0输出到此电路,还需要连接一个10k的上拉电阻。选手在设定的时间内抢答时,实现:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢

10、答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次作清除和开始状态开关。对于不同情况下的声音有不同的设置,此处也是利用软件进行设计,声音电路模块如下图:图2.2.4 声音电路3 软件设计 3.1系统主程序设计 为了能够达到抢答的公平、公正、合理,应该在裁判发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,裁判发布抢答命令按下into按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。当在扫描到有人按下了答题键,马上关闭t0、调用显示程序、封锁键盘。其主程序流程图如下:主程序设置抢答

11、时间和回答问题时间定时器及并行口初始化将时间计数器及启动标志值1开中断采并行口数据为0吗?启动标志=1吗?判断抢答组号将抢答组发光二极管点亮判断哪一组为抢答组将抢答组号送显示抢答时间到了吗?输出响铃信号提示超时继续抢答比赛吗?系统返回nyyynyn图3.1 主程序流程图4 仿真及调试 使用proteus进行仿真,仿真图如下:图4.1 仿真电路图仿真开始后按下按键1时,数码管前两位显示 “1”,刚好在还剩6秒的时候,所以后两位数码管显示“6”。结果如下图所示:图4.2仿真时的按键图 此时的数码管显示如下图:图4.3 仿真时的数码管显示图 即抢答器完成了在规定时间内抢答并锁存的功能,即仿真成功。5

12、 焊接与实物调试完成焊接之后,实物图如下:图5.1 实物图1(未上电)图5.2 实物图2(上电)经过几次调试,结果符合要求,且效果比较良好。6 心得体会通过此次的课程设计,让我更进一步的巩固了单片机的各种知识。我在设计电路板的时候,我在一开始设计的基础上稍微改变了一下i/o口的应用,使线的连接更加方便,在外围模块的设计上也稍微花了点功夫,虽然我们没有实现本来想实现的led显示抢答成功选手的功能,但设计还是较成功的。此次的课程设计让我相信这会对今后的学习工作生活都有非常重要的影响,而且大大的提高了动手能力,使我充分的体会到了创造过程中的探索的艰难和成功的喜悦。虽然这次做出的作品还存在很多需要改进

13、的地方,但是在整个设计过程中所学习到的东西是这次实训所得到的最大收获跟财富,使我终身受益。参考文献1李小坚 主编,protel dxp电路设计与制版使用教程,人民邮电出版社,20012徐进强等 主编,单片机技术任务驱动式教程,天津大学出版社,20023李海滨 主编,单片机技术课程设计与项目实例,中国电力出版社,20054刘瑞新 主编,单片机原理与应用教程,机械工业出版社,20075李广弟等 主编,单片机基础,冶金工业出版社,20046李全利等 主编,基于proteus的单片机可视软硬件仿真,2010附录i 元件清单表1 器件选型方案的详细清单器件名称规格型号数量微处理器at89c511极性电容

14、10uf1电阻3wtt10k9电容20pf3晶振12mhz1按钮15共阳4位7段数码管smg sm410561k1扬声器1附录 程序代码/抢答器/responder.c#includereg52.h#define led_data_port p0 /0亮,共阳数码管#define adjust 0/抢答器处于调整状态#define answer1/抢答状态/单片机io口位声明,51单片机可以对io的每一位或px八位单独进行读写操作sbit com1=p13; /1亮sbit com2=p12;sbit com3=p11;sbit com4=p10;sbit key1=p21;sbit key2

15、=p23;sbit key3=p25;sbit key4=p27;sbit key5=p20;sbit key6=p22;sbit key7=p24;sbit key8=p26;sbit key9=p35;/倒计时减sbit key10=p36;/倒计时加sbit key11=p37;/清零端,控制端sbit beep=p17;/1响unsigned char num1=0,time=15;/num1是用来辅助定时器计数,累计时间到一秒,time为倒计时unsigned char shi=0,ge=0;/倒计时time的十位和个位unsigned char result=0;/抢答结果unsi

16、gned char state=adjust;/抢答器状态,初始为调整状态unsigned char flag=0;/结束标识,状态标识,0复位,没有有效信号;1有人抢答,结束抢答过程;2时间到,无人抢答,结束抢答过程const unsigned char lednum = / 0 1 2 3 4 5 6 7 8 9 a b c d e f 不显示 - o(18)h(19)h(20)c(21)0(22)n(23)0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e,0xff,0xbf,0x

17、a3,0x89,0x8b,0xc6,0xc0,0xab; /*- 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void delay(unsigned int t) while(-t);/延时函数,n毫秒void delay_ms(unsigned int n)unsigned int i,j;for(i=n;i0;i-)for(j=110;j0;j-);/开始声音void soundstart(void)/开始声音beep=1;delay_ms(200);beep=0;/报警声音void sou

18、ndwarning(void)unsigned char i;for(i=0;i20;i+)/报警声音beep=1;delay_ms(i);beep=0;delay_ms(20-i);/结束声音void soundover(void)unsigned char i;for(i=0;i80;i+)/结束声音beep=1;delay(100);beep=0;delay(100);/按键扫描函数,只扫描k1到k8/需要寻求一种方式对重复的代码进行优化unsigned char keyscan_8(void)unsigned char num=0;if(key1=0)delay_ms(10);if(k

19、ey1=0)num=1;/delay_ms(20);/while(!key1);return num;if(key2=0)delay_ms(10);if(key2=0)num=2;/delay_ms(20);/while(!key2);return num;if(key3=0)delay_ms(10);if(key3=0)num=3;/delay_ms(20);/while(!key3);return num;if(key4=0)delay_ms(10);if(key4=0)num=4;/delay_ms(20);/while(!key4);return num;if(key5=0)delay

20、_ms(10);if(key5=0)num=5;/delay_ms(20);/while(!key5);return num;if(key6=0)delay_ms(10);if(key6=0)num=6;/delay_ms(20);/while(!key6);return num;if(key7=0)delay_ms(10);if(key7=0)num=7;/delay_ms(20);/while(!key7);return num;if(key8=0)delay_ms(10);if(key8=0)num=8;/delay_ms(20);/while(!key8);return num;ret

21、urn num;/按键扫描函数,只扫描s11,s10,s9,分别为控制端,倒计时加,倒计时减unsigned char keyscan_3(void)unsigned char num=0;if(key9=0)delay_ms(10);if(key9=0)num=9;while(!key9);return num;if(key10=0)delay_ms(10);if(key10=0)num=10;while(!key10);return num;if(key11=0)delay_ms(10);if(key11=0)num=11;while(!key11);return num;return n

22、um;/按键扫描函数,只扫描控制端,清零端s11,p3.7unsigned char keyscan_1(void)unsigned char num=0;if(key11=0)delay_ms(10);if(key11=0)num=11;while(!key11);return num;return num;/*/定时器初始化void initinter(void)tmod=0x11;/设置定时器工作方式为1th0=(65535-45872)/256;/装初值,11.0592m晶振,50毫秒tl0=(65535-45872)%256;ea=1;/开总中断et0=1;/开定时器0中断tr0=1

23、;/启动定时器0*/关闭中断void closeinter(void)tr0=0;/停止定时器0et0=0;/关定时器0中断ea=0;/关总中断/重新打开中断void openinter(void)num1=0;/计数初始化th0=(65535-45872)/256;/装初值,11.0592m晶振,50毫秒tl0=(65535-45872)%256;ea=1;/开总中断et0=1;/开定时器0中断tr0=1;/启动定时器0/关数码管显示void displayclose(void)com1=0;com2=0;com3=0;com4=0;led_data_port=0x00;/考虑到要保护硬件,

24、不能长时间让数码管承受反向电压,/但再次使用数码管时,要先送段选,再打开位选。/倒计时显示,调用该函数之前要先关闭显示,/因为是动态扫描,所以要在循环里面一直重复执行void displaytime(void)/displayclose();led_data_port=lednumshi;com3=1;delay(200);com3=0;led_data_port=lednumge;com4=1;delay(200);com4=0;/显示结果,将抢答结果,即抢答者序号,倒计时所剩时间显示出来,/该函数之前要先关闭显示,因为是动态扫描,所以要在循环里面一直重复执行void displayresu

25、lt(void)/displayclose();led_data_port=lednumresult;com1=1;delay(200);com1=0;led_data_port=lednumshi;com3=1;delay(200);com3=0;led_data_port=lednumge;com4=1;delay(200);com4=0;/按键释放void keyfree(void)if(keyscan_8()delay_ms(10);if(keyscan_8()state=adjust;/soundwarning();/led_data_port=0x00;/com1=com2=com

26、3=com4=1;while(keyscan_8();/com1=com2=com3=com4=0;/定时器调整进程void processadjust(void)time=15;shi=time/10;ge=time%10;while(!state)switch(keyscan_3()case 9:/倒计时减time-;if(time30)time=1;shi=time/10;ge=time%10;break;case 11:/状态转换state=answer;break;default: ;displaytime();/实时刷新倒计时,/存在的问题:keyscan()函数可能会占用一定时间,对数码管动态扫描显示有影响/解决方案:可以把keyscan函数分开,只检测key9,key10,key11三个按键,减少扫描时间keyfree();/定时器抢答进程void processanswer(void)/keyfree();/按键释放,在抢答开始之前,确保所有按键都以释放,否则,发出报警声flag=0;/结束标识复位openinter();soundstart();while(flag=0)displaytime();switch

温馨提示

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

评论

0/150

提交评论