8路抢答器课程设计报告

更新时间:2023-08-25 20:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

8路抢答器课程设计报告

电子与电气工程学院

课程设计报告

课程名称单片机课程设计

设计题目基于单片机的8路抢答器设计所学专业名称电子信息工程专业

班级13级3班

学号

学生姓名

指导教师

2016年6 月3日

8路抢答器课程设计报告

电气学院单片机课程设计指导老师评价表

8路抢答器课程设计报告

抢答器设计

目录

摘要与关键词 (2)

第一章:绪论,主要介绍设计背景 (2)

1.数字抢答器的概述 (2)

2. 设计要求及目的 (2)

第二章:硬件电路设计 (3)

1.总体原理图 (3)

2.时钟频率电路的设计 (4)

3.复位电路的设计 (4)

4.显示电路的设计 (5)

5.键盘扫描电路的设计 (5)

6.发声 (6)

7.系统复位 (6)

第三章:系统软件设计 (7)

1.系统原理图 (7)

2.程序流程图 (7)

3.程序 (7)

第四章:总结 (14)

参考文献 (14)

- 0 -

8路抢答器课程设计报告

摘要与关键词

摘要:随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也越来越重要。本文设计出以AT89S52单片机为核心的八路抢答器,采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,充分利用了单片机系统结构简单、功能强大、可靠性好、实用性强的特点。

本设计是以抢答为出发点。考虑到依需设定限时回答的功能,利用89S52单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。

关键字:单片机;课程设计;

- 1 -

8路抢答器课程设计报告

第一章:绪论,主要介绍设计背景。

1.数字抢答器的概述

单片机把我们带入了智能化的电子领域,许多繁琐的系统若由单片机进行设计,便能收到电路更简单、功能更齐全的良好效果。若把经典的电子系统当作一个僵死的电子系统,那么智能化的现代电子系统则是一个具有“生命”的电子系统。

而随着技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成一种趋势。本设计就是基于单片机设计抢答系统,通过串口通信动态传输数据,使抢答系统有了更多更完善的功能。单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。

2. 设计要求及目的

(1)设计一个可供8人进行的抢答器。

(2)系统设置复位按钮,按动后,重新开始抢答。

(3)抢答器开始时数码管显示序号0,选手抢答实行优先显示,优先抢答选手的编号一直保持到主持人将系统清除为止。抢答后显示优先抢答者序号。并且不出现其他抢答者的序号。

(4)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定,本抢答器的时间设定为15秒,当主持人启动“开始”开关后,定时器开始减计时,同时蜂鸣器有短暂的声响。(5)设定的抢答时间内,选手可以抢答,这时定时器停止工作,显示器上显示选手的号码和抢答时间。并保持到主持人按复位键。

(6)当设定的时间到,而无人抢答时,本次抢答无效,扬声器报警发出声音,并禁止抢答。定时器上显示0。

- 2 -

8路抢答器课程设计报告

第二章:硬件电路设计

一.系统硬件设计

为使硬件电路设计尽可能合理,应注意以下几方面:

(1) 尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。

(2) 留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。

(3) 程序空间,选用片内程序空间足够大的单片机,本设计采用AT89C52单片机。

(4) I/O端口,在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。如果在硬件电路设计就预留出一些I/O 端口,虽然当时空着没用,那么用的时候就派上用场了。

1.总体原理图

图1:8路抢答器总原理图

- 3 -

8路抢答器课程设计报告

2.时钟频率电路的设计

单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。

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

单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。

3.复位电路的设计

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

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

- 4 -

8路抢答器课程设计报告

4.显示电路的设计

显示功能采用74HC164芯片和两个七段数码管组成,利用74HC164能够有效的提高单片

键盘是人与微机系统打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,

- 5 -

8路抢答器课程设计报告

它们各有自己的特点,在本次的课程设计中考虑到按键的数目以及按键按下后实现的功能等因数采用独立和逻辑芯片组合加中断响应的方式构成按键输入模块。利用外部中断控制单片机对按键的扫描可以更快的读取键值同时可以减少单片机的内部资源的损耗。利用74HC573、74HC30、74HC40、74HC86芯片来进行对按键输入进行按键的自锁,从而提高对第一个抢答信号识别的速度和准确度,同时也有效的避免了其他按键信号的干扰。如果利用程序来判断第一个抢答信号和实现自锁的话程序估计会比较复杂,同时稳定性不高,通常无法准确的读取到第一个按键的输入信号。利用逻辑芯片则可以有效的避免这一问题。

6.发声

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频

7.系统复位

