基于AW60十秒倒计时抢答器的设计资料.docx

上传人:b****5 文档编号:29479049 上传时间:2023-07-23 格式:DOCX 页数:23 大小:826.86KB
下载 相关 举报
基于AW60十秒倒计时抢答器的设计资料.docx_第1页
第1页 / 共23页
基于AW60十秒倒计时抢答器的设计资料.docx_第2页
第2页 / 共23页
基于AW60十秒倒计时抢答器的设计资料.docx_第3页
第3页 / 共23页
基于AW60十秒倒计时抢答器的设计资料.docx_第4页
第4页 / 共23页
基于AW60十秒倒计时抢答器的设计资料.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

基于AW60十秒倒计时抢答器的设计资料.docx

《基于AW60十秒倒计时抢答器的设计资料.docx》由会员分享,可在线阅读,更多相关《基于AW60十秒倒计时抢答器的设计资料.docx(23页珍藏版)》请在冰豆网上搜索。

基于AW60十秒倒计时抢答器的设计资料.docx

基于AW60十秒倒计时抢答器的设计资料

 

《电子系统设计与工程实践》期末实践

 

数字抢答器

学院:

_________________________

专业:

_________________________

班级:

_________________________

姓名:

_________________________

学号:

_________________________

 

年月日

基于AW60十秒倒计时抢答器的设计

摘要:

本设计是以飞思卡尔公司的AW60HCS08单片机为核心设计的四路抢答器。

本抢答器能实现四人抢答、倒计时10秒后就不能抢答、数码管显示抢答成功的按键及倒计时,在抢答成功和十秒倒计时结束时报警等功能。

同时该抢答器是基于单片机设计出来的,因此很容易对抢答器的路数进行扩展,同时又避免了由门电路组合的数字抢答器随着路数的增加线路数目成倍增加的问题。

与门电路搭建的抢答器相比,该抢答器不仅在结构上显得简单,而且在费用方面也略显优势。

Abstract:

TheFreescale'sAW60HCS08microcontrollerisusedasthecoredesignoffourwayresponder.Therespondercanachievefourviestoanswerfirst,thecountdownafter10secondscannotsucceedindigitaltubedisplayviestoanswerfirstviestoanswerfirst,keysandthecountdown,attheendoftheviestoanswerfirstsuccessandtensecondscountdownalarm.Theresponderisbasedonsingle-chipdesign,soitiseasytoextendwaysoftheresponder,andthenumoflinesisincreasingexponentiallywiththenumberincreaseofwaysofthedigitalgatecircuit.Comparedtotheresponderbuildedbythegatecircuit,theresponderisnotonlysimpleinthestructure,butalsoslightlybetterintermsofcosts.

关键字:

aw60、4人抢答、倒计时10s、数码管显示

Keywords:

aw60,fourpeopleviestoanswerfirst,thecountdown10s,digitaltubedisplay

1设计要求

具体要求

(1)提供4路抢答键,编号分别为1、2、3、4,提供“开始”键,编号为“*”。

(2)系统复位后,数码管显示“0000”并闪烁;按下“开始”键后,各抢答键才有效,数码管停止闪烁,并进行10s倒计时,计时时间在后两位数码管显示;若在10s内没有人抢答,则在计数为0后,显示“0000”并闪烁,直至“开始”键再次按下,重新计数;若在10s内有人按下抢答键,则停止计数,后两位数码管显示当前计数时间,第1位数码管显示抢答键编号,数码管闪烁,直至“开始”键再次按下,重新计数。

(3)每次按键或计时为0后通过蜂鸣器发出提示音。

系统功能

该系统能够按下开始键后数码管开始10s倒计时,当倒计时为零若没有抢答键按下则数码管显示0000,并闪烁蜂鸣器报警。

若有一个或多个抢答键在倒计时结束前按下,则数码管第一位显示按下最先按下抢答键的编号,后两位数码管显示按下时的时间,其他显示0且闪烁蜂鸣器报警。

当开始键再次按下的时候,系统恢复十秒倒计时状态,第一位数码管清零。

2总体设计

2.1系统工作原理

以下为系统的工作原理流程图(见图2),其中开始键为*键,1234抢答键为键盘控制,由中断中的程序控制各种状态的实现,其工作原理为:

接通电源后,抢答器数码管显示“0000”并闪烁,直到主持人按下开始键,抢答器数码管变为“0010”,同时抢答器的计时器开始进行10s的倒计时;选手在定时时间内抢答时,抢答器完成:

优先判断、编号锁存、编号显示、时间显示、数码管闪烁、蜂鸣器提示。

若在正常的十秒抢答时间中没有人按下抢答键,则倒计时一直进行到零,数码管显示0000并闪烁,同时蜂鸣器报警,当主持人再次按下开始键时数码管恢复到0010开始新一轮抢答倒计时。

