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

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

数字抢答器

学院:_________________________

专业:_________________________

班级:_________________________

姓名:_________________________

学号:_________________________

年 月 日

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

摘要:本设计是以飞思卡尔公司的AW60HCS08单片机为核心设计的四路抢答器。本抢答器能实现四人抢答、倒计时10秒后就不能抢答、数码管显示抢答成功的按键及倒计时,在抢答成功和十秒倒计时结束时报警等功能。同时该抢答器是基于单片机设计出来的,因此很容易对抢答器的路数进行扩展,同时又避免了由门电路组合的数字抢答器随着路数的增加线路数目成倍增加的问题。与门电路搭建的抢答器相比,该抢答器不仅在结构上显得简单,而且在费用方面也略显优势。

Abstract: The Freescale's AW60HCS08 microcontroller is used as the core design of four way responder. The responder can achieve four vies to answer first, the countdown after 10 seconds cannot succeed in digital tube display vies to answer first vies to answer first, keys and the countdown, at the end of the vies to answer first success and ten seconds countdown alarm. The responder is based on single-chip design, so it is easy to extend ways of the responder, and the num of lines is increasing exponentially with the number increase of ways of the digital gate circuit. Compared to the responder builded by the gate circuit , the responder is not only simple in the structure, but also slightly better in terms of costs.

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

Key words: aw60, four people vies to answer first, the countdown 10 s, digital tube display

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)相比HC08 CPU指令集,S08 CPU增加了BGND 指令。

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

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

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

(6)ADC :多达16个通道,10位A/D转换器与自动比较功能;两个串行通信接口SCI 模块与可选的13位中断;一个串行外设接口SPI 模块;集成电路互连总线I 2C 模块运作高达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"

void main(void)

{

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

//uint8 start=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 函数 *

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

interrupt void isrKeyBoard(void)

{

uint8 value,KeyDef;

uint16 i;

for(i=0; 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)

{

flag=1;

}

}

}

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

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

EnableInterrupt() ; //开总中断

}

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

//函数名: isrT1Out *

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

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

//参 数: 无 *

//返 回: 无 *

//说 明: 无 *

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

interrupt void isrT1Out(void) //溢出时间0.5s

{

uint8 temp;

DisableInterrupt(); //禁止总中断

if(start==1)

{

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

if(num!=0)num--;

else num=0;

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

if(num!=0)

{

ledbuf[2]='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);

}

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(); //开放总中断

}

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

interrupt void isrDummy(void)

{

}

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

typedef void( *ISR_func_t)(void);

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

const ISR_func_t ISR_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 文件中)

};

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

数字抢答器

学院:_________________________

专业:_________________________

班级:_________________________

姓名:_________________________

学号:_________________________

年 月 日

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

摘要:本设计是以飞思卡尔公司的AW60HCS08单片机为核心设计的四路抢答器。本抢答器能实现四人抢答、倒计时10秒后就不能抢答、数码管显示抢答成功的按键及倒计时,在抢答成功和十秒倒计时结束时报警等功能。同时该抢答器是基于单片机设计出来的,因此很容易对抢答器的路数进行扩展,同时又避免了由门电路组合的数字抢答器随着路数的增加线路数目成倍增加的问题。与门电路搭建的抢答器相比,该抢答器不仅在结构上显得简单,而且在费用方面也略显优势。

Abstract: The Freescale's AW60HCS08 microcontroller is used as the core design of four way responder. The responder can achieve four vies to answer first, the countdown after 10 seconds cannot succeed in digital tube display vies to answer first vies to answer first, keys and the countdown, at the end of the vies to answer first success and ten seconds countdown alarm. The responder is based on single-chip design, so it is easy to extend ways of the responder, and the num of lines is increasing exponentially with the number increase of ways of the digital gate circuit. Compared to the responder builded by the gate circuit , the responder is not only simple in the structure, but also slightly better in terms of costs.

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

Key words: aw60, four people vies to answer first, the countdown 10 s, digital tube display

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)相比HC08 CPU指令集,S08 CPU增加了BGND 指令。

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

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

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

(6)ADC :多达16个通道,10位A/D转换器与自动比较功能;两个串行通信接口SCI 模块与可选的13位中断;一个串行外设接口SPI 模块;集成电路互连总线I 2C 模块运作高达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"

