找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3801|回复: 2
收起左侧

基于单片机的8路抢答器控制课程设计论文

[复制链接]
ID:262204 发表于 2017-12-15 21:35 | 显示全部楼层 |阅读模式
单片机与接口技术课程设计
题目:基于单片机的 8路抢答器控制设计
姓    名:
古响涛
学    号:
2014143227
层    次:
本科
专    业:
机械电子工程
班    级:
2班
指导教师:
严其艳

2017年05月

目   录


1前 沿

设计目的及意义

设计内容

2 硬件电路设计

单片机芯片的选择

2.1 硬件电路模块设计

(1) 振荡电路

(2) 复位电路设计

(3)显示电路的设计

(4)报警电路的设计

(5) 总体设计

3 系统软件设计

软件设计流程

源程序设计

4 系统调试与仿真

系统硬件仿真电路图

仿真效果图

5 元件清单

6 设计体会

参考文献



1前 沿

设计目的及意义

对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。

设计内容

基本要求:

给主持人设置一个开关,用来控制系统的重启(编号显示数码管重置初始时间)和抢答器的倒计时开始。

抢答器显示和倒计时的功能。抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其他选手抢答。

发挥部分:

抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如9秒)。当节目主持人启动“开始”键后,要求定时器立即减计时,并用显示器显示。

参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号,并保持到主持人将系统清零为止。

如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统自动回复到初始倒计时时间,并封锁输入电路,禁止选手超时后抢答。

2 硬件电路设计

单片机芯片的选择

单片机选用的是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存储器可有效地降低开发成本。

单片机管脚说明:

   图1 AT89C52                                                                     

表1

引脚

功能

P1.0

蜂鸣器报警,警示灯报警

P1.1~1.7

数码管,用显示抢答号数

P3.2

INT0(外部中断0输入),用于倒计时

P0.0~P0.7

发光二极管

P2.0~P2.7

数码管,用于倒计时

P3.0~P3.7

按钮抢答功能键

RST

复位端

XTAL1,XTAL2

振荡电路


2.1 硬件电路模块设计

(1) 振荡电路

一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率为11.0592HZ。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调,C1,C2的典型值为33PF。其电路如图2所示。

图2 振荡电路

(2) 复位电路设计

单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图3所示:

图3 复位电路

在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

(3)显示电路的设计

在方案中使用到了倒计时数码显示管,选手对应发光二极管与数码显示管。

其中数码显示管是属于共阳极的,由低电平点亮。其电路图如图4所示。

图4 显示电路

(4)报警电路的设计

这里能利用程序来控制单片机P1.0口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。

图5 报警电路

(5) 总体设计

图6 总体设计

3 系统软件设计

软件设计流程

流程图是使用图形表示算法的思路是一种极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。总体框图中的各个子模块或各个子任务也应该结合具体的教学模型和算法画出较详细的程序流程图,供后面编写具体程序和阅读程序使用。

流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。流程图的基本结构为顺序结构,分支结构(又称选择结构),循环结构。为便于识别,绘制流程图的习惯做法是:

方框表示:要执行的处理(Process)

平行四边型表示:代表资料输入(Input)

不规则图形代表资料输出(Output)或报表输出(Print)

菱形表示:决策或判断(例如:If...Then...Else)

跟据设计要求,初步拟定总体设计框图如图7所示:

图7



4 系统调试与仿真

系统硬件仿真电路图

图8系统硬件仿真电路图

仿真效果图

图9仿真效果图

5 元件清单

表2 元件清单

元件
数量
AT89C52
1
按键
9
LED灯(黄)
8
33pf电容
2
pnp三极管
1
蜂鸣器
1
7段数码显示管
2
33pF瓷片电容
2
11.0592晶振
1
10uF电解电容
1
330电阻
8
10k电阻
1

6 设计体会

我在这一次抢答器的设计过程中,很是受益匪浅。通过对自己在这一学期时间里所学的知识的回顾,并充分发挥对所学知识的理解和对设计的思考及书面表达能力,最终完成了。这为自己今后进一步深化学习,积累了一定宝贵的经验。撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。培养了我运用所学知识解决实际问题的能力。

通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。这个实验十分有意义 我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。

我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。


参考文献

[1]单片机课程设计实例指导,李光飞,北京航天航空大学出版社,2004

[2]单片机原理及接口技术(第3版),李朝青,北京航空航天大学出版社,2002

[3]单片机C程序设计及应用实例,胡伟,人民邮电出版社,2003

[4]单片机系统设计与实例指导,冯育长,西安电子科技大学出版社,2007

[5]电子电路及电子器件, 郭培源, 高等教育出版社.,2003

[6]数字电子技术. 杨志忠, 高等教育出版社,2002


广东科技学院课程设计成绩考核表
姓 名:古响涛
学 号:2014143227
专业/班级:机械电子工程2班
课程设计题目:8路抢答器
一、指导教师对该课程设计总体评价



               指导教师签名:                     年     月     日 
二、课程设计最终得分