图1、系统工作原理流程图

3硬件设计

3.1硬件组成

本系统是以飞思卡尔公司的AW60HCS08单片机为核心设计的四路抢答器。

其主要的硬件部分由AW60的最小系统、电源模块、时钟模块、键盘模块以及蜂鸣器等所组成(见图2)。

其中电源模块为其他各个模块供电;LED模块为显示模块,包括显示10s倒计时,抢答者编号,抢答时间,数码管闪烁;时钟模块为单片机工作提供时钟,键盘模块提供抢答键1234,开始(复位)键,用来检测是否有键发生,从而产生键盘中断交由单片机处理,单片机在对按键进行分析后控制相应的数码管显示以及控制蜂鸣器报警。

图2、模块电路组成

 

3.2单片机核心模块

本设计采用AW60HCS08单片机,S08是2004年左右推出8位MCU,资源丰富,功耗低,性价比很高,是08系列MCU发展趋势,其性能与许多16位MCU相当。

MC9S08AW60是低成本、高性能8位微处理器S08家族中的成员,本次课程设计就是以该芯片为基础,来进行嵌入式的设计。

该单片机的主要性能:

(1)最高达40MHz的CPU工作频率和20Hz的内部总线工作频率表;时钟源选项包括晶振、谐振器、外部时钟或内部产生的时钟。

(2)相比HC08CPU指令集,S08CPU增加了BGND指令。

(3)单线后台调试模式接口;增强的断点能力,允许单一的断点设置在线调试(在片内调试的模块增加了多于两个的断点)。

(4)内含32个中断/复位源;内含2KB的片内RAM;内含60KB的片内在线可编程Flash存储器,带有块保护和安全选项。

(5)可选的计算机正常操作(COP)复位;低电压检测和复位或中断;非法操作码检测与复位;非法地址检测与复位。

(6)ADC:

多达16个通道,10位A/D转换器与自动比较功能;两个串行通信接口SCI模块与可选的13位中断;一个串行外设接口SPI模块;集成电路互连总线I2C模块运作高达100kbps的最高总线负载;8引脚键盘中断KBI模块。

(7)定时器:

1个2通道和1个6通道16位定时器/脉冲宽度调制器模板。

具有输入、捕捉、输出比较、脉宽调制功能。

图3、最小系统图

3.3显示和控制电路

本系统采用数码管显示抢答者编号和剩余时间,钜阵键盘用于抢答器的复位和抢答者的抢答。

数码管显示原理简单,编程比较容易实现。

矩阵键盘可以实现多种控制,便于扩展功能,同时又可节省大量的IO口,供单片机的其它功能应用。

图4、LED模块

图5、键盘模块

3.4电源模块

电路中需要大量引脚用来提供足够的电流容量。

所有的电源引脚必须有适当的旁路电容,来抑制高频噪音。

一些VDD和VSS引脚仅用于噪音旁路。

图中的电源电路显示了一个典型的电源连接图。

电源电路部分的电容构成滤波电路,可以改善系统的电磁兼容性,降低电源波动对系统的影响,增强电路工作稳定性。

为标识系统通电与否,可以增加一个电源指示灯。

注意那些仅连接电容的引脚,不要将它们直接连接电源电压。

图6、电源模块

3.5蜂鸣器

在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。

图7、蜂鸣器模块

3.6长距离传输模块

3.6.1限制数据长距离传输的因素

所谓“长线”,即指那些必须考虑传输延迟的连接线,并且长线的“长”是相对的,对于微秒级的数字电路来说,1米左右的连线要求当长线来看待;对10毫秒级的电路,几米长的连线才当作长线处理。

信号在长线中传输时,不仅存在传输延迟,而且会使信号波形严重畸变,并引入一些有害的干扰。

采用长线传输后,一般总要发生如下问题:

1、外界电磁场通过传输线对信号产生的干扰

由于发送和接收设备之间存在的公共地线,因此各种干扰极易通过公共地线叠加在信号上,特别是现场的电磁干扰通过公共底线能很容易的导入接受设备。

2、传输线分布电容

数据的传输实际上是对传输线分布电容充电和放电的过程,而充电的上升时间和放电的下降时间有所不同,会引起数据接受错误。

3、传输线存在的地的电位差

传输线间连接的公共地线,由于发送设备和接受设备往往使用各自的电源设备。

是二者的电位可能不一致,从而信号地线中会产生电流。

由于传输线电阻的存在,使地线两端产生电压降,即电位差。

当发送设备想接收设备发送数据时,接受设备得到的电压信号与没有地电位差时得到的不同。

当又用信号较小、而地电位差较大时,接受设备无法得到准确的信号,数据传输将无法进行。

4、传输线的负载阻抗与传输特性阻抗不匹配

当传输的负载阻抗与传输特性阻抗不匹配时,会在线路中产生多次发射,致使信号产生畸变,数据传输出现错误。

