基于AW60十秒倒计时抢答器的设计.docx
- 文档编号:6671203
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:21
- 大小:371.91KB
基于AW60十秒倒计时抢答器的设计.docx
《基于AW60十秒倒计时抢答器的设计.docx》由会员分享,可在线阅读,更多相关《基于AW60十秒倒计时抢答器的设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于AW60十秒倒计时抢答器的设计
基于AW60十秒倒计时抢答器的设计
完成人:
黄镇(电子1203)冯越(电子1203)马沛沛(电子1203)
摘要:
充分了解aw60的引脚功能,再利用这些集成芯片的功能来设计成:
能实现四人抢答、倒计时10秒后就不能抢答、数码管显示抢答成功的按键及倒计时,在抢答成功和十秒倒计时结束时报警。
由黄镇完成程序设计,马沛沛完成硬件设计,冯越完成报告
Abstract:
fullyunderstandaw60pinfunction,usingtheintegratedchipfeaturestodesigninto:
canrealizefourviestoanswerfirst,thecountdownafter10secondscannotsucceedindigitaltubedisplayviestoanswerfirstviestoanswerfirst,keysandthecountdown,attheendoftheviestoanswerfirstsuccessandtensecondscountdownalarm.
关键字:
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系统组成及工作原理
以下为系统的流程图,其中开始键,1234抢答键为键盘控制,由中断中的程序控制各种状态的实现,其工作原理为:
接通电源后,抢答器数码管数码管0010,主持人按下开始键,抢答器的计时器开始进行10s的倒计时;选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、时间显示、数码管闪烁、蜂鸣器提示。
挡在正常的十秒抢答时间中没有人按下抢答键,则倒计时一直进行到零,数码管显示0000,蜂鸣器报警,数码管闪烁,当主持人再次按下开始键时数码管恢复到0010开始新一轮抢答倒计时。
3硬件设计
3.1硬件组成
本设计实验硬件部分包括按键模块、电源模块、LED模块、蜂鸣器模块
Led模块为显示模块,包括显示10s倒计时,抢答编号,抢答时间,数码管闪烁。
蜂鸣器模块提供当有抢答或倒计时到0时的报警功能。
键盘模块提供抢答键1234,开始(复位)键。
电源模块提供电源。
3.2单片机核心模块
本设计采用AW60单片机,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)Timers:
1个2通道和1个6通道16位定时器/脉冲宽度调制器模板。
具有输入、捕捉、输出比较、脉宽调制功能。
3.3显示和控制电路
本系统采用数码管显示抢答位和剩余时间,钜阵键盘用于抢答器开始复位和的抢答工作。
数码管显示原理简单,编程比较容易实现。
矩阵键盘可以实现多种控制,便于扩展功能,同时又可节省大量的IO口,供单片机的其它功能应用。
3.4电源模块
电路中需要大量引脚用来提供足够的电流容量。
所有的电源引脚必须有适当的旁路电容,来抑制高频噪音。
一些VDD和VSS引脚仅用于噪音旁路。
图中的电源电路显示了一个典型的电源连接图。
电源电路部分的电容构成滤波电路,可以改善系统的电磁兼容性,降低电源波动对系统的影响,增强电路工作稳定性。
为标识系统通电与否,可以增加一个电源指示灯。
注意那些仅连接电容的引脚,不要将它们直接连接电源电压
3.5蜂鸣器模块
在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣
器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了
3.6长距离传输模块
限制数据长距离传输的因素
远距离,几十公里几百公里的数字信号传输,可采用单用调制解调器的调频、调相或调幅的传输设备来实现,并可利用已有的电话线等作为传输线。
而传输距离只有几百米或几十公里时,就不需要调制解调器的传输模式,耳壳采用数字信号的直接传输方式,是传输速度、误码率等性能优于采用调制解调器的传输方式。
尤其是近距离点对多点的数据传输,采用数字信号直接传输的方法更具优势。
限制数据长距离传输的因素
1.外界电磁场通过传输线对信号产生的干扰
由于发送和接收设备之间存在的公共地线,因此各种干扰极易通过公共地线叠加在信号上,特别是现场的电磁干扰通过公共底线能很容易的导入接受设备。
2.传输线分布电容
数据的传输实际上是对传输线分布电容充电和放电的过程,而充电的上升时间和放电的下降时间有所不同,会引起数据接受错误。
3.传输线存在的地的电位差
传输线间连接的公共地线,由于发送设备和接受设备往往使用各自的电源设备。
是二者的电位可能不一致,从而信号地线中会产生电流。
由于传输线电阻的此女在,使底线两端产生电压降,即电位差。
当发送设备想接收设备发送数据时,接受设备得到的电压信号与没有地电位差时得到的不同。
当又用信号较小、而地电位差较大时,接受设备无法得到准确的信号,数据传输将无法进行。
4.传输线的负载阻抗与传输特性阻抗不匹配
当传输的负载阻抗与传输特性阻抗不匹配时,会在线路中产生多次发射,致使信号产生畸变,数据传输出现错误
5.传输线的分布电阻
6.传输线间的干扰
长距离传输按键模块
远程控制电路
通过一个共射放大电路,基极输入一个高电平,三极管导通,集电极接地,输出是低电平。
(可能会有一个0.3V左右的电压可以忽略看做一个低电平。
)基极输入低电平,三极管关断,集电极电压为电源电压,输出是高电平。
长距离传输压降模块
稳压电路
利用了LM317三端可调输出正电压稳压器。
来调节输入的电压使输出电压达到单片机要求的5V电压。
在控制电路与稳压电路之间加了一个电阻充当电线的阻抗。
4程序设计
4.1主程序设计
程序开始后初始化芯片,模块,变量,然后进行主循环,开始执行主程序,计时器开始10s倒数计时数码管显示状态为0010,执行过程中还可检测是否有抢答键,如果按下则计时停止后两位数码管显示时间,第一位数码管显示抢答编号,其他数码管均为零,蜂鸣器报警,延时2s,再次按下开始复位键时,数码管显示0010进行倒计时。
如果没有抢答键按下,则倒计时为零时数码管显示0000,并开始闪烁,蜂鸣器报警延时2s。
4.2子程序设计
附录一:
电路实物照片
附录二:
模拟电路仿真图
附录三:
电路原理图
附录四:
主要程序
//-------------------------------------------------------------------------*
//工程名:
timer*
//硬件连接:
(1)PTD.0接指示灯*
//
(2)MCU的串口与PC方的串口相连*
//程序描述:
*
//
(1)TPM1溢出中断,数码管显示分秒信息。
//目的:
学习定时器基本功能*
//说明:
无*
//----------------苏州大学飞思卡尔嵌入式系统研发中心2011年-----------------*
//总头文件
#include"Includes.h"
voidmain(void)
{
//1主程序使用的变量定义
uint32mRuncount=0;//运行计数器
ledbuf[0]='0';
ledbuf[1]='0';
ledbuf[2]='1';
ledbuf[3]='0';
//2关总中断
DisableInterrupt();//禁止总中断
//3芯片初始化
MCUInit();
//4模块初始化
Light_Init(Light_Run_PORT,Light_Run,Light_OFF);//指示灯初始化
TPMinit(TPM_NUM_1);//定时器1初始化
//SCIInit(SCI_NUM_1,SYSTEM_CLOCK,9600);//串行口初始化
LEDinit();
KBInit();//键盘初始化
GPIO_Init(PORT_C,6,1,0);//GPIO初始化
//5内存初始化
//6开放中断
EnabletimerInt(TPM_NUM_1);//开放定时器1溢出中断
EnableInterrupt();//开放总中断
EnableKBint();//开键盘中断
//7主循环
while
(1)
{
//1主循环计数到一定的值,使小灯的亮、暗状态切换
mRuncount++;
if(mRuncount>=1000)
{
mRuncount=0;
}
//2主循环执行的任务
LEDshow(ledbuf);
}
}
//-------------------------------------------------------------------------*
//文件名:
isr.c*
//说明:
中断处理函数文件*
//-------------------------------------------------------------------------*
//头文件
#include"isr.h"
uint8KeyDef;
uint8aa=0;
//-------------------------------------------------------------------------*
//函数名:
isrKeyBoard*
//功能:
扫描键盘,向串口发送键值和定义值*
//参数:
无*
//返回:
无*
//说明:
调用了KBScanN、SCISend1、KBInit函数*
//-------------------------------------------------------------------------*
interruptvoidisrKeyBoard(void)
{
uint8value;
uint16i;
for(i=0;i<1000;i++);
DisableInterrupt();//关总中断
DisableKBint();//屏蔽键盘中断
value=KBScanN(10);//扫描键值,存于value中
if(value!
=0xFF)
{
KeyDef=KBDef(value);
if(KeyDef=='*')
{
aa=0;
ledbuf[0]='0';
ledbuf[1]='0';
ledbuf[2]='1';
ledbuf[3]='0';
jishu=0;
k=0;
}
else
{
if(aa==0)
{
if(KeyDef=='1'||KeyDef=='2'||KeyDef=='3'||KeyDef=='4')
{
aa=1;
k=1;
x=ledbuf[2];
y=ledbuf[3];
z=KeyDef;
b=1;
GPIO_Set(PORT_C,6,1);
Delay
(2);
GPIO_Set(PORT_C,6,0);
}
}
}
}
KBInit();//键盘初始化键盘中断
EnableKBint();//开放键盘中断
EnableInterrupt();//开总中断
}
//此处为用户新定义中断处理函数的存放处
//-------------------------------------------------------------------------*
//函数名:
isrT1Out*
//功能:
定时器1溢出中断处理函数,以秒为最小单位计时,并清定时器1溢出标志位*
//参数:
无*
//返回:
无*
//说明:
调用SecAdd1函数*
//-------------------------------------------------------------------------*
interruptvoidisrT1Out(void)//溢出时间1s
{
uint8temp;
DisableInterrupt();//禁止总中断
if(k==0)
{
if(jishu==0)
{
if((ledbuf[3]=='0')&(ledbuf[2]=='0'))
{
ledbuf[0]='0';
ledbuf[1]='0';
ledbuf[2]='0';
ledbuf[3]='0';
jishu=1;
a=1;
GPIO_Set(PORT_C,6,1);
Delay
(2);
GPIO_Set(PORT_C,6,0);
}
else
ledbuf[3]--;
if(ledbuf[3]<'0')
{
ledbuf[2]--;
ledbuf[3]='9';
}
}
else
if(a==1)
{
ledbuf[0]='0';
ledbuf[1]='0';
ledbuf[2]='0';
ledbuf[3]='0';
a=0;
}
else
{
ledbuf[0]=10;
ledbuf[1]=10;
ledbuf[2]=10;
ledbuf[3]=10;
a=1;
}
}
else
{
if(b==1)
{
ledbuf[0]=z;
ledbuf[1]='0';
ledbuf[2]=x;
ledbuf[3]=y;
b=0;
}
else
{
ledbuf[0]=10;
ledbuf[1]=10;
ledbuf[2]=10;
ledbuf[3]=10;
b=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文件中)
};
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AW60 倒计时 抢答 设计