《四路抢答单片机课程设计实验报告.doc》由会员分享,可在线阅读,更多相关《四路抢答单片机课程设计实验报告.doc(18页珍藏版)》请在三一办公上搜索。
1、目录摘要 2一引言 31.1本课程设计可实现的功能 31.2本课程完成情况 31.3本课程使有方法 3二PIC单片机控制的四路抢答器工作原理 4三硬件设计内容 63.1基于protel的原理图 63.2 基于PROTEUS的四路抢答器硬件电路设计 73.3 实际电路图排版与焊接 10四四路抢答器系统软件设计 12五系统软件调试12六课程设计总结12七参考文献13八程序清单14摘要在知识比赛中, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即
2、使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。本次设计主要应用单片机抢答器设计及工作原理,以及根据它的实际用途。系统工作原理本系统采用PIC16F877A单片机作为核心。控制系统的四个模块分别为:存储模块、显示模块、语音模块、抢答开关模块。该抢答器系统通过开关电路四个按键输入抢答信号;利用蜂鸣器完成语音的报警功能; 利用存储程序; 利用五个数码管来完成显示功能。工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理, 输出控制信号, 控制数码管和语音芯片工作。在数码管上显示哪一组先答题,然后开始倒计时,限制回答时间,从而实现整个抢答过程。关键字:PIC16F877A单片机 抢答器。
3、一 引言1.1本课程设计可实现的功能: a. 上电复位功能,手动复位功能,进入初始画面,五个数码管分别显示“H”、“E”、“L”、“L”、“O”。b. 抢答器功能。分为四组,各组分别有一个抢答按钮。主持人有开始和结束、复位键。设定选手抢答时间为30s,回答问题时间为60s。当主持人按键开始后,开始30s倒计时,选手开始抢答为有效,如果30s后无人回答,则蜂鸣器鸣两声发生提示。若30s内有选手回答,则停止30s的倒计时,同时显示抢答选手的号数,而且开始一分钟的回答时间倒计时,当一分钟倒计时结束后,蜂鸣器鸣一声以示回答时间结束。主持人可按复位键,新一轮抢答开始。c. 秒表功能。可作为简单的秒表使用
4、,设定一个键开始计时,再按一下停住,记录时间,再按一下,重新计时。1.2本课程完成情况 a. 基本实现了硬件电路与软件程序的设计; b. 基本连接好了硬件电路,虽然焊得不是很漂亮,但已经把根据电路原理图做成了一个完整的硬件电路; c. 由于经验不足,时间有限,可能硬件与软件都不够完美,需待日后继续努力改进。1.3本课程使有方法:装上电池,按下自锁键开关,五个数码管显示“HELLO”。按下键5,换到秒表模式。按下键6,开始计时。再按下键6,停止计时,显示计时的时间。再按下键6,重新计时。再按下键5,切换到抢答器。按下键6,开始30秒的倒计时,数码管2、3显示剩余时间,若没有人抢答,30秒过后,蜂
5、鸣器响两声,然后结束。若有人抢答,数码管1显示抢中的选手号数,数码管2、3停住,数码管4、5开始60秒的倒计时回答时间,倒计时结束后蜂鸣器叫一声。 图1 电路实物图二 PIC单片机控制的四路抢答器工作原理 用单片机设计四路抢答器包括硬件电路设计和软件程序设计。硬件电路的核心是PIC16F877A单片机,配以输入输出电路构成。软件程序采用PIC汇编语言或语言编写单片机程序。PIC单片机控制的四路抢答器原理框图,如图所示。如图所示,系统框图各部分功能说明如下:单片机控制器:选用 PIC16F877A单片机,输入端接收抢答输入、解除输入和复位输入信号等,经运算和处理后,输出信号控制抢答指示灯和抢答显
6、示数码管等。抢答输入:共4路,选用按键开关,实现参赛选手的抢答输入,抢答完后再输入信号无效。编码电路:对4路抢答输入信号进行编码,实现对PIC16F877A单片机输入端口的扩展,由于本设计只有四路抢答,也可不用。 解除输入:选用按键开关,用程序实现封锁,通过复位键为继续抢答作准备。复位输入:选用按键开关,可对单片机进行硬件复位操作。倒计时:用倒计时来提示抢答或回答时间的开始。停止计时:停止倒计时来显示,选手抢答所用的时间,以及提示回答时间开始。 抢答显示:用LCD数码管显示参赛选手的编号。语音报警电路:当过了限定抢答时间后,蜂鸣器鸣两声表示抢答时间已到,不能再抢答了。当回答时间到了后,蜂鸣器鸣
7、一声表示回答时间已到。三 硬件设计内容3.1 根据设计思想及查阅相关资料,设计出实现欲定功能的系统电路原理图,用protel画出原理图(图3)。 图3 基于protel的原理图3.2 基于PROTEUS的四路抢答器硬件电路设计3.2.1多路抢答器总体电路设计1.创建一个新的设计文件首先进入Proteus ISIS编辑环境。选择“File/New Design”选项,在弹出的模板对话框中选择DEFAULT模板,并将新建的设计保存。如图3.2.1 (a)所示。 如图3.2.1 (a)2.置工作环境打开Template菜单,对工作环境进行设置。3.拾取元器件选择Library下的Pick Devic
8、e/Symbol菜单项,出现如图3.2.1 (b)所示对话框。 图3.2.1 (b) 元件拾取对话框在Keywords中输入你所需要的元器件名称,单击OK按扭,或在元器件列表区域双击元器件名称,即可完成对该元件的添加。4.在原理图中放置元件选择对象选择器中的PIC16F877A件,在Proteus ISIS编辑环境主界面的预览窗口将出现PIC16F877A的图标。在编辑窗口双击鼠标左键,元器件PIC16F877A被放置到原理图中。按照上述步骤,将其他元器件放置到原理图中。5.编辑元器件放置好元器件后,双击相应的元器件,即可打开该元器件的编辑对话框。6.绘制原理图单击的一个对象连接点。如果想让P
9、roteus ISIS自动定出走线路径,只需单击另一个连接点;如果想自己决定走线路径,只需在希望的拐点处单击。按照上述步骤,将所有的原器件按照所需方式连线。连接后的原理图如图3.2.1 (c)所示。图 3.2.1 (c)连接后的原理图8.对原理图进行电气规则检测选择Tools下的Electrical Rule Check菜单项,出现电气规则检测报告单。如图3.2.1 (d)所示。9.存盘及输出报表将设计好的原理图文件存盘。同时,可使用Tools菜单下的Bill of Materials草单项输出BOM文档。如图3.2.1 (e)所示。图3.2.1 (d)电气规则检查报告单 图3.2.1 (e)
10、输出的BOM文档3.3 实际电路图排版与焊接电路图设计出来,并经仿真可以用以后,接下去进行器件采购。原件清单如下:然后,开始根据原理图焊接电路。焊完后最重要的是进行测试。测试可以从以下几个方面入手:a. 逻辑故障这类故障往往由于焊线和放元器件的过程中工艺性错误所造成的。主要包括错线、开路、短路。排除的方法是首先将做好的板认真对照原理图,看两者是否一致。应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线是否存在相互之间的短路或与其它信号线路短路。必要时利用万用表的短路测试功能,可以缩短排错时间。b. 元器件检查检查元器件是否坏掉可以用万用表测相关参数等方法,也可以用替换的方法进
11、行检测。c. 电源故障在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。加电后检查各插件上引脚的电位,一般先检查与GND之间电位,若在4.8-5Vi之间属正常。若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使用应用系统中的集成块发热损坏。d. 电路线路检测电路的调试主要看接口以及连线是否正确,由于引脚数目蛮多的,刚开始制作电路板前最好先进行引脚的测试。硬件的测试是电路原理能不能实现的基础,所以要认真的调试,依次仔细检查,直到正常工作。四 四路抢答器系统软件设计根据电路原理图,编写设计程序,我们可以用汇编编写,也可以用C语言编写,本次设计采用C语言编写。综合中断、定时器计
12、数器TMR1有应用等所写知识设计编写,程序清单见第 页。五 系统软件调试电路焊完后,程序写完后,开始进行系统测试。首先,将仿真无误的程序烧进单片机芯片,然后装上电路板上进行验证。如果不行,再进行检测,测出是硬件问题,还是程序问题,直到把所有的问题都解决了为止。本次课程设计,经验证成功以后,通过更改程序,付加了秒表功能,使抢答器又多出了个功能。经调试没有错误后,终于比较完整的完成了任务。六 课程设计总结本次课程设计,对我来说可谓受益非浅。这种经历可以说是从来就没有的。首先,这次课程设计虽然历时两个星期。但我们真正可以开始准备的只有四五天。从星期天那天,开始焊,一直到星期四下午,可以说,我除了吃饭
13、、睡觉,剩下就都是在焊电路,从来也没有这么专注过一件事情,而且一干就是连继好几天,可见这门课程确定有具大的吸引力。再者,通过这次设计,我发现我很多问题。比如,在焊的过程中一不小心就把电路给焊错了,还有一个问题就是,可能是因为第一次做,没经验,排版有点不好,导致后面的接线复杂,所以更容易出错了。总之,经过本次课程设计,我收获了经验,对焊工有了更浓厚的兴趣。本次作业,可以说一波三折。本来花了三天的时间把电路焊好了,烧进程序后,发现根本不能用,后面经过检查电路,发现许多线都接错了,经过重新修改。再次验证后,依然不行,几个数码管出现了乱码现象。经同学的建议,将数码管换掉,重连后,再测试不是不行。当时,
14、我特别苦恼,在陈武同学的鼓励下,最后,经他帮忙检查后,发现是我的程序有问题,就在这关键的最后一天,终于成功了,虽然接解有些不良,但还是实现了预期的功能,在此特别感谢陈武同学。经过本次实验,我对单片机的学习有了阶段性的总结,经过了软硬件的结合,更加具体更加全面地学会了单片机的应用。应该说,这次的作业为以后做毕业设计奠定了基础,有了这次经验,相信以后的学习会越来越上手。七 参考文献 a. PIC单片机原理及应用李荣正刘启中陈学军北京航空航天大学出版社b. 模拟电子技术基础教程华成英清华大学出版社c. 数字电子技术基础阎石 高等教育出版社d. C程序设计(第三版)潭浩强清华大学出版社八 程序清单#i
15、nclude _CONFIG(0xFF32);void init(void);void keyscan(void);void delay(int);void delay1(int);int i=30,j,k,m=60,flag=0,flag1,jishu;char TABLE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f;char TABLE1=0x76,0x79,0x38,0x3f;void main()init();while(1)if(flag=0)PORTD=TABLE10;PORTC=0Xfe;delay(2);PORTD=TA
16、BLE11;PORTC=0Xfd;delay(2);PORTD=TABLE12;PORTC=0Xfb;delay(2);PORTD=TABLE12;PORTC=0Xf7;delay(2);PORTD=TABLE13;PORTC=0Xef;delay(2);keyscan();if(flag=2)PORTD=TABLE0;PORTC=0Xfe;delay(2);PORTD=TABLEi/10;PORTC=0Xfd;delay(2);PORTD=TABLEi%10;PORTC=0Xfb;delay(2);PORTD=TABLEm%10;PORTC=0Xf7;delay(2);PORTD=TABLE
17、m%10;PORTC=0Xef;delay(2);keyscan();if(flag=1)PORTD=TABLEjishu/10000;PORTC=0Xfe;delay(2);PORTD=TABLEjishu%10000/1000;PORTC=0Xfd;delay(2);PORTD=TABLEjishu%10000%1000/100;PORTC=0Xfb;delay(2);PORTD=TABLEjishu%10000%1000%100/10;PORTC=0Xf7;delay(2);PORTD=TABLEjishu%10;PORTC=0Xef;delay(2);keyscan();void in
18、it()TRISB=0XFF;TRISC=0X00;TRISD=0X00;TRISE=0X00;RE0=1;PORTC=0xff;PORTA=0X0F;PORTD=0XFF;INTCON=0xc0;PIE1=0x01;TMR1L=(65536-10000)%256;TMR1H=(65536-10000)/256;TMR1ON=0;void keyscan()if(flag=2) if(RB0=0)delay(10); if(RB0=0)k=1;while(1)PORTD=TABLE1;PORTC=0Xfe;delay(1);PORTD=TABLEi/10;PORTC=0Xfd;delay(1)
19、;PORTD=TABLEi%10;PORTC=0Xfb;delay(1);PORTD=TABLEm/10;PORTC=0Xf7;delay(1);PORTD=TABLEm%10;PORTC=0Xef;delay(1);if(RB1=0)delay(10); if(RB1=0)k=1;while(1)PORTD=TABLE2;PORTC=0Xfe;delay(1);PORTD=TABLEi/10;PORTC=0Xfd;delay(1);PORTD=TABLEi%10;PORTC=0Xfb;delay(1);PORTD=TABLEm/10;PORTC=0Xf7;delay(1);PORTD=TAB
20、LEm%10;PORTC=0Xef;delay(1);if(RB2=0)delay(10); if(RB2=0)k=1;while(1)PORTD=TABLE3;PORTC=0Xfe;delay(1);PORTD=TABLEi/10;PORTC=0Xfd;delay(1);PORTD=TABLEi%10;PORTC=0Xfb;delay(1);PORTD=TABLEm/10;PORTC=0Xf7;delay(1);PORTD=TABLEm%10;PORTC=0Xef;delay(1);if(RB3=0)delay(10); if(RB3=0)k=1;while(1)PORTD=TABLE4;P
21、ORTC=0Xfe;delay(1);PORTD=TABLEi/10;PORTC=0Xfd;delay(1);PORTD=TABLEi%10;PORTC=0Xfb;delay(1);PORTD=TABLEm/10;PORTC=0Xf7;delay(1);PORTD=TABLEm%10;PORTC=0Xef;delay(1); if(RB4=0)delay(10); if(RB4=0)while(!RB4);flag+;if(flag=3)flag=0; if(RB5=0)delay(10); if(RB5=0)while(!RB5);flag1+;if(flag1=2)flag1=0;if(f
22、lag=1|flag=2) if(flag1=1)TMR1ON=1;jishu=0;elseTMR1ON=0; void delay(int x)int a,b;for(a=x;a0;a-)for(b=110;b0;b-);void delay1(int x)int a,b;for(a=x;a0;a-)for(b=110;b0;b-);void interrupt time0(void)TMR1IF=0;TMR1L=(65536-10000)%256;TMR1H=(65536-10000)/256; if(flag=1) jishu+;if(jishu=20000)jishu=0; if(flag=2) j+;if(j=100)j=0; if(k=1)m-;if(m=-1)RE0=0; INTCON=0x80;delay1(1000);RE0=1;if(k=0)i-;if(i=-1)INTCON=0x80;RE0=0;delay1(200);RE0=1;delay1(200);RE0=0;delay1(200);RE0=1;while(1)PORTD=TABLE0;PORTA=0X01;PORTD=TABLE0;PORTA=0X02;