3.6.2长距离传输抗干扰措施

空间干扰包括静电场、高频电磁场以及磁场引起的干扰

主要的解决方法:

1、空间隔离:

使敏感设备或信号线远离干扰,如大型动力设备及大变压器等。

空间隔离的方法主要有变压器隔离、光电隔离、浮地屏蔽三种方式。

2、屏蔽:

对敏感电路加屏蔽盒或对信号加屏蔽层,注意屏蔽层不能随意接地,必要时屏蔽层外还要有绝缘层。

屏蔽主要用来解决电磁干扰,将电力线或磁力线的影响限定在某个范围之内或阻止他们进入某个范围。

3、电气布线:

合理的选择信号线,并在实际施工中正确的敷设信号线来抑制干扰。

3.6.3长线传输模块

为了解决长线传输的问题,特别在电路中加入了长线传输模块。

本模块是以NS公司的单片集成稳压器为核心,其能满足输入电压在7~40V之内,均能输出恒定的5V电压和3A电流,能够很好的解决百米范围内的长线传输问题。

图8、长线传输模块

 

4程序设计

4.1主程序设计

程序开始后初始化芯片,模块,变量,然后进行主循环,开始执行主程序,计时器开始10s倒数计时数码管显示状态为0010,执行过程中还可检测是否有抢答键,如果按下则计时停止后两位数码管显示时间,第一位数码管显示抢答编号,其他数码管均为零,蜂鸣器报警,再次按下开始复位键时,数码管显示0010进行倒计时。

如果没有抢答键按下,则倒计时为零时数码管显示0000,并开始闪烁,蜂鸣器报警。

程序框图如下:

图7

4.2子程序设计

中断函数设计

程序开始后初始化变量,然后关中断,开始键值检测及判断,若开始键(*键)被按下,则LED被重新赋值,同时计数器开始递减计数,每秒减1;若在计数器数值减为0之前有1234被按下,则LED记录显示最先按下抢答者的编号,同时计数器保持当前数值不再递减并进行闪烁。

若计时器10s倒数计时结束后仍未有键按下,则数码管显示状态为0000并闪烁,同时蜂鸣器报警,直到再次按下开始键时,数码管显示0010进行倒计时。

中断函数流程图:

图8、中断函数流程图

附录一:

电路实物照片

图9、在开始键未按下时显示0000

图10、LED显示抢答者编号及按下时间

附录二:

程序调试

图11、程序调试

 

图12、程序调试

附录三:

电路原理图

图13、系统整图

附录四:

主要程序

主函数程序:

//-------------------------------------------------------------------------*

//工程名:

timer*

//硬件连接:

(1)PTD.0接指示灯*

//

(2)MCU的串口与PC方的串口相连*

//程序描述:

*

//

(1)TPM1溢出中断,数码管显示分秒信息。

//目的:

学习定时器基本功能*

//说明:

无*

//------苏州大学飞思卡尔嵌入式系统研发中心2011年------*

 

//总头文件

#include"Includes.h"

voidmain(void)

{

//1主程序使用的变量定义

//uint8start=1;

//2关总中断

DisableInterrupt();//禁止总中断

//3芯片初始化

MCUInit();//芯片初始化

//4模块初始化

Buzzer_DD=0xff;

LEDdata_D=0xff;

TPMinit(TPM_NUM_1);//定时器1初始化

LEDinit();//数码管初始化

KBInit();//键盘初始化

//5内存初始化

//6开放中断

EnableKBint();//开键盘中断

EnabletimerInt(TPM_NUM_1);//开放定时器1溢出中断

EnableInterrupt();//开放总中断

LEDshow(ledbuf);

//7系统复位后,数码管显示“0000”并闪烁;按下“开始”键后,各抢答键才有效

//不断循环闪烁0000直到开始键(*键)被按下,跳出循环后开始计时

do{

LEDdata=0xc0;

LEDcs1=0x03;

LEDcs2=0x0c;

Delay(10);//延时使数码管显示闪烁

LEDdata=0xff;Delay

(1);

LEDdata=0xc0;

}while(start==0);

//7主循环

while

(1)

{

LEDshow(ledbuf);//正常显示计数器当前计数的值

}

}

 

中断函数程序:

//-------------------------------------------------------------------------*

//文件名:

isr.c*

//说明:

中断处理函数文件*

//-------------------------------------------------------------------------*

//头文件

#include"isr.h"

 

//此处为用户新定义中断处理函数的存放处

//-------------------------------------------------------------------------*

//函数名:

isrKeyBoard*

//功能:

扫描键盘,向串口发送键值和定义值*

//参数:

无*

//返回:

无*

//说明:

调用了KBScanN、SCISend1、KBInit函数*

//-------------------------------------------------------------------------*