void main(void)

{

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

//uint8 start=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 函数 *

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

interrupt void isrKeyBoard(void)

{

uint8 value,KeyDef;

uint16 i;

for(i=0; 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)

{

flag=1;

}

}

}

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

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

EnableInterrupt() ; //开总中断

}

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

//函数名: isrT1Out *

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

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

//参 数: 无 *

//返 回: 无 *

//说 明: 无 *

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

interrupt void isrT1Out(void) //溢出时间0.5s

{

uint8 temp;

DisableInterrupt(); //禁止总中断

if(start==1)

{

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

if(num!=0)num--;

else num=0;

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

if(num!=0)

{

ledbuf[2]='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);

}

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(); //开放总中断

}

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

interrupt void isrDummy(void)

{

}

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

typedef void( *ISR_func_t)(void);

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

const ISR_func_t ISR_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 文件中)

};


相关内容

  • 说明书模板
  • 苏 州 市 职 业 大 学 实习(实训)报告 名称 2013年 1 月 7 日至 2013 年 1 月 11 日共 1 周 院 系 计算机工程系 班 级姓 名 系 主 任 教研室主任 指导教师 目 录 一.课程设计的目的与要求..................................... ...

  • 基于80C51单片机的八路抢答器设计
  • 专业论文 题目:基于80C51单片机的八路抢答器设 计 摘要:八路智力抢答器是一个可供八个参赛组进行智力竞赛的电路装置,该 装置主要是由单片机最小系统.控制电路(八个选手抢答按钮:三个主持人 控制按钮:四个修改按钮).数码显示电路与蜂鸣器电路组成的.单片机 (MCU )是目前在电气控制技术中广泛应用 ...

  • 基于51单片机抢答器毕业设计
  • 基于AT89C51的八路抢答器 摘 要 抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合.但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低.作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影 ...

  • 单片机多路抢答器
  • 基于单片机的多路抢答器 1引言 此次设计提出了用AT89C51单片机为核心控制元件,设计一个简易的抢答器,本方案以AT89C51单片机作为主控核心,与晶振.数码管.蜂鸣器等构成八路抢答器,利用了单片机的延时电路.按键复位电路.时钟电路.定时/中断等电路,设计的八路抢答器具有实时显示抢答选手的号码和抢 ...

  • 单片机八路抢答器课程设计
  • 编号: 单片机课程设计报告 题 目:八路抢答器设计制作 院 (系): 电子工程系 专 业: 电子信息工程技术 学生姓名: 学 号: 指导教师单位: 姓 名: 题目类型:理论研究 实验研究 工程设计 工程技术研究 软件开发 2010年7月3日 课程设计( 论 文 )评 语 摘 要 随着社会的 ...

  • 电子综合课程设计题目
  • 电子综合课程设计题目汇总 1. 水温控制系统设计 任务:设计并制作一个水温自动控制系统,控制对象为1升净水,容器为搪瓷器皿.水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保持设定的温度基本不变. 要求: 1)基本要求 (1)温度设定范围为40-90℃,最小区分度为1℃,标定温度 ...

  • 毕业论文数显抢答器(八路)
  • 基于单片机的智能抢答器系统 摘要: 电子智能抢答计分器在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务.如果在抢答中,靠视觉是很难判断出哪组先答题.利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题.本设计使用STC8 ...

  • 基于单片机的毕业论文
  • 目 录 第一章 抢答器的概述 1.1 系统设计的功能 1.2 抢答器需求分析 1.3 抢答器的工作原理 第二章 单片机的功能简介 2.1 89系列单片机的概述 2.2 AT89S51的功能 2.2.1 TA89S51特殊功能寄存器 2.2.2 AT89S51单片机的内部结构 第三节 硬件电路的设计 ...

  • 基于51单片机的抢答器实验报告
  • 实习(设计) 报告 姓 名 班 级 学 号 实习(设计) 科目 基于51单片机的五路抢答器 实习(设计) 地点 实习(设计) 时间 电气工程及自动化学院 School of Electrical Engineering & Automation 说明:(1)本日志用于记录实习(设计)过程中的 ...