课程设计4路抢答器设计.docx
《课程设计4路抢答器设计.docx》由会员分享,可在线阅读,更多相关《课程设计4路抢答器设计.docx(14页珍藏版)》请在冰豆网上搜索。
课程设计4路抢答器设计
课程设计说明书
(2011/2012学年第二学期)
课程名称:
单片机应用
题目:
4路抢答器设计
专业班级:
电气二班
学生姓名:
学号:
指导教师:
设计周数:
两周
设计成绩:
2012年6月21日
目录
一、课程设计目的--------------------------------------------------------------------------------------2
二、课程设计任务及要求----------------------------------------------------------------------------2
2.1原始数据及主要任务---------------------------------------------------------------------2
2.2技术要求------------------------------------------------------------------------------------2
三、设计方案-------------------------------------------------------------------------------------------2
四、单元电路设计--------------------------------------------------------------------------------------3
4.1抢答信号显示和倒计时显示电路设计--------------------------------------------------3
4.2警报发生器电路-----------------------------------------------------------------------------3
4.3按键电路--------------------------------------------------------------------------------------4
4.4指示灯电路------------------------------------------------------------------------------------4
5、参考程序------------------------------------------------------------------------------------------5
六、所用器材-------------------------------------------------------------------------------------------12
七、课程设计总结---------------------------------------------------------------------------------------13
八、参考文献-------------------------------------------------------------------------------------------14
九、评语及成绩---------------------------------------------------------------------------------------14
十、附录-------------------------------------------------------------------------------------------15
一、课程设计目的
通过长达两周的课程设计,加深对《单片机》课程所学理论知识的理解,运用所学理论知识解决实际问题。
结合课程设计的内容,学会利用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秒内无人抢答,则发出超时报警声,此题作废,主持人可按下“开始”键开始下一题的抢答。
四、单元电路设计
4.1抢答信号显示和倒计时显示电路设计
4.2警报发生器电路
4.3按键电路
4.4指示灯电路
五、参考程序
#include
#defineunintunsignedint
#defineuncharunsignedchar
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};
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;
ET0=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;
flag2=1;
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();