interruptvoidisrKeyBoard(void)

{

uint8value,KeyDef;

uint16i;

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

DisableInterrupt();//关总中断

DisableKBint();//屏蔽键盘中断

value=KBScanN(10);//扫描键值,存于value中

if(value!

=0xFF)

{

KeyDef=KBDef(value);

if(KeyDef=='*')

{

flag=0;//键值按下标志位

start=1;//启动减数

Buzzer=0;//关闭蜂鸣器

//对数码管重新回到计时初值

ledbuf[0]='0';

ledbuf[1]='0';

ledbuf[2]='1';

ledbuf[3]='0';

num=11;

}

if(KeyDef!

='*'&&num>0)

{

start=0;

//用flag来对数据进行锁存

if(flag==0)

{

ledbuf[0]=KeyDef;

flag=1;

}

}

}

KBInit();//键盘初始化键盘中断

EnableKBint();//开放键盘中断

EnableInterrupt();//开总中断

}

//-------------------------------------------------------------------------*

//函数名:

isrT1Out*

//功能:

定时器1溢出中断处理函数,以秒为最小单位计时,*

//并清定时器1溢出标志位*

//参数:

无*

//返回:

无*

//说明:

无*

//-------------------------------------------------------------------------*

interruptvoidisrT1Out(void)//溢出时间0.5s

{

uint8temp;

DisableInterrupt();//禁止总中断

if(start==1)

{

//数码管显示数值每隔1s减1

if(num!

=0)num--;

elsenum=0;

//判断数码管状态是否减到0,若没有则数码管减1显示

if(num!

=0)

{

ledbuf[2]='0';

ledbuf[3]=num-1+'0';

}

else{

//数码管则显示“0000”并闪烁

LEDdata=0xc0;

LEDcs1=0x03;

LEDcs2=0x0c;

Delay(7);//延时使数码管显示闪烁

LEDdata=0xff;

Delay(7);

LEDdata=0xc0;

//实现蜂鸣器的报警鸣叫

Buzzer=1;

Delay(30);

}

}

if(start==0)

{

//数码管则显示“0000”并闪烁

if(num>0)

{

//如果在10s内有键按下,则LED显示抢答者编号以及当前时间,并闪烁显示

LEDshow(ledbuf);

LEDcs1=0x03;

LEDcs2=0x0c;

Delay(3);//延时使数码管显示闪烁

LEDdata=0xff;Delay(3);

LEDshow(ledbuf);

}

if(num==0)

{

//如果在10s内没有键按下,则LED显示0000并闪烁显示

LEDdata=0xc0;

LEDcs1=0x03;

LEDcs2=0x0c;

Delay(3);//延时使数码管显示闪烁

LEDdata=0xff;Delay(3);

LEDdata=0xc0;

}

}

TPM_MODH

(1)=0x7a;

TPM_MODL

(1)=0x12;

//清定时器1溢出标志位

temp=TPM_CSTR

(1);//读取定时器1状态和控制寄存器TPM1SC

TPM_CSTR

(1)&=~(TPM1SC_TOF_MASK);//向定时器溢出标志位TOF写0

EnableInterrupt();//开放总中断

}

 

//未定义的中断处理函数,本函数不能删除

interruptvoidisrDummy(void)

{

}

//中断处理子程序类型定义

typedefvoid(*ISR_func_t)(void);

//中断矢量表,如果需要定义其它中断函数,请修改下表中的相应项目

constISR_func_tISR_vectors[]@0xFFCC=

{

isrDummy,//时基中断

isrDummy,//IIC中断

isrDummy,//ADC转换中断

isrKeyBoard,//键盘中断

isrDummy,//SCI2发送中断

isrDummy,//SCI2接收中断

isrDummy,//SCI2错误中断

isrDummy,//SCI1发送中断

isrDummy,//SCI1接收中断

isrDummy,//SCI1错误中断

isrDummy,//SPI中断

isrDummy,//TPM2溢出中断

isrDummy,//TPM2通道1输入捕捉/输出比较中断

isrDummy,//TPM2通道0输入捕捉/输出比较中断

isrT1Out,//TPM1溢出中断

isrDummy,//TPM1通道5输入捕捉/输出比较中断

isrDummy,//TPM1通道4输入捕捉/输出比较中断

isrDummy,//TPM1通道3输入捕捉/输出比较中断

isrDummy,//TPM1通道2输入捕捉/输出比较中断

isrDummy,//TPM1通道1输入捕捉/输出比较中断

isrDummy,//TPM1通道0输入捕捉/输出比较中断

isrDummy,//ICG的PLL锁相状态变化中断

isrDummy,//低电压检测中断

isrDummy,//IRQ引脚中断

isrDummy,//SWI指令中断

//RESET是特殊中断,其向量由开发环境直接设置(在本软件系统的Start08.o文件中)

};

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1