1、目 录第一部分 设计任务与调研1第二部分 设计说明3第三部分 设计成果12第四部分 结束语28致谢29参考文献30第一部分 设计任务与调研1.主要任务 设计一款操作容易、简单实用基于51单片机的抢答器,能够实现以下功能:(1)可供8人进行的抢答器。(2)系统设置复位按钮,按动后,重新开始抢答。(3)抢答开始时数码管显示优先抢答者的序号,同时发出声响。(4)抢答功能开始时,定时器开始减时,同时蜂鸣器发出声响。(5)若倒计时结束无人抢答,扬声器发出报警且禁止抢答,定时器显示00。2.调研的目的与总结调研目的:通过对抢答器的调研我们知道抢答器是在知识竞赛、文体娱乐活动中,能准确、公正、直观地判断出抢
2、答者的座位号的一种工具。但因为种类多,功能与价格也许多差异,传统抢答器只是大概判断出抢答成功或犯规选手台号,无法显示出每个选手的抢答时间。而今抢答器可以通过数据来说明裁决结果的准确性、公平性。使比赛大大增加了娱乐性的同时,也更加公平、公正。知识竞赛抢答器可以分为三类:电子抢答器、电脑抢答器、手机抢答器。所谓的电子抢答器,就是其主控器是电子控制器;它的中心构造一般都是由单片机以及外围电路组成,电子抢答器功能相对简单,能够完成简单的抢答和计分。其优点是相对使用费用不高,适用于对知识竞赛要求不高的学校以及小型企事业单位。所谓的电脑抢答器,就是其主控器使用的是电脑,靠电脑来识别抢答成功者和抢答违规者的
3、方式就叫电脑抢答器。高端电脑抢答器可以完成一体化显示题目、抢答、计分、计时以及与选手、主持人、评委、观众互动,所有的操作只需要一人完成。手机抢答器就是用手机作为抢答按钮的抢答器,严格说来手机抢答器是电脑抢答器里面最高端的抢答器,是手机和电脑结合的抢答器。手机抢答器的成功问世,大大的降低了知识竞赛的成本,因为手机几乎人人都有,只需要下载祥光程序就可以完成一场别开生面的高质量的知识竞赛。调研总结:为了抢答活动能够公平公正的进行,抢答器已经作为一种必不可少的工具,但一般的抢答器可靠性低,使用寿命短,介于这些不方便因素,此次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的八路抢答器。 本
4、设计以AT89C51单片机作为主控核心,与晶振、数码管、蜂鸣器等通过外围接口实现的八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时器/计数器等,设计的八路抢答器不仅具有实时显示抢答选手的号码和抢答时间的功能,同时还利用汇编语言编程,使其实现复位、定时和报警的功能。3.思路与方法1、 按照经济实惠、寿命长、设计简单的原理选择AT89C51作为主控芯片2、 采用模块化设计智能抢答器,设计八个抢答按钮和一个开始、结束、复位按钮。3、 利用单片机的各种功能,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和选手号码4、 利用Keil4软件编程并与Pr
5、otues软件能够联调,使抢答器能够模拟仿真运转。第二部分 设计说明1.总设计框图本设计的系统主要由AT89C51单片机模块、时钟频率电路模块、复位电路模块、显示电路模块、键盘扫描电路模块以及发声电路模块构成。以下是本系统设计的总设计框图:图2.1总设计框图2.系统硬件电路设计2.1 单片机模块AT89C51单片机主要提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停
6、止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。图2.2 单片机引脚图 图2.3 AT89C51实物图2.2 时钟频率电路单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。图2.4 外部振荡源电路图一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作
7、用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12s。2.3复位电路单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图所示: 图2.5 复位电路图值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初
8、始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。2.4 显示电路显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。图2.6 显示电路图2.5 键盘扫描电路的设计键盘是人与微机系统打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前
9、时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。 图2.7按键原理图在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成1乘8的8个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。2.6 发声电路
10、设计我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高“”低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。设计如图2.8所示。图中单片机通过内部定时器的操作实现交替变换的波形输出驱动扬声器发声。图2.8发声电路图3 系统软件设计软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。图2.9 系统方框图流程图是显示系统软件设计极好的方法,不论采用何种程序设计方法
11、,程序总体结构确定后,一般以程序流程图的形式对其进行描述。在本设计中包括了以下八个主要的程序:主程序;非法抢答序;抢答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。主流程图如图所示:图2.10程序设计流程图 图2.11程序设计流程图图2.12程序设计流程图4.设计特点本设计的基于51单片的八路抢答器使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。采用AT 89C51单片机作为芯片实现了八位选手同时抢答的功能。在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效,也能实现主持人的后台控制。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢
12、答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。第三部分 设计成果1.设计成果图3.1抢答器电路图 图3.2 Protues仿真图图3.3模拟仿真五号选手提前抢答犯规图3.4模拟仿真4号选手抢答成功倒计时暂停2.程序代码#include /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义变量范围0255#define uint unsigned int /无符号整型 宏定义变量范围065535#include eeprom52.h/数码管段选定义
13、0 1 2 3 4 56 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/ AB C D E F不显示 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /断码sbit smg_we1 = P33; /数码管位选定义8sbit smg_we2 = P34;sbit smg_we3 = P35;sbit smg_we4 = P36;sbit beep = P37; /蜂鸣器IO口定义 uchar flag_start; /开始抢答标志位uchar flag_weigui; /
14、抢答违规标志位uchar dis_smg4 = 0xc0,0xbf,0xa4,0xb0; /数码管显示缓冲区uchar smg_i = 4; /显示数码管的个位数uchar miao,s_time; /时间uchar flag_num; /号码 uchar menu_1 ; /菜单设置变量bit flag_200ms = 1; /200ms的标志位uchar flag_qd_en; /抢答uchar i;/*把数据从单片机内部eeprom中读出来*/void read_eeprom() /读出保存数据s_time = byte_read(0x2000);a_a = byte_read(0x20
15、58);/*把数据保存到单片机内部eeprom中*/void write_eeprom()/保存数据SectorErase(0x2000);byte_write(0x2000, s_time);byte_write(0x2058,a_a);/*开机自检eeprom初始化*/void init_eeprom() /开始初始化保存的数据read_eeprom(); /读出保存数据if(a_a != 20)a_a = 20;s_time = 30;write_eeprom(); /保存数据/*数码管位选函数*/void smg_we_switch(uchar i)switch(i)case 0: s
16、mg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;/* 名称 : delay_1ms()* 功能 : 延时1ms函数* 输入 : q* 输出
17、 : 无*/void delay_1ms(uint q) /延时1ms函数uint i,j;for(i=0;iq;i+)for(j=0;j 1)menu_1 = 0;if(key_can1 = 9) /开始抢答键flag_start = 1;for(i=0;i2;i+)beep = beep;delay_1ms(20);if(key_can = 99)s_time = 99;dis_smg0 = smg_dus_time % 10;/显示设置值dis_smg1 = smg_dus_time / 10 % 10;/显示设置值write_eeprom();/保存数据if(key_can = 7)i
18、f(s_time 3)s_time - ;/设置倒计时减1dis_smg0 = smg_dus_time % 10; /显示设置值dis_smg1 = smg_dus_time / 10 % 10;/显示设置值write_eeprom();/保存数据/*倒计时处理*/void djs_dis() /倒计时处理static uchar value;if(flag_start = 1) & (flag_weigui = 0)value +;if(value = 5) /1svalue = 0;if(miao != 0)miao -; /倒计时减一 if(miao = smg_i)i = 0;P1
19、= 0xff; /消隐 smg_we_switch(i);/位选P1 = dis_smgi;/*定时器0初始化程序*/void time_init()/ 定时器0初始化程序EA = 1; /开总中断TMOD = 0X01; /定时器0、工作方式1ET0 = 1; /开定时器0中断 TR0 = 1; /允许定时器0定时 /*主程序*/ void main()static uchar value;beep = 0; /开机叫一声 delay_1ms(100);P0 = P1 = P2 = P3 = 0XFF; /IO口全部输出为1init_eeprom(); /开始初始化保存的数据time_ini
20、t(); / 定时器0初始化程序miao = s_time;while(1)if(flag_weigui = 0)key(); /独立按键程序key_1(); /主持人独立按键程序if(key_can 20) | (key_can1 20)key_with(); /按键处理函数if(flag_200ms = 1)flag_200ms = 0;if(menu_1 = 0)dis_smg3 = smg_dumiao / 10 % 10;/显示设置值dis_smg2 = smg_dumiao % 10;/显示设置值dis_smg1 = 0xbf;dis_smg0 = smg_duflag_num;/
21、显示选手号码if(flag_weigui = 1) /违规了显示FFdis_smg3 = smg_du15;/显示设置值dis_smg2 = smg_du15;/显示设置值if(value = 0) /违规提示报警value = 1;for(i=0;i= 100)value = 0;flag_200ms = 1;第四部分 结束语通过本次的毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。虽然本设计的抢答器基本功能都能实现,但是由于自身的知识掌握不足,导致一些扩展功能还不能设计出来:比如说声控装置,在主持说开始时,系统自动完成清零并开始
22、时的功能。还有积分模块,可以设定初始积分,并记录每次抢答完成后的积分。本设计采用了通用的电子元器件,利用AT89C51单片机及外围接口实现抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来。本设计的硬件电路是比较简单的,主要的难题解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。理论联系实践,通过查资料和搜集有关的文献,培
23、养了自身的学习能力和动手能力。从以前的由被动接受知识转换为主动的寻求知识。在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过毕业设计,学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题,也懂得了知识必须通过应用才能实现其价值的道理。 第五部分 致谢作为一个大专生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,在这里衷心感谢指导老师的督促指导,以及一起学习的同学们的支持,让我按时完成了这次毕业设计。在毕业设计过程中,我遇到了许许多多的困难。在此我要感谢我的指导老师给我悉心的帮助和对我耐心而细致的指导,他细心地纠正设计中的错误。除了敬佩他的专业
24、水平以外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。同时还要感谢我周围的同窗室友,他们给了我无数的关心和鼓励,也让我的大学生活充满了温暖和欢乐。如果没有他们的帮助,此次毕业设计的完成将变得困难。他们在我设计中给了我许多宝贵的意见和建议。 最后特别感谢机电职业技术学院三年来为我提供良好的学习环境,在此以表最诚挚的敬意。第六部分 参考文献【1】C程序设计 ,谭浩强,清华大学出版社,2005【2】单片机原理及接口技术(第3版),李朝青,北京航空航天大学出版社,2002【3】单片机系统设计与实例指导,冯育长,西安电子科技大学出版社,2007【4】 单片机课程设计实例指导,李光飞,北京航天航空大学出版社,2004【5】单片机原理与应用技术M.张友德.北京.机械工业出版社.2004【6】单片机应用系统设计M.何立民等.北京航空航天出版社【7】 单片机c语音程序设计实例基于protues仿真.彭伟.电子工业出版社,2007【8】数字电子技术基础 第四版.阎石.高等教育出版社1998.12 【9】模拟电子技术基础 第三版.童诗白,华成英.高等教育出版社2001. 30