评阅教师签名:                         年     月     日



单片机源程序如下:
  1. #include<reg51.h>
  2. unsigned char flag,num1,num2;
  3. sbit a1=P3^0;//P3口开关
  4. sbit a2=P3^1;
  5. sbit a3=P3^2;
  6. sbit a4=P3^3;
  7. sbit a5=P3^4;
  8. sbit a6=P3^5;
  9. sbit a7=P3^6;
  10. sbit a8=P3^7;
  11. sbit b1=P1^0;//P1口蜂鸣器
  12. sbit b2=P1^1;
  13. sbit b3=P1^2;
  14. unsigned char code table[]={0x40,0xf9,0x24,0x30,0x19,0x12,0x02,0xf8,0x00,0x10};//数码管显示
  15. void display()
  16. {
  17. P2=table[num2]; //P2口数码管
  18. }
  19. void init()
  20. {
  21. num2=10;
  22. TMOD=0X01;
  23. TH0=(65536-45872)/256;
  24. TL0=(65536-45872)/256;
  25. EA=1;
  26. ET0=1;
  27. TR0=1;
  28. flag=1;//全局变量
  29. P0=0xff;//P0口LED灯
  30. b1=1;
  31. P2=0xff;
  32. }
  33. void delay(int z)//延时程序
  34. {
  35.   int i,j;
  36.   for(i=0;i<z;i++)
  37.     for(j=0;j<110;j++);
  38. }
  39. void main()
  40. {
  41. init();
  42. while(flag)
  43. {
  44.    if(a1==0)
  45.    {
  46.      delay(100);//调用延时程序消除抖动
  47.      if(a1==0)//判断开关a1是否按下
  48.      {
  49.                  P1=0xf2;
  50.        flag=0;
  51.        P0=0xfe;//对应LED灯亮
  52.        b1=0;//蜂鸣器响
  53.        while(!a1);//按住时持续响
  54.        b3=0;
  55.        b1=1;
  56.       }
  57.    }
  58.    if(a2==0)//同理判断a2
  59.    {
  60.      delay(100);
  61.      if(a2==0)
  62.      {
  63.                 P1=0x48;
  64.        flag=0;
  65.        P0=0xfd;
  66.        b1=0;
  67.        while(!a2);
  68.        b1=1;
  69.                  P1=0x48;
  70.       }
  71.     }
  72.    if(a3==0)//同理判断a3
  73.    {
  74.      delay(100);
  75.      if(a3==0)
  76.      {
  77.                 P1=0x60;
  78.        flag=0;
  79.        P0=0xfb;
  80.        b1=0;
  81.        while(!a3);
  82.        b1=1;
  83.       }
  84.     }
  85.    if(a4==0)//同理判断a4
  86.    {
  87.      delay(100);
  88.      if(a4==0)
  89.      {
  90.                  P1=0x32;
  91.        flag=0;
  92.        P0=0xf7;
  93.        b1=0;
  94.        while(!a4);
  95.        b1=1;
  96.       }
  97.     }
  98.    if(a5==0)//同理判断a5
  99.    {
  100.      delay(10);
  101.      if(a5==0)
  102.      {
  103.                  P1=0x24;
  104.        flag=0;
  105.        P0=0xef;
  106.        b1=0;
  107.        while(!a5);
  108.        b1=1;
  109.       }
  110.     }
  111.    if(a6==0)//同理判断a6
  112.    {
  113.      delay(10);
  114.      if(a6==0)
  115.      {
  116.                  P1=0x04;
  117.        flag=0;
  118.        P0=0xdf;
  119.        b1=0;
  120.        while(!a6);
  121.        b1=1;
  122.       }
  123.     }
  124.    if(a7==0)//同理判断a7
  125.    {
  126.      delay(10);
  127.      if(a7==0)
  128.      {
  129.                  P1=0xf0;
  130.        flag=0;
  131.        P0=0xbf;
  132.        b1=0;
  133.        while(!a7);
  134.        b1=1;
  135.       }
  136.     }
  137.    if(a8==0)//同理判断a8
  138.    {
  139.      delay(10);
  140.      if(a8==0)
  141.      {
  142.                 P1=0x00;
  143.        flag=0;
  144.        P0=0x7f;
  145.        b1=0;
  146.        while(!a8);
  147.        b1=1;
  148.       }
  149.     }
  150. }
  151. while(!flag)
  152. {
  153.    EA=0;
  154.   if(P3!=0xff)//没有开关按下时不响也不亮
  155.   {
  156.     b1=0;   b2=0;
  157.     delay(50);
  158. ……………………

  159. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

完整的Word格式文档51黑下载:
单片机与接口技术课程设计.doc (655.5 KB, 下载次数: 41)
回复

使用道具 举报

ID:768534 发表于 2020-6-7 00:10 | 显示全部楼层
学习了
回复

使用道具 举报

ID:769513 发表于 2020-6-7 13:34 来自手机 | 显示全部楼层
有仿真教程吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表