多路抢答器的设计与制作课程设计报告.docx
《多路抢答器的设计与制作课程设计报告.docx》由会员分享,可在线阅读,更多相关《多路抢答器的设计与制作课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
![多路抢答器的设计与制作课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/7/63c20072-15b6-4b86-868c-93513a03717e/63c20072-15b6-4b86-868c-93513a03717e1.gif)
多路抢答器的设计与制作课程设计报告
电气与电子信息工程学院
单片机课程设计
设计题目:
抢答器的设计与制作
专业班级:
电子信息工程2011级
(1)班
学 号:
201140210122
姓名:
叶文
指导教师:
李玉平王海华
设计时间:
2014/4/28~2014/5/9
设计地点:
K2—407
单片机课程设计成绩评定表
姓名
黄璐
学号
200840210221
专业班级
电子信息工程2011级
(1)班
课程设计题目:
抢答器的设计与制作
课程设计答辩或质疑记录:
1、
2、
成绩评定依据:
实物制作(20%):
课程设计考勤情况(10%):
课程设计答辩情况(20%):
完成设计任务及报告规范性(50%):
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
2013年5月29日
目录
第一部分课程设计任务书2
第二部分课程设计5
一、整体功能要求5
1.1设计要求5
二、整体方案设计5
三、设计框图6
四、硬件设计6
1.工作原理6
2.STC89C52单片机工作原理6
3.电路模块实现9
五、软件设计10
1.程序流程图10
2.主程序10
六、调试13
1建立工程和仿真图13
2.keil软件调试结果13
3.proteus软件仿真结果14
七、实物的组装与调试15
1.实物的组装15
2.调试16
八、心得体会16
附录18
1.电路原理图18
2.子程序19
3.元件清单21
参考文献22
第一部分课程设计任务书
2013~2014学年第2学期
学生姓名:
叶文专业班级:
电子信息工程2011级
(1)班
指导教师:
李玉平、王海华工作部门:
电信学院基础教研室
一、课程设计题目:
单片机课程设计
1.简易心率检测仪
6.遥控开关
2.电子时钟的设计
7.水温控制系统的设计
3.电子密码锁的设计
8.音乐播放器的设计
4.数字式温度计设计
9.多路数据采集系统
5.数字式电压表设计
10自选
二、课程设计内容
1.根据具体设计课题的技术指标和给定条件,以单片机为核心器件,能独立而正确地进行方案论证和电路设计,要求概念清楚、方案合理、方法正确、步骤完整;
2.熟悉、掌握各种外围接口电路芯片的工作原理和控制方法;
3.熟练使用单片机汇编语言进行软件设计;
4.熟练使用Proteus、Keil软件进行仿真电路测试;
5.熟练使用Protel软件设计印刷电路板;
6.学会查阅有关参考资料和手册,并能正确选择有关元器件和参数;
7.编写设计说明书,参考毕业设计论文格式撰写设计报告。
注:
详细要求和技术指标见附录。
三、进度安排
1.时间安排
序号
内容
学时安排(天)
1
方案论证和总体设计
2
2
硬件设计
2
3
软件设计
2
4
仿真测试及PCB设计
1
5
撰写和打印设计报告
1
合计
10
设计指导答辩地点:
K2——407仿真实验室
2.执行要求
单片机应用系统设计与制作多个选题,每组不超过6人,为避免雷同,在设计中每个同学所采用的方案不能一样。
四、基本要求
(1)根据要求确定系统设计方案;
(2)绘制系统框图、系统原理总图,印刷电路板图,列出元器件明细表;
(3)计算电路参数和选择元器件,画出软件框图,列出程序清单;
(4)仿真,测试与修改调整;
(5)误差分析与调整;
(6)写出使用说明书;
(7)对设计进行全面总结,写出课程设计报告。
五、课程设计考核办法与成绩评定
根据过程、报告、答辩等确定设计成绩,成绩分优、良、中、及格、不及格五等。
评定项目
基本内涵
分值
设计过程
考勤
10分
答辩
回答问题情况
20分
实物测试
正常无故障运行
40分
设计报告
完成设计任务、报告规范性等情况
30分
90~100分:
优;80~89分:
良;70~79分:
中;60~69分,及格;60分以下:
不及格
第二部分课程设计
一、整体功能要求
1.1设计要求
(1)以单片机为核心,设计一个8位竞赛抢答器:
同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。
(2)设置一个系统清除和抢答控制开关S,开关由主持人控制。
抢答器具有锁存与显示功能。
即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。
(3)当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。
(4)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
二、整体方案设计
主持人按下开关,电路开始正常计时,计时电路是由单片机内部的定时器来完成的。
在40秒内,若有按键按下则通过中断电路使计数器停止计数,将按键号码输入单片机内,再通过数码管显示电路将该号按键显示出来。
在判断是哪号按键被按下时,想到了两种方案。
方案一:
单片机不断进行按键扫描,来判断按键是否按下。
方案二:
将开关的状态接上锁存器送入单片机P1口,同时,将锁存器的输出端接入与门来判断是否有键按下,若按下,则锁存器将按键状态记下。
显然,方案一实现起来,电路简单,但当两个按键几乎同时按下时,只能判断出按键在前的选手,同时存在着按键抖动的问题。
而方案二电路较复杂,但锁存器优先将按键情况给锁存了,这样避免了方案一出现的问题,同时增加了IO口的驱动能力。
因此我们采用了第二种方案。
三、设计框图
四、硬件设计
1.工作原理
当主持人按下开始建后抢答开始,定时抢答时间为40秒,于此同时锁存器打开,当键盘输入模块任意一按键按下,按键信号通过锁存器将P1口相应的位拉低,通过与门与P1口相接的控制电路的输出也会输出低电平,在没有按键按下的情况下P1口为高电平,这样当有按键按下时,控制电路实现了一个从高电平到低电平的跳变,由于控制电路的输出接到外部中断0并且中断0被配置为下降沿触发,这样一旦有按键按下立即触发中断,进而程序转向中断服务子程序,在中断服务子程序中第一条指令就是关闭锁存器,从而屏蔽在这个按键之后按下的按键,从而实现抢答的目的。
此外中断程序中将读取P1口的状态,进而决定按下的是几号键,在中断中还驱动了蜂鸣器工作并且工作时间为4秒,借此表示抢答成功,在抢答成功时定时器停止计时,并将抢答的时间与抢答的选手显示在数码管上。
若要进行下一轮的抢答需主持人先按下复位建以清除显示然后按下开始建。
若在相应抢答时间内没有人抢答,蜂鸣器开始工作并且工作时间为8秒,借此表示本次抢答失败。
主持人需从新按下开始键,新一轮的抢答才能开始。
2.STC89C52单片机工作原理
STC89C52单片机具有片内E2PROM,是真正的单片机,由于不需要外接EPROM,所以应用非常普遍。
Stc89c52引脚图
STC89C52的主要工作特性如下:
片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为10000次;
片内数据存储器内含256字节的RAM;
具有32根可编程I/O口线;
具有3个可编程定时器;
中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;
串行口是具有一个全双工的可编程串行通信口;
具有一个数据指针DPTR;
低功耗工作模式有空闲模式和掉电模式;
具有可编程的3级程序锁定位;
单片机STC89C52工作电源电压为5(1+0.2)V,且典型值为5V;
单片机STC89C52最高工作频率为24MHz,单片机正常工作时,都需要有一个时钟电路和一个复位电路。
STC89C52的内部结构图如图4所示:
STC89C52内部结构图
(1)时钟电路
时钟电路用于产生单片机工作所需要的时钟信号。
设计中采用了比较典型的内部时钟方式,如图6所示:
其工作原理是:
片内高增益反向放大器XTAL1、XTAL2外接作为反馈元件的晶体(呈感性)与电容组成的并联谐振回路构成一个自激振荡器向内部时钟电路提供振荡时钟。
振荡器的频率主要取决于晶体的振荡频率,一般晶体可以在1.2-12MHz之间任选。
电容的大小影响振荡器电路的稳定性和快速性,其值有微调作用,通常取30pF左右。
在设计电路板时,晶振和电容应尽可能的靠近芯片,以减小分布电容,保证振荡器振荡的稳定性[7]。
单片机外接晶体的接法
(2)复位电路
复位是单片机的初始化操作,其主要功能是将程序计数器PC初始化为0000H,使单片机从0000H单元开始执行程序。
复位操作不影响片内RAM的内容,但是对SFR中的一些寄存器有影响。
图7各种复位电路
3.电路模块实现
(1)计时模块
抢答时间的倒计时采用单片机内部的定时器来实现。
首先,得产生1秒的定时,我们知道1秒对于定时器记满一次是达不到的,因此,我们定时50ms,即在初值的基础上计50000个数后,定时器溢出,此时刚好就是50ms中断一次,当产生20次50ms的定时器中断变认为是1s。
然后对time赋值为40,当计完1s时间后,time-1,这样就完成了计时功能。
(2)判断哪号按键按下模块
当选手按键模块任意一按键按下,按键信号通过锁存器将P1口相应的位拉低,通过与门与P1口相接的控制电路的输出也会输出低电平,后将其状态送入p3口,在经过锁存器,将其通过数码管显示出来。
(3)屏蔽抢答
当有人按下键后,其控制电路就会接受到低电平,由于控制电路的输出接到外部中断0并且中断0被配置为下降沿触发,这样一旦有按键按下立即触发中断,进而程序转向中断服务子程序,在中断服务子程序中关闭了锁存器,从而屏蔽在这个按键之后按下的按键,从而实现抢答的目的。
五、软件设计
1.程序流程图
2.主程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitLE=P3^4;
sbitdula=P3^0;
sbitwela=P3^1;
sbitspeak=P2^3;
bitstart=0;
bitrest=0;
bitflag=0;
ucharperson=0;
ucharnum=0;
uchartime=0;
ucharc=0;
uchar
table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar
table1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
voidmain()
{init();
while
(1)
{if(time==0)
start=~WR;
rest=~RD;
if(start==1)
{time=40;
start=0;
TR0=1;
LE=1;
}
if(rest==1)
{time=0;
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
num=0x00;
P2=0xff;
}
if(time!
=0)
if(flag==1)
{flag=0;
speak=0;
delay_ms(5000);
speak=1;
switch(person)
{case0xfe:
num=0x01;speak=0;
delay_ms(5000);
speak=1;break;
case0xfd:
num=0x02;break;
case0xfb:
num=0x03;break;
case0xf7:
num=0x04;break;
case0xef:
num=0x05;break;
case0xdf:
num=0x06;break;
case0xbf:
num=0x07;break;
case0x7f:
num=0x08;break;
default:
;
}
}
display(0,time/10);
display(1,time%10);
display(2,num);
}
}
六、调试
1建立工程和仿真图
(1)打开proteus软件,新建一个工程,然后在工作窗口内画好原理图并保存。
(2)打开keil软件新建一个工程,选择所用单片机的型号,然后新建一个文件保存为.c文件并添加到工程中去,开始写源程序,写好后编译生成Hex文件。
(3)将生成的Hex文件下载到单片机内,观察结果,并调试,观察数码管上是否有相应正确的变化。
若结果不正确,思考问题的所在,修改源程序,继续调试,直到观察到正确的运行结果。
2.keil软件调试结果
3.proteus软件仿真结果
七、实物的组装与调试
1.实物的组装
由于班上每组同学设计题目,设计电路都不一样,所以制作pcb板的想法也就给抹杀了,采取的是手工焊接。
而对于我们本组来说,电路模块还是比较复杂的,而选取的电路板对我们来说,就小了很多。
这是我们组对元器件的摆放及布局增添了很大的难度。
(1).首先是对元器件的认知。
Ⅰ按键检测
弹性小按键被按下时闭合,松手后自动断开;将数字万用表置于二极管档,接按键任意两个脚,听到响声,则证明两脚是导通的。
按键有四个脚,分别两组导通。
在焊接时,应只将一组中任意的一个脚接地,另一组的一脚接入电路。
Ⅱ数码管检测
数码管引脚图
将数字万用表至于二极管档,黑表笔接在1脚,然后用红表笔去接触其他各引脚,发现数码管没有任何显示,此时有两个可能,数码管是坏的或是红黑表笔接反了。
此时交换红黑表笔,去接触其他各引脚,发现数码管最左边有显示,所以排除数码管坏掉的可能,我们就可以判读数码管为共阳极结构类型,同时1脚为最左边的数码管的位选
同时1脚为数码管最左边的位选短,让后将红表笔接1脚,依次可以判定出数码管的段选a,b,c,d,f,e,g,dp,依照此步骤,便可将数码管各引脚检测出来,引脚图如右侧。
(2).实物焊接
小小的板,芯片勉强给装上去了,但是焊接的确是个很大的难题。
因此我们采用的是在芯片附近连接上排针,在利用跳线来完成电路的连接。
焊接电路如下图。
焊接实物图
2.调试
电路焊接完成后,利用跳线完成电路的全部连接。
加上5v电压,只有单片机工作的指示灯亮着,而数码管没有任何反应。
于是,开始排查电路中那个模块出现了问题。
首先当然想到的是数码管总存在着虚焊的点。
利用万用表,测着每个引脚与接地短的电压,发现了果然有几个点存在着虚焊现象。
排除这一问题后,加上电压,数码管显示000。
但当按键按下,数码管却没开始工作,继续排查原因。
结果发现在锁存器u3与其连接时,引脚接错。
将其改正后,电路基本上实现了我们所需的抢答功能。
当我们尝试着让每个键是否能正常抢答时,发现2号按键按下没有什么反应。
刚开始想着是否是按键出现了问题,利用万用表检测,发现按键工作状态是对的。
最终将问题锁定在了跳线上,换了跟跳线。
2号按键便能正常工作了。
我们的抢答器成功了。
八、心得体会
本次课程设计和以往的两次都不同,实现的项目,只需用单片机来实现,对于做什么,完全可以自己决定。
因此我们多了选题这个步骤。
在选题中,我们到图书馆,网上查询资料,最终我们小组决定做抢答器。
在实习过程中发现了这学期课程中所学的单片机知识只是其中的冰山一角,很多都需要我们学着去扩展。
在设计过程中,我们学的用到的都是我们常用的器件,锁存器74hc153,与门74hc08,数码管。
这在之前的频率计中对这些芯片已经有了一定的了解了。
调试过程是一个考验人耐心的过程。
而自己的马虎大意,导致在电路仿真时,停留了很长时间。
仿真时,数码管就是不亮,在修改了n次电路问题之后,还是没能驱动它。
最终在请教同学后,才知道是自己的程序的问题——While语句后直接添加了“;”。
这个问题我曾在看书时,书中还特意强调了while语句的作用,结果自己还是把它抛到脑后了。
在制作实物的时候,我们也遇到了不少问题。
但在大家的耐心讨论下,这些问题我们都一一解决了。
最终,我们的抢答器也成功制作出来了。
这次实习,让我们懂得了要熟练地掌握课本上的知识,这样才能对实验中出现的问题进行分析解决。
同时,我们也学到了团结合作的精神。
附录
1.电路原理图
2.子程序
(1)延时程序
voiddelay_ms(ucharxms)
{uchari,j;
for(i=0;i<=xms;i++)
for(j=0;j<=110;j++);
}
(2)显示程序
voiddisplay(ucharwei,ucharduan)
{P0=table0[duan];
dula=1;
dula=0;
P0=table1[wei];
wela=1;
wela=0;
delay_ms(50);
P0=0x00;
wela=1;
wela=0;}
(3)计时器赋初值程序
voidT0_init()
{TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
TMOD=0x01;
EA=1;
ET0=1;
}
(4)中断初始化程序
voidint0_init()
{IT0=1;
EX0=1;
IT1=1;
EX1=1;
}
(5)锁存上一状态程序
voidinit()
{T0_init();
int0_init();
LE=0;
}
(6)1s计时程序
voidisr_t0()interrupt1
{TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
c++;
if(c>=20)
{c=0;
if(time!
=0)
time--;
}
}
(7)复位程序
voidisr_ex0()interrupt0
{LE=0;
person=P1;
flag=1;
TR0=0;}
3.元件清单
表3-1所需元器件表
组件
数量
组件
数量
STC89C52
一片
20pf电容
两个
AT24C02
一片
103排阻
一个
LCD1602
一个
10k电阻
三个
12M晶振
一个
20uf极性电容
一个
按键
17个
电源接口
一个个
蜂鸣器
一个
LED灯
一个
LED灯
一个
电源接口
一个
LED灯
一个
5v电源
一个
参考文献
[1]张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:
高等教育出版社,2010
[2]王幸之,钟爱琴,王雷,王闪.AT89系列单片机原理与接口技术[M].北京:
北京航空航天大学出版社,2004:
62-67.
[3]郭天祥.51单片机C语言教程.北京:
电子工业出版社.
[4]胡汉才.单片机原理及接口技术[M].北京:
清华大学出版社,1996
[5]张毅刚,彭喜元,姜守达,乔立岩.新编MCS-51单片机应用设计[M].哈尔滨:
哈尔滨工业大学出版社,2003:
223-231.
[6]何立民.单片机高级教程-应用与设计[M].北京:
北京航空航天大学出版社,2000.8:
103-109.
[7]李建忠.单片机原理与应用[M].西安:
西安电子科技大学出版社,2002,2:
121-123.
[8]戴佳,苗龙,陈斌.51单片机应用系统开发典型实例[M],北京:
中国电力出版社,2005,7:
121-137.
[9]张洪润,易涛.单片机应用技术教程[M].北京:
清华大学出版社,2003,10:
119-122.
[10]蔡朝洋.单片机控制实习与专题制作[M].北京:
北京航空航天大学出版社,2006,11:
317-323.
[11]丁明亮,唐前辉.51单片机应用设计与仿真--基于KeilC与Proteus
北京:
北京航空航天大学出版社
[12]程相波,卫安军.基于MCS—51单片机的八路抢答器设计方法研究[J].北京工业职业技术学院学报,2007,(02):
31-34.
........忽略此处.......