4路抢答器设计.docx
《4路抢答器设计.docx》由会员分享,可在线阅读,更多相关《4路抢答器设计.docx(19页珍藏版)》请在冰豆网上搜索。
4路抢答器设计
课程设计说明书
(2012/2013学年第二学期)
课程名称:
单片机应用
题目:
4路抢答器设计
专业班级:
电气二班
学生姓名:
隋宇
学号:
100062214
指导教师:
岑毅南、苗敬利、王静爽等
设计周数:
两周
设计成绩:
2013年7月12日
目录
一、课程设计目的-------------------------------------2
二、课程设计任务及要求-------------------------------2
2.1原始数据及主要任务--------------------------2
2.2技术要求------------------------------------2
三、设计方案-----------------------------------------3
3.1元器件简介-----------------------------------4
四、系统总原理图--------------------------------------5
五、单元电路设计--------------------------------------5
4.1抢答信号显示和倒计时显示电路设计-------------5
4.2警报发生器电路--------------------------------6
4.3按键电路--------------------------------------6
4.4指示灯电路-------------------------------------7
六、主程序流程图----------------------------------8
6.1参考程序-------------------------------------8
七、所用器材---------------------------------------16
八、课程设计总结-----------------------------------17
九、参考文献---------------------------------------17
十、评语及成绩--------------------------------------18
一、课程设计目的
通过长达两周的课程设计,加深对《单片机》课程所学理论知识的理解,运用所学理论知识解决实际问题。
结合课程设计的内容,学会利用Protel软件绘制电路原理图和PCB图,掌握电路的设计与组装方法,进行软硬件联机调试。
学会查阅相关专业技术资料及设计手册,提高进行独立设计的能力并完成课程设计相关任务。
二、课程设计任务及要求
2.1原始数据及主要任务
1.设计键盘输入电路;
2.设计显示输出电路;
3.掌握响应外部中断的原理;
4.编写程序;
5.利用Protel设计硬件电路原理图和PCB图;
6.软硬件联机调试;
7.书写设计报告。
2.2技术要求
1.设计四个抢答台和四个抢答成功指示灯,一个比赛主持人“开始”键和一个抢答指示灯以及一个LED显示器。
2.采用中断和查询结合的方法确定按键的动作。
3.主持人按下“开始”键后,若有人抢答,则抢答指示灯确认有人抢答,并用7段LED显示抢答者的号码(1—4),并同时点亮对应抢答台上的抢答成功指示灯;若10秒内无人抢答,则发出超时报警声,此题作废,主持人可按下“开始”键开始下一题的抢答。
三、设计方案
设置4个按钮,其编号分别是1到4,按钮的编号与选手的编号相对应。
初始时,4个按钮常开,只有当主持人按下开始按键时才可以进行倒计时抢答。
当主持人按下开始按键后,开始倒计时10秒,当4个按钮只要有一个按下即只要有人抢答时,单片机收到信号,抢答成功指示灯点亮,选手前面的指示灯也一同点亮。
通过74LS245进行段选使数码管置显示选手的序号,同时倒计时停止计时,在另一个数码管上显示。
并且当有按键按下后其他选手按键无效。
当选手答完后,由主持人将数码管清零,继续下次抢答。
若10秒内无人抢答,则发出超时报警声,此题作废,主持人可按下“开始”键开始下一题的抢答。
3.1、元器件简介
AT89C51单片机,其内部带有4KB的掩膜ROM。
无需扩展外部程序存储器。
其中:
CVV:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
P3口也可作为AT89C51的一些特殊功能口:
P3.0RXD(串行输入口);P3.1TXD(串行输出口);P3.2/INT0(外部中断0);P3.3/INT1(外部中断1);P3.4T0(记时器0外部输入);P3.5T1(记时器1外部输入);P3.6/WR(外部数据存储器写选通);P3.7/RD(外部数据存储器读选通)。
RST:
复位输入。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器,不管是否有内部程序存储器。
当/EA端保持高电平时,此间内部程序存储器。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
四、系统总原理图
五、单元电路设计
4.1抢答信号显示和倒计时显示电路设计
4.2警报发生器电路
4.3按键电路
4.4指示灯电路
六、主程序流程图
6.1参考程序
#include
#defineunintunsignedint
#defineuncharunsignedchar
//#defineweilunsignedint
//#defineBennunsignedint
sbitwei1=P1^0;
sbitwei2=P1^1;
sbitBeen=P1^2;
sbitAN1=P3^3;
sbitAN2=P3^4;
sbitAN3=P3^5;
sbitAN4=P3^6;
sbitAN5=P3^7;
sbitD1=P1^3;
sbitD2=P1^4;
sbitD3=P1^5;
sbitD4=P1^6;
sbitD5=P1^7;
unchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xcf,0xba,0xaf,0xca,0xfd};
inti,num=9,num1=0,t,t1,Person=0,flag=0,flag1=0,flag2=0,kz=0;
voiddelay(unintz)
{
unintx,y;
for(x=z;x>0;x--)
for(y=55;y>0;y--);
}
voidAll_Init(void)//定时器的初始化
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
EA=1;
}
voidDisplay(intx,inty)//数码管显示
{
wei1=0;
P2=table[x];//显示选手
delay(20);
wei1=1;
wei2=0;
P2=table[y];//显示倒计时
delay(20);
wei2=1;
}
voidDeal_Number(void)//数据处理
{
intge;
ge=num;
Display(Person,ge);
}
voidAnJian(void)//按键检测
{
//##############选手按键###########/
if(flag1==1)
{
if(AN1==0)
{
delay(15);
if(AN1==0)
while(!
AN1);
Person=1;
TR0=0;
TR1=1;
flag=0;
flag1=0;
flag2=1;
D1=0;
D5=0;
}
}
if(AN2==0)
{
delay(15);
if(AN2==0)
{
while(!
AN2);
Person=2;
TR0=0;
TR1=1;
flag=0;
flag1=0;
flag2=1;
D2=0;
D5=0;
}
}
if(AN3==0)
{
delay(15);
if(AN3==0)
{
while(!
AN3);
Person=3;
TR0=0;
TR1=1;
flag=0;
flag1=0;
D3=0;
D5=0;
}
}
if(AN4==0)
{
delay(15);
{
if(AN4==0)
{
while(!
AN4);
Person=4;
TR0=0;
TR1=1;
flag=0;
flag1=0;
flag2=1;
D4=0;
D5=0;
}
}
}
//#############主持人按键#############/
if(AN5==0)
{
delay(15);
if(AN5==0)
{
while(!
AN5);
Person=0;
D1=1;
D2=1;
D3=1;
D4=1;
D5=1;
if(flag1==1)
{
flag1=0;
TR0=0;
}
if(flag2==1)
{
flag2=0;
TR0=0;
}
if(flag==0)TR0=1;
num=9;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
flag1=1;
flag=1;
Been=1;
kz++;
}
}
}
voidBeenRing(void)//蜂鸣器处理
{
if(num==0)
{
Been=0;
delay(20);
}
}
//###########主函数###########/
voidmain()
{
All_Init();
while
(1)
{
AnJian();
if(kz>0)
Deal_Number();
else
Display(0,9);
BeenRing();
}
}
//#############中断函数###############/
voidtimer0()interrupt1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
t++;
if(t==500)
{
t=0;
num--;
if(num==0)
{
//num=9;
TR0=0;
flag1=0;
flag=0;
}
}
}
七、所用器件
AT89C511个
晶振6Mz1个
发光二极管7个
瓷片电容22p2个
独石电容0.22uF5个
1041个
电解电容1.0uF2个
10uF3个
47uF4个
接线端子1个
按钮6个
DB9针形插座1个
插座DIP201个
插座DIP401个
74LS245总线驱动器1个
数码管2个
蜂鸣器1个
PNP三极管1个
NPN三极管2个
导线若干
电阻2001个
4708个
3305个
5K8个
八、课程设计总结
回顾两周的课程设计,付出了很多,也收获了很多,周一至周二主要绘制原理图,紧接着就是看书查找资料,对相关元器件做一些了解,然后编程,由于我底子薄弱了一点,所以花在编程上的时间相对来说多了一点。
在坚持不懈的努力下,终于编好了程序,时间也来到了第二周。
编号程序以后就剩下调试了,把焊接好的板子与装好程序的单片机连接好,然后调试,调试并不是一帆风顺的,起初一点反应都没有,但好事多磨,在一步步的改进下,终于成功了。
当我看到抢答器正常工作时,兴奋不已。
在这几天中,体会到了团结协作的重要性和乐趣,有什么问题很想法拿出来一起探讨与分享,将会有更好的答案,活跃了一个人的思维,丰富了我们的头脑,学会去接受别人,肯定别人,同样也得到了别人的尊重与肯定,除了讨论之外,还需积极独立思考,唯独通过自己的独立思考,才能解决相关问题,才能提高对专业知识的熟悉程度,以后才能学会用,同样这也是我该努力的两个方向。
在此要感谢我的指导老师,感谢老师给我这样的机会锻炼。
在整个设计过程中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
九、参考文献
【1】张毅刚.单片机原理及应用.高等教育出版社
【2】康华光电子技术基础模拟部分高等教育出版社
【3】郭天祥51单片机C语言教程电子工业出版社
【4】康光华电子技术基础模拟部分高等教育出版社
十、课程设计评语及成绩
课程设计
评语
课程设计
成绩
指导教师
(签字)
年月日