文档库 最新最全的文档下载
当前位置:文档库 › 基于单片机8路抢答器论文

基于单片机8路抢答器论文

河南职业技术学院

毕业设计(论文)

题目

系(分院)

学生姓名

学号

专业名称

指导教师

年月日

1.数字抢答器的概述

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

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

2. 设计要求及目的

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

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

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

(4)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定,本抢答器的时间设定为60秒,当主持人启动“开始”开关后,定时器开始减计时,同时蜂鸣器有短暂的声响。

(5)设定的抢答时间内,选手可以抢答,这时定时器停止工作,显示器上显示选手的号码和抢答时间。并保持到主持人按复位键。

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

第二章:硬件电路设计

一.系统硬件设计

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

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

(2) 留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一

锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。

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

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

2.时钟频率电路的设计

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

外部振荡源电路

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

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

3.复位电路的设计

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

复位电路

值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软

复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

5.键盘扫描电路的设计

键盘是人与微机系统打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。

独立键盘

它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺”现象。这里采用最常用的方法,即延时重复扫描法,延时法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。

6.发声

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

7.系统复位

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

三.系统软件设计

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

1.系统原理图

3.程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit rst=P3^7;

sbit speaker=P3^6;//报警

sbit start=P3^4;

uchar count=0;//用于产生1秒的时间uchar dsy_time=0x3c; //用于显示抢答时间uchar dsy_buffer[]={0,0,0};//显示缓冲uchar code leddata[]= //共阴数码管的段码

{

0x3F, //"0"

0x06, //"1"

0x5B, //"2"

0x4F, //"3"

0x66, //"4"

0x6D, //"5"

0x7D, //"6"

0x07, //"7"

0x7F, //"8"

0x6F, //"9"

};

uchar code state[]=//抢答时的8种按键情况{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //延时

void DelayMS(uint ms)

{

uchar t;

while(ms--)

for(t=0;t<120;t++);

}

//报警

void speak(void)

{

uchar i=10;

while(i--)

{

speaker=~speaker;

DelayMS(2);

} }

//主程序

void main()

{ //初始化

uchar i,m=0x04;

P0=0xff;

P1=0x00;

P2=0x00;

P3=0xb7;

TMOD=0x01;//选择工作方式

TH0=0x3c;//定时器T0初始值的高八位

TL0=0xaf;//定时器T0初始值的低八位

IE=0x83;//开总中断,定时器中断,外部中断0

while(1)

{

if(rst==0)//系统复位

{

dsy_buffer[0]=0;

TR0=0;

dsy_time=0x3c;

}

if(dsy_time==0x00)//在设定的时间到,而无人抢答时关闭定时器中断

{

TR0=0;//关闭定时器中断

P1=0x00;//禁止抢答

}

for(i=0;i<3;i++)//用数码管显示抢答序号和抢答时间

{

P2=m;

m=_cror_(m,1);//循环移位实现数码管的动态显示

dsy_buffer[2]=dsy_time%10;//抢答时间的个位

dsy_buffer[1]=dsy_time/10;//抢答时间的十位

P0=leddata[dsy_buffer[i]];//数码管显示抢答者的序号和抢答时间

DelayMS(5);

}

m=0x04;//实现下轮的循环显示

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

{

if(P1==state[i])//判断有按键按下

{

DelayMS(10); //延时防止按键抖动引起的误操作

if(P1<=state[i]) //再次判断有按键按下

{

dsy_buffer[0]=i+1;

P1=0x00;//通过硬件实现优先抢答

TR0=0; //关闭定时器0

speak();

}

}

}

}

}

//实现定时时间1S

void key_inter() interrupt 1

{

TH0=0x3c;//50MS初始值

TL0=0xaf;//50MS初始值

if(++count==20)

{

count=0;

dsy_time--;//实现计数器的减法计数

}

}

//抢答开始

void start_inter() interrupt 0

{

P1=0xff;

TR0=1;//定时器0开始计数

speak();

}

第五章:总结

经过近两个星期的努力,在老师和同学的讨论和帮助下,我成功地完成了八路抢答器的设计,通过此次课程设计,我重新认识到了对书本上的知识要独立运用的道理。在抢答器设计过程中,发现了很多细节性的问题,也出现了很多错误,经过和同学们研究、商讨最后都解决,感觉团队协作能力是非常有必要的!通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识和C语言的编程,也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设中可能会存在着一些不足,我真诚的接受老师和同学的批评和指正。

参考文献

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

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

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

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

相关文档
相关文档 最新文档