八路抢答器电子线路设计附C语言程序.docx
- 文档编号:23749457
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:28
- 大小:649.91KB
八路抢答器电子线路设计附C语言程序.docx
《八路抢答器电子线路设计附C语言程序.docx》由会员分享,可在线阅读,更多相关《八路抢答器电子线路设计附C语言程序.docx(28页珍藏版)》请在冰豆网上搜索。
八路抢答器电子线路设计附C语言程序
应用科学学院
电子系统课程设计
*****
学号:
24号
专业班级:
嵌入式10
*******
设计题目:
八路抢答器
完成时间:
2013年07月01日
功能(20%)
实训(60%)
设计报告(20%)
总评
简易难度
(10%)
控制方式
(10%)
原理图
(10%)
装配图
(10%)
元器件
焊接
(10%)
自控质量
(10%)
功能实现
(10%)
质量评估
(10%)
格式
(5%)
内容(15%)
指导教师签名:
摘 要
数字抢答器由主体电路与扩展电路组成。
用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。
通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。
经过布线、焊接、调试等工作后数字抢答器成形。
单片机体积小价格低,应用方便,稳定可靠。
单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。
关键字:
抢答电路报警电路倒计时电路
引言:
单片机的发展史
单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。
1.SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。
“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。
在开创嵌式系统独立发展道路上,Intel公司功不可没。
2.MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:
不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。
它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。
从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。
在发展MCU方面,最著名的厂家当数Philips公司。
3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。
随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。
因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
单片机的发展单片机作为微型计算机的一个重要分支,应用面很广,发展很快。
自单片机诞生至今,已发展为上百种系列的近千个机种。
第一章数字抢答器的概述及制作要求
1.1数字抢答器的概述
对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。
抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。
选手们都站在同一个起跑线上,体现了公平公正的原则。
1.2设计任务与要求
基本要求:
1.给主持人设置一个开关,用来控制系统的重启(编号显示数码管重置初始时间)和抢答器的倒计时开始。
2.抢答器显示和倒计时的功能。
抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。
此外,要封锁输入电路,禁止其他选手抢答。
发挥部分:
1.抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如20秒)。
当节目主持人启动“开始”键后,要求定时器立即减计时,并用显示器显示。
2.参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号,并保持到主持人将系统清零为止。
3.如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统自动回复到初始倒计时时间,并封锁输入电路,禁止选手超时后抢答。
第二章单片机芯片的选择及抢答器方案
2.1单片机芯片的选择
单片机选用的是Atmel公司推出的AT89C52,它是一种低功效、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
在单芯片上拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89C52具有以下标准功能:
8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器串口、中断继续工作。
掉电保护方式下RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
而且,它还具有一个看门狗(WDT)定时/计数器。
如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。
T89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
单片机管脚说明:
AT89C52
引脚
功能
P3.0
RXD(串行口输入),蜂鸣器报警
P3.1
TXD(串行口输出),警示灯报警
P3.2
INT0(外部中断0输入),用于倒计时
P0.0~P0.7
数码管段选
P2.0~P2.3
数码管位选
P1.0~P1.7
按钮抢答功能键
RST
复位端
XTAL1,XTAL2
振荡电路
2.2模块性能分析
模块部分主要分为AT89C52芯片、独立式键盘、LED数码管显示部分,下面对这后两部分进行介绍,其中对LED七段数码管显示器做详细介绍,并根据实际工作情况采用合适的工作方式。
2.2.1独立式键盘
利用8个常开按钮开关S1~S8和8只电阻R1~R8组成抢答器的输入电路。
S1~S8为自复式常开按钮开关,分别作为8位抢答按钮,与它相连的8只电阻为下拉电阻,以保证按钮未按下时,锁存器的输入端为低电平。
当程序执行时,按下按键,七段数码管显示器上即显示相应的是哪个组按下抢答。
2.2.2LED数码管显示
译码器的逻辑功能是将每一个输入的二进制代码译成对应的输出高、低电平信号,是编码器的反操作。
数码管可以用TTL或CMOS集成电路直接驱动,所以使用译码器将BCD编码译成数码管所需要的驱动信号,以便使数码管用十进制数字显示出BCD编码表示的数值。
七段数码管的段排列和内部结构如图所示七段数码管的段排列和内部部结构
点亮显示器分为静态和动态显示两种方法。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或是截止。
例如,其段数码管的a、b、c、d、e、f、导通,g截止,则显示0.这对这种显示方式每一位都要有一个8位输出口控制,所占硬件较多,一般用于显示位数较少(很少)的场合。
当位数较多时,用静态显示所需的I/O过多,一般采用动态显示方法。
在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。
如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。
在老师的指导下我选择了常用的单片机仿真软件proteus6.9以及keil进行仿真。
第三章硬件电路设计
3.1总体设计
根据抢答器的基本功能,可以设计出如下:
3.1总体设计
图3-1总体设计
3.2外部振荡电路的设计
图3-2外部振荡电路
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率为11.0592HZ。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
3.3复位电路的设计
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:
图3-3复位电路
在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。
软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
3.4显示电路的设计
显示电路使用了七段数码管7SEG-MPX4-CC,属于共阴极的,由高电平点亮。
图3-4阴极七段数码管
3.5按钮输入电路的设计
抢答器的输入按钮使用常开开关:
图3-5抢答按键
这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”
现象就可以了。
这里采用最常用的方法即延时法,其的原理为:
因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
3.6报警电路的设计
这里能利用程序来控制单片机P3.1口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。
图3-6报警电路
第四章系统软件设计
4.1抢答器流程图
流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。
总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。
流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。
流程图的基本结构为顺序结构,分支结构(又称选择结构),循环结构。
为便于识别,绘制流程图的习惯做法是:
方框表示:
要执行的处理(Process)
平行四边型表示:
代表资料输入(Input)
不规则图形代表资料输出(Output)或报表输出(Print)
菱形表示:
决策或判断(例如:
If...Then...Else)
图4-1-1抢答器主程序流程图
4.2抢答器程序
#include
#defineuintunsignedint
#defineucharunsignedchar
//共阴极数码管编码表0-f显示
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//变量定义
sbitBEEP=P3^1;
sbitstart_stop=P3^2;
sbitreset=P3^3;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitkey6=P1^5;
sbitkey7=P1^6;
sbitkey8=P1^7;
sbitstate=P3^0;
bitstart_stop_flag=0;
bitkey1_flag=0;
bitkey2_flag=0;
bitkey3_flag=0;
bitkey4_flag=0;
bitkey5_flag=0;
bitkey6_flag=0;
bitkey7_flag=0;
bitkey8_flag=0;
bitreset_flag=0;
bitaction=0;
ucharsecond=20;
uchartimer0_count=0;
ucharnumber=0;
ucharnumber_display=0;
uintflag=1;
//延时函数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
//蜂鸣器发声延时
voidDelayMS(uintx)
{
uchart;
while(x--)
for(t=0;t<100;t++);
}
//数码管显示驱动函数
voiddisplay(ucharnumber,ucharsecond)
{
ucharsecond_first,second_second;
second_first=second/10;
second_second=second%10;
P0=0x00;
P2=0xfe;
P0=table[number];
delay
(2);
P0=0x00;
P2=0xfd;
P0=0x40;
delay
(2);
P0=0x00;
P2=0xfb;
P0=table[second_first];
delay
(2);
P0=0x00;
P2=0xf7;
P0=table[second_second];
delay
(2);
P0=0x00;
}
//蜂鸣器响应按周期t发音
voidPlay(uchart)
{
uchari;
for(i=0;i<1;i++)
{
BEEP=~BEEP;
DelayMS(t);
}
BEEP=0;
}
//开始键扫描函数
voidstart_stop_keyscan()
{
if(start_stop==0)
{
delay(8);
if((start_stop==0)&&(!
start_stop_flag))
{
start_stop_flag=1;
action=1;
TR0=1;
state=0;
}
}
else
{
start_stop_flag=0;
}
}
//八位抢答键扫描函数
ucharkey_scan8()
{
if(key1==0)
{
delay(8);
if((key1==0)&&(!
key1_flag))
{
key1_flag=1;
number=1;
number_display=number;
}
}
else
{
key1_flag=0;
number=0;
}
if(key2==0)
{
delay(8);
if((key2==0)&&(!
key2_flag))
{
key2_flag=1;
number=2;
number_display=number;
}
}
else
{
key2_flag=0;
number=0;
}
if(key3==0)
{
delay(8);
if((key3==0)&&(!
key3_flag))
{
key3_flag=1;
number=3;
number_display=number;
}
}
else
{
key3_flag=0;
number=0;
}
if(key4==0)
{
delay(8);
if((key4==0)&&(!
key4_flag))
{
key4_flag=1;
number=4;
number_display=number;
}
}
else
{
key4_flag=0;
number=0;
}
if(key5==0)
{
delay(8);
if((key5==0)&&(!
key5_flag))
{
key5_flag=1;
number=5;
number_display=number;
}
}
else
{
key5_flag=0;
number=0;
}
if(key6==0)
{
delay(8);
if((key6==0)&&(!
key6_flag))
{
key6_flag=1;
number=6;
number_display=number;
}
}
else
{
key6_flag=0;
number=0;
}
if(key7==0)
{
delay(8);
if((key7==0)&&(!
key7_flag))
{
key7_flag=1;
number=7;
number_display=number;
}
}
else
{
key7_flag=0;
number=0;
}
if(key8==0)
{
delay(8);
if((key8==0)&&(!
key8_flag))
{
key8_flag=1;
number=8;
number_display=number;
}
}
else
{
key8_flag=0;
number=0;
}
if(number_display!
=0)
{
return1;
}
else
{
return0;
}
}
//复位键扫描函数
voidreset_keyscan()
{
if(reset==0)
{
delay(8);
if((reset==0)&&(!
reset_flag))
{
reset_flag=1;
number_display=0;
state=1;
}
}
else
{
reset_flag=0;
}
}
//主函数
voidmain()
{
uintt;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
while
(1)
{
if(number_display!
=0)
Play(number_display/2);//蜂鸣器发声
start_stop_keyscan();
reset_keyscan();
while(action)
{
while(!
key_scan8())
{
display(number_display,second);
if(second==0)
{
second=20;
break;
}
}
TR0=0;
display(number_display,second);
action=0;
break;
}
display(number_display,second);
}
}
//中断服务函数
voidtimer0()interrupt1
{
uinti;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
timer0_count++;
if(timer0_count==20)
{
timer0_count=0;
second--;
if(second==0)
{
Play
(2);
TR0=0;
number_display=0;
state=1;
action=0;
}
}
}
第五章产品的样品
5.1实物图
图5-1产品实物图
5.2PCB版图
图5-2PCB版图
5.3实物焊接图
图5-3焊接实物图
结束语
我在这一次抢答器的设计过程中,很是受益匪浅。
通过对自己在大学三年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。
这为自己今后进一步深化学习,积累了一定宝贵的经验。
撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。
培养了我运用所学知识解决实际问题的能力。
通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。
这个实验十分有意义我获得很深刻的经验。
通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。
我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。
学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。
这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。
参考文献
1.单片机课程设计实例指导,李光飞,北京航天航空大学出版社,2004
2.单片机原理及接口技术(第3版),李朝青,北京航空航天大学出版社,2002
3.单片机C程序设计及应用实例,胡伟,人民邮电出版社,2003
4.单片机系统设计与实例指导,冯育长,西安电子科技大学出版社,2007
5.电子电路及电子器件,郭培源,高等教育出版社.,2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八路 抢答 电子线路 设计 语言 程序