使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。有的编程人员用020000(LJMP 0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。

- 6 -

8路抢答器课程设计报告

第三章.系统软件设计

软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。

1.系统原理图

2.程序流程图

在本设计中包括了以下七个主要的程序:主程序;定时器0服务程序;定时器1服务程序;中断0服务程序;中断1服务程序;显示及发声程序。主流程图如图所示:

图7:核心程序流程图

- 7 -

8路抢答器课程设计报告

3.程序

#include<reg51.h>

/*---------变量定义---------*/

unsigned char a,c;

unsigned int p;

unsigned char DM1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; unsigned char DM2[]={0X00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; /*---------端口定义---------*/

#define keyboard P1;

sbit W1=P2^4;

sbit W2=P2^3;

sbit CLK=P2^1;

sbit DAT=P2^2;

sbit CLC=P2^0;

sbit RET=P3^4;

sbit REE=P3^5;

sbit WAR=P2^5;

/*---------程序预定义---------*/

void Send(unsigned int f);

void display(void);

void sounds(void);

void sound(unsigned int m,unsigned int n);

/*---------延时程序---------*/

void delay(unsigned int n)

{

unsigned int i,j;

for(j=0;j<n;j++)

{

for(i=0;i<5;i++);

}

}

void delays(unsigned int n)

{

unsigned int i;

for(i=0;i<n;i++) ;

- 8 -

8路抢答器课程设计报告

}

/*---------定时器0、1初始化---------*/ void Init_Timer(void)

{

TMOD|=0X11;

TH0=0X00;

TL0=0X00;

TH1=0X00;

TL1=0X00;

EA=1;

ET1=1;

TR1=1;

}

/*---------中断0、1初始化---------*/ void Int(void)

{

EA=1;

EX1=1;

IT0=1;

IT1=1;

}

void main()

{

WAR=1;

RET=1;

Init_Timer();

Int();

while(1)

{

}

}

/*---------显示程序---------*/

void display(void)

{

unsigned int i;

- 9 -

8路抢答器课程设计报告

for(i=0;i<2;i++)

{

Send(DM1[p%10]);

delay(1);

W1=0;

delay(20);

W1=1;

CLC=0;

delay(1);

CLC=1;

Send(DM2[p/10]);

delay(1);

W2=0;

delay(20);

W2=1;

CLC=0;

delay(1);

CLC=1;

}

}

/*---------定时器0服务程序---------*/ void Timer0_serve(void) interrupt 1

{

TH0=0X00;

TL0=0X00;

if(a<50)

a++;

else

{

a=0;

sounds();

if(p==0&&c==2)

{

sound(100,20);

RET=0;

- 10 -

8路抢答器课程设计报告

delay(1);

RET=1;

delay(1);

p=15;

c=1;

EX0=1;

}

else if(p==0&&c==1)

{

REE=0;

delay(1);

REE=1;

ET0=0;

TR0=0;

c=0;

EX0=0;

}

else

p--;

}

}

void Timer0_ser1(void)interrupt 3

{

TH1=(65536-2000)/256;

TL1=(65536-2000)%256;

display();

}

/*---------中断0服务程序---------*/ void Int_ser0(void) interrupt 0

{

unsigned int l,h,g;

h=0;

l=keyboard;

if(l!=0xff&&l!=0x00)

{

- 11 -

8路抢答器课程设计报告

ET0=0;

TR0=0;

EX0=0;

do

{

h++;

g=l&0x01;

l=l>>1;

}while(g);

p=h;

}

display();

}

/*---------中断1服务程序---------*/ void Int_ser1(void) interrupt 2

{

c=2;

p=3;

ET0=1;

TR0=1;

}

/*------------显示数据发送-------------*/ void Send(unsigned int f)

{

unsigned char i;

for(i=0;i<8;i++)

{

CLK=0;

DAT=f&0x01;

delay(1);

CLK=1;

delay(1);

CLK=0;

f=f>>1;

}

- 12 -

8路抢答器课程设计报告

}

/*------------发声函数-------------*/

void sound(unsigned int m,unsigned int n) {

unsigned int i;

ET0=0;

TR0=0;

for(i=0;i<m;i++)

{

WAR=1;

delays(n);

WAR=0;

delays(n);

}

ET0=1;

TR0=1;

WAR=1;

}

/*------------声音提示判断程序-------------*/ void sounds(void)

{

if(p<11&&c==1)

{

if(p<6)

{

if(p==0)

{

sound(10,23);

}

else if(p==5)

{

sound(15,50);

}

}

else if(p==10)

- 13 -

8路抢答器课程设计报告

- 14 - {

sound(20,60);

}

}

}

第四章:总结

经过近两个星期的努力 ,在老师的指导下我成功地完成了八路抢答器的设计,通过此次课程设计,我重新认识到了对书本上的知识要独立运用的道理。在抢答器设计过程中,发现了很多细节性的问题,也出现了很多错误,经过不断思考和查阅资料找到问题出现的原因!通过此次的抢答器的设计,让我对以前所学习的电子知识和C 语言知识有了更深的记忆,也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设中可能会存在着一些不足,我真诚的接受老师和同学的批评和指正。

参考文献

1.C 程序设计 ,谭浩强,清华大学出版社,2005

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

3. 基于Proteus 的51系列单片机设计与仿真(第3版),陈忠平

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

本文来源:https://www.bwwdw.com/article/evei.html

Top