基于at89c52的抢答器.docx
《基于at89c52的抢答器.docx》由会员分享,可在线阅读,更多相关《基于at89c52的抢答器.docx(25页珍藏版)》请在冰豆网上搜索。
基于at89c52的抢答器
湖北民族学院信息工程学院
课程设计报告书
题目:
基于AT89C52的竞赛抢答器的设计
课程:
电子线路课程设计
专业:
电子信息科学与技术
班级:
0309412
学号:
学生姓名:
指导教师:
2011年11月21日
信息工程学院课程设计任务书
学号
学生姓名
专业(班级)
电子信息科学与技术
设计题目
基于AT89C52的竞赛抢答器的设计
设
计
技
术
参
数
设
计
要
求
1、能实现8位选手抢答。
2、主持人控制抢答的开始和清零。
3、一位选手抢答后另外的选手抢答无效。
4、主持人或选手按下按键时伴随蜂鸣器的响声。
5、主持人按下抢答开始按钮后伴随着抢答到家时开始计时15秒。
6、当主持人按下抢答且倒计时显示到0仍无人抢答时蜂鸣器持续响2秒钟。
参
考
资
料
【1】谢自美,电子线路设计·实验·测试.(第三版)华中科技大学出版社
【2】郭天祥,51单片机C语言教程.电子工业出版社,2011
【3】张毅刚,新编MCS-51单片机应用设计哈尔滨工业大学出版社,2003
【4】张萌,单片机应用系统开发实例清华大学出版社,2007
【5】王虎林,宋雪丽,一种数字式竞赛抢答器的设计[J],电脑开发与应用.2010.
(1)
【6】王青萍,八路智力竞赛抢答器的设计[J],湖北教育学院报.2007.(8)
【7】康华光,陈大钦.电子技术基础—模拟部分(第五版)[M].北京:
高等教育出版社,2005
年月日
学生姓名:
学号:
专业(班级):
电子信息科学与技术
课程设计题目:
基于AT89C52的竞赛抢答器的设计
成绩:
指导教师:
年月日
信息工程系课程设计成绩评定表
摘要
竞赛抢答器是由AT89C52单片机控制的,有八路选手抢答的只能抢答器,该抢答器由四部分组成,主持人按键部分,选手按键部分,显示部分和蜂鸣器部分。
该抢答器设有抢答倒计时,在规定倒计时内有人抢答则显示倒计时会停止,没有人抢答则倒计时完毕蜂鸣器响提示主持人抢答无效,以此实现抢答功能。
本文将详细介绍设计过程和实现的功能。
关键词:
AT89C52单片机,抢答器,倒计时
1任务提出与方案论证
1.1设计要求
1、能实现8位选手抢答。
2、主持人控制抢答的开始和清零。
3、一位选手抢答后另外的选手抢答无效。
4、主持人或选手按下按键时伴随蜂鸣器的响声。
5、主持人按下抢答开始按钮后伴随着抢答到家时开始计时15秒。
6、当主持人按下抢答且倒计时显示到0仍无人抢答时蜂鸣器持续响2秒钟。
1.2系统设计方案论证
1.2.1方案设计
方案一:
采用模数电设计,包括优先编码电路、锁存电路、译码电路将参赛选手的输入信号显示在数码管上,用控制电路和主持人开关启动报警电路,以上两部分为主题电路,通过定时电路和译码电路将秒脉冲产生的信号在数码管上输出实现即时功能,构成扩展电路。
其总体框图如下:
图1模数抢答器系统框图
方案二:
采用AT89C52单片机为核心控制单元,利用软件编程达到控制抢答的目的,利用了单片机的延时电路,按键电路,控制电路等设计的抢答器具有显示抢答选手的和抢答时间的功能,还有清零按键可以开始新一轮的抢答,且功能强大。
1.2.2方案论证选择
上述两个方案都能实现抢答器的抢答功能,但是方案一组成电路很多,线路布置起来很复杂,可靠性不高,功能也很简单,特别是当抢答路数较多时实现起来更加困难。
方案二相比较起来实现起来比较简单,线路较少,而且软件实现调试比较简单,所以本设计我选择方案二,即采用AT89C52单片机来实现抢答器的设计。
2总体设计
本设计总体能实现八路抢答及倒计时等功能。
通过改变软件程序来达到预期的目的。
2.1硬件设计与实现总体框图
图2系统总体框图
2.2软件程序流程图
图3抢答器系统程序流程图
3详细设计及仿真
3.1硬件电路设计
3.1.1主控芯片的介绍
本设计采用的是AT89C52单片机,AT89C52是美国Atmel公司生产的低电压、高性能CMOS8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。
AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。
其有以下主要工作特性:
片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;
片内数据存储器内含256字节的RAM;
具有32根可编程I/O口线;
具有3个可编程定时器;
中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;
串行口是具有一个全双工的可编程串行通信口;
具有一个数据指针DPTR;
低功耗工作模式有空闲模式和掉电模式;
具有可编程的3级程序锁定位;
AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;
AT89C52最高工作频率为24MHz。
单片机正常工作时,都需要有一个时钟电路和一个复位电路。
其引脚如下图4所示:
图4AT89C52单片机的引脚图
在本设计中,单片机AT89C52引脚的P3口与D/A转换器和液晶显示器1602相连接。
其中,P3.0和P3.1口接D/A转换器,P3.2和3.6口接液晶显示器。
RST:
复位输入。
当振荡工作时,RST引脚出现两个机器周期上高电平将使单片机复位。
3.1.2复位电路
启动复位使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
另外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也可以按复位键重新启动。
RST引脚是复位信号的输入端。
复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。
本设计使用频率为12MHz的晶振,则复位信号持续时间应超过2us,才能完成复位操作。
其电路图如图5所示:
图5复位电路
3.1.3时钟电路
时钟电路用于产生MCS-51单片机工作时所必须的时钟信号。
时钟是时序的基础,为保证同步工作方式的实现,单片机应在唯一的时钟信号控制下,严格地按时序执行指令进行工作。
因此,时钟频率和质量也直接影响单片机系统的速度和稳定性。
常用的时钟电路有内部时钟和外部时钟方式。
其电路图如图6所示:
图6内部方式时钟产生电路
单片机片内由一个反向放大器构成振荡器,可以由它产生时钟。
该反相放大器的输入端为引脚XTAL1,输出端为引脚XTAL2。
这两个引脚外接石英晶体振荡器作为定时元件,内部反向放大器自激振荡,产生时钟。
C12,C13对频率有微调作用。
C12和C13值选择为30PF。
晶振频率选择11.0592MHZ。
在实际连接中,为了减少寄生电容,更好地保证振荡器稳定,振荡器和电容应尽可能安装得与单片机芯片靠近。
3.1.4抢答电路
按照键盘与单片机的连接方式,可以分为独立键盘和矩阵键盘,独立键盘控制起来简单而且软件程序里很好控制,所以本设计采用的是独立键盘来控制选手的抢答。
图7抢答电路
八个独立按键分别接单片机的P1口的八个接口,由八位选手或参赛队控制,K1—K8分别代表序号1—8号,当主持人按下开始抢答键后,其中任意一个按键按下就代表这个选手抢答,并将编号显示在数码管上,从而实现抢答成功。
3.1.5显示电路
单片机系统中通常有LED和LCD两种显示方式,两种显示器都能显示数字、字符及系统的状态,本系统采用4位LED显示。
如图8所示
图8显示电路
四位数码管的八个段选端接P0口的八个接口,由于P0口内部不带上辣电阻,所以需要外接上拉电阻,数码管的四个位选端接P2.0—P3.0口,数码管同通过位选端来选择哪个数码管亮,而通过段选来使亮起来的数码管显示不同的数字,八位段选分别用‘a,b,c,d,e,f,g,h’来表示。
数码管也分共阴极和共阳极两种,共阴极数码管当段选接高电平时亮,而共阳极的正好相反,接低电平时亮,本设计采用的是共阳极的数码管。
3.1.6主持人控制电路
主持人控制两个按键,即抢答开始按键和复位清零按键,如下图9所示:
图9主持人控制电路
两个按键分别接单片机的P3.0和P3.1口,当主持人按下抢答开始按键后,选手可以抢答并在数码管上倒计时显示抢答时间15秒,当一个题目回答完毕后主持人徐按一下复位清零键使显示是初始化状态并进入下一轮的抢答。
3.1.7蜂鸣器报警电路
本系统中蜂鸣器报警主要用在主持人按开始键、选手抢答按键、复位清零按键、等键按下及没人抢答倒计时计完之后提示,工作和实现都很简单。
如下图10所示:
图10蜂鸣器报警电路
3.2软件系统设计
软件程序主要是实现设计的要求及相关参数指标,如图11为系统的整体软件程序流程图,主要控制各个模块的运行正常,主要流程为:
开始,初始化,即上电后数码管上和所有的元件都以程序中初始化的设置存在,再判断主持人控制的抢答开关是否按下,若抢答开关没按下则继续显示初始状态知道按下,若抢答开关按下则判断抢答选手是否抢答,若没有抢答则继续扫描抢答按键直到有选手按下抢答按键,若有选手抢答则数码管上显示抢答选手的编号且倒计时停止跳动,最后结束抢答。
图11系统总体软件设计流程图
3.3系统的仿真
3.3.1软件keil的仿真
运行程序,查找语法错误,按照错误提示修改程序,直到0错误0警告为止才算调试成功,生成HEX文件以方便下载到单片机中。
仿真结果如图12所示:
图12软件的仿真结果
3.3.2硬件的proteus仿真
硬件按照详细设计中的设计连接好总体的系统电路图,将软件仿真生成的HEX文件下载到单片机并运行仿真;仿真结果如图13所示:
图13硬件仿真图
4总结
通过本次设计,让我明白了学以致用的重要性,虽然本次设计的任务不是很难,但设计起来还是需要一些时间和耐心,本次设计中我查阅了很多资料,也对以前学过的一些相关知识作了一定的总结和复习,当然,再设计过程中我也遇到了一些困难,例如,程序调试阶段,一开始程序出了很多问题,一调试错误就是一堆,后来通过查阅相关书籍和网上的资料慢慢的该修改程序,通过这个阶段让我受益匪浅,让我学会了克服困难的精神,当然也加强了我的动手能力。
但由于知识水平的局限,设计中可能还存在一些不足,所以在以后的学习中我会加强这方面的不足并加强相关知识的学习。
参考文献
【1】谢自美,电子线路设计·实验·测试.(第三版)华中科技大学出版社
【2】郭天祥,51单片机C语言教程.电子工业出版社,2011
【3】张毅刚,新编MCS-51单片机应用设计哈尔滨工业大学出版社,2003
【4】张萌,单片机应用系统开发实例清华大学出版社,2007
【5】王虎林,宋雪丽,一种数字式竞赛抢答器的设计[J],电脑开发与应用.2010.
(1)
【6】王青萍,八路智力竞赛抢答器的设计[J],湖北教育学院报.2007.(8)
【7】康华光,陈大钦.电子技术基础—模拟部分(第五版)[M].北京:
高等教育出版社,2005
附录1:
系统整体电路图
附录2系统源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uintx,y,shi,ge,zhuchi,haoma,f,a;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
sbitkey1=P1^0;//键盘端口
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitkey6=P1^5;
sbitkey7=P1^6;
sbitkey8=P1^7;
sbitkeyzhu=P3^0;
sbitkeyqing=P3^1;
sbitkeyf=P3^7;//蜂鸣器端口
sbitwei1=P2^0;//位选端口
sbitwei3=P2^2;
sbitwei4=P2^3;
voiddelayms(uintxms)//延时函数
{
uinti,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}
voidinit()//初始化
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
x=15;
y=0;
shi=0;
ge=0;
haoma=0;
zhuchi=0;
f=0;
keyf=0;
}
voiddisplay(uintshi,uintge,uinthaoma)//数码显示
{
wei3=0;
P0=table[shi];
delayms(5);
wei3=1;
wei4=0;
P0=table[ge];
delayms(5);
wei4=1;
wei1=0;
P0=table[haoma];
delayms(5);
wei1=1;
}
voidkeyscan()//扫描键盘
{
if(a==1)
{
if(zhuchi==0)
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
TR0=0;//抢答1
zhuchi=1;
haoma=1;
keyf=1;
delayms(300);
keyf=0;
}
}
}}
if(a==1)
{
if(zhuchi==0)
{
if(key2==0)
{
delayms(10);
if(key2==0)
{
TR0=0;//抢答2
zhuchi=1;
haoma=2;
keyf=1;
delayms(300);
keyf=0;
}
}
}}
if(a==1)
{
if(zhuchi==0)
{
if(key3==0)
{
delayms(10);
if(key3==0)
{
TR0=0;//抢答3
zhuchi=1;
haoma=3;
keyf=1;
delayms(300);
keyf=0;
}
}
}}
if(a==1)
{
if(zhuchi==0)
{
if(key4==0)
{
delayms(10);
if(key4==0)
{
TR0=0;//抢答4
zhuchi=1;
haoma=4;
keyf=1;
delayms(300);
keyf=0;
}
}
}}
if(a==1)
{
if(zhuchi==0)
{
if(key5==0)
{
delayms(10);
if(key5==0)
{
TR0=0;//抢答5
zhuchi=1;
haoma=5;
keyf=1;
delayms(300);
keyf=0;
}
}
}}
if(a==1)
{
if(zhuchi==0)
{
if(key6==0)
{
delayms(10);
if(key6==0)
{
TR0=0;//抢答6
zhuchi=1;
haoma=6;
keyf=1;
delayms(300);
keyf=0;
}
}
}}
if(a==1)
{
if(zhuchi==0)
{
if(key7==0)
{
delayms(10);
if(key7==0)
{
TR0=0;//抢答7
zhuchi=1;
haoma=7;
keyf=1;
delayms(300);
keyf=0;
}
}
}}
if(a==1)
{
if(zhuchi==0)
{
if(key8==0)
{
delayms(10);
if(key8==0)
{
TR0=0;//抢答8
zhuchi=1;
haoma=8;
keyf=1;
delayms(300);
keyf=0;
}
}}}
if(keyzhu==0)
{
delayms(10);
if(keyzhu==0)
{a=1;
TR0=1;//开始计数,暂停
keyf=1;
delayms(200);
keyf=0;
}
}
if(keyqing==0)
{
delayms(10);
if(keyqing==0)
{
init();//停止,重新计数
keyf=1;
delayms(300);
keyf=0;
}
}}
voidmain()
{
init();
while
(1)
{
keyscan();
display(shi,ge,haoma);
}
}
voidT0_time()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
y++;
f++;
if(y==20)
{
y=0;
shi=x/10;
ge=x%10;
if(x==0)
{
TR0=0;
x=0;
keyf=1;
delayms(2000);
keyf=0;
}
x--;
}
}