Ⅰ 急急急!!!求制作计时器的硬件电路
【摘 要】篮球比赛30秒钟规则规定:进攻球队在场上控球时必须在30秒钟内投篮出手(NBA比赛为24秒,全美大学体育联合会比赛中为35秒),因此在比赛时裁判既要看比赛又要看秒表计时,而本文介绍的30秒倒计时器可以解决此问题。
【关键词】AT89C51单片机、30秒倒计时器、LED
30秒倒计时器的设计和制作有很多方法,本文介绍的30秒倒计时器以AT89C51单片机作为控制单元,采用两个数码管显示时间,用三个按键分别控制计时器的计时开始、复位和暂停。倒计时器初始状态显示“30”,当裁判员按下计时键,30秒倒计时开始,当计时器时间减到0时,计时器发出声光报警,提示裁判计时时间已到。
一、电路设计
30秒倒计时器的电路主要由电源电路、单片机最小系统、按键输入、显示驱动电路、报警电路组成,30秒倒计时器控制电路如图1所示。
图1 30秒倒计时器电路原理图
1、按键输入
“30秒倒计时器”采用了三个按键来完成计数器的启动计数、复位、暂停/继续计数等功能。
(1)K1键:启动按钮(P3.2)。
按下K1键,计数器倒计时开始,数码管显示数字从30开始每秒递减计数,当递减到到零时,报警电路发出声、光报警信号。当计数器处于暂停状态时按下K1键将回到计时状态。
(2)K2键:复位按钮(P3.3)。
按下K2键,不管计数器工作于什么状态,计数器立即复位到预置值 “30” ,在报警状态时按下K2键还可取消报警。
(3)K3键:暂停/计时切换按钮(P3.4)。
当计数器处于计时状态时按下该键计数器暂停计时,数码管显示数字保持不变;当计数器处于暂停状态按下该键计数器将回到计时状态;初始状态时该键无效。
2、显示驱动电路
“30秒倒计时器”用两个共阳数码管来显示时间,数码管显示方式为动态显示。显示驱动电路中,数码管的段码引脚通过470欧的电阻接到单片机的P1口,两个片选引脚各通过一个9012连接到正5V电源,由P3.0和P3.1控制。
4、报警电路
计时时间减到0,显示数码管显示“00”时,发光二极管D1由P3.5控制发出光报警,同时蜂鸣器由P3.7控制发出声报警。
二、软件编程思路
1、全局变量
“30秒倒计时器”动作流程主要受三个全局变量控制。首先是bit变量“act”,当“act”为“1”时倒计时开始,为“0”时倒计时停止,“act”初值为“0”,可以由按钮操作将其置“1”或清“0”。第二个全局变量是char变量“time”,存放倒计时的时间,当倒计时时间为0时,发出声光报警。变量“time”的初值为30,定时中断服务程序在“act”为1时,每1s对其进行减1操作,减到0时保持为0,按下“复位键”可将“time”复位为30。第三个全局变量是int变量“t”,记录响应定时中断0的次数。根据初始化定义,定时器0以方式1工作,每1ms发出一次中断请求。控制程序只开放了定时器0中断,因此不会有比定时器0中断更高级的中断被允许,所以每次请求都会立刻被响应。响应后在中断服务程序中将全局变量“t”加1记录响应中断次数,每响应1000次即为1秒钟。变量“t”初值为0,在中断服务程序中加1,当“t”为2000时由中断服务程序清0。在按键驱动程序中,按下启动键、复位键、暂停/启动键时将“t”清0,目的是从0ms开始计时。
2、控制流程
主程序主要用来检测全局变量“time”当“time”为0时发出“声光报警”。按键驱动、显示驱动和“time”操作都在定时器0中断服务程序中进行。其控制流程如图2所示。
图2 控制流程图
三、软件程序设计
1、数码管驱动程序
到计时器的两个数码管以动态显示的方式显示计时时间“time”(全局变量),LED1显示“time”的十位,LED2显示“time”的个位。
(1)定义段码数据口和片选信号
根据实际电路,在C51中定义段码的数据口为P1,两个片选信号为P3.0和P3.1。定义如下:
#define an P1
sbit wei1=P3^0;
sbit wei2=P3^1;
(2)定义字形码
LED显示数字0~9以及全灭的字形码表格放在数组zixing[]中。字形码是固定的表格,定义时加上关键字“code” 表示该表格存放在程序存储器中。
unsigned char code zixing[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};
(3)定义数码管LED1和LED2的显示变量
为了增加驱动程序的可移植性,笔者为数码管LED1和LED2定义了显示变量。显示变量就是本驱动程序的对外接口,外部程序只要改变显示变量的值就可改变数码管显示的数值。定义方式如下:
unsigned char led_str[2]={10,10};
led_str[0]直接对应数码管LED1, led_str[1]直接对应数码管LED2。本项目中由专门的子程序将全局变量time计算拆分成led_str[0]和led_str[1]。
void js()
{
led_str[1]=time/10;
led_str[0]=time;
}
(4)数码管驱动程序
数码管驱动程序“void chushi(char i)”在定时中断服务程序中被调用执行。根据初始化程序的定义,定时中断服务程序每1ms被执行一次。定时中断服务程序中运用全局变量“t”记录进入该服务程序的次数,“t”计满2000由定时中断服务程序清零。
数码管驱动程序的参数“char i”是用来确定当前点亮的是LED1还是LED2,当参数为“0”时点亮LED1,参数为“1”时点亮LED2。如果我们希望偶数次进入定时中断服务程序时点亮LED1,奇数次进入定时中断服务程序时点亮LED2,我们可以用程序调用语句“chushi(t%2);”轻松实现。
进入数码管驱动程序后首先调用子函数js(),计算当前的led_str[0]和led_str[1]。接下来将两个数码管全部熄灭以防止余晖的出现。最后点亮需要点亮的数码管并送出字型码。驱动程序代码如下:
void chushi(char i)
{
js(); //计算显示变量
an=0xff; //去余晖
wei1=i; wei2=!i; //确定片选
an=zixing[led_str[i]]; //送字型码
}
2、按键驱动程序
按键驱动程序分为按键识别和按键功能执行两部分。按键功能执行可在按键按下时或按键抬起后执行,文中将其设计在按键抬起后执行。
(1)定义按键I/O地址
根据实际电路,三个按键(启动键、复位键、暂停/启动键)分别接在P3口的P3.2,P3.3和P3.4三个引脚上。为了取键值方便还将P3口定义为“iokey”,程序中可作定义如下:
#define iokey P3
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
(2)按键驱动流程
按键识别的通用流程为:I/O口写“1”→判断有无键按下→延时去抖→确定键值→等待按键抬起→执行按键功能。按键驱动程序中定义了两个静态变量“ts” 和“kv”,分别用来延时去抖和存放键值。
(3)延时去抖
静态变量“ts”用来延时去抖。按键驱动程序在定时中断服务程序中每1ms被执行一遍,每检测到有键按下“ts”加1,检测到无键按下“ts”清0。按键连续按下20ms,则连续20次执行按键驱动程序时都检测到有键按下,此时静态变量“ts”累加到20,可确认按键按下有效。
为防止按键一直按着不放而使“ts”累加到溢出,确认有键按下后可使“ts”的值保持为20,或大于20的某一个值如21。
(4)取键值
确认有键按下后即可通过读取按键的I/O口状态来得到键值。为读取P3.2、P3.3和P3.4引脚状态,屏蔽P3口其他引脚的影响,可将读取后的数值按位或上11100011B(0xE3)再送给静态变量“kv”。
静态变量“kv”存放按键的键值,无键按下或按键抬起后kv的值为0。按下启动键key1时kv=11111011B(0xFB),按下复位键key2时kv=11110111B(0xF7),按下暂停/启动键key3时kv=11101111B(0xEF)。
(5)执行按键功能
按键抬起后第一次执行按键驱动程序时,静态变量“kv”任保持着按键按下时最后得到的键值,以该键值作为参数调用按键执行程序“actkey(kv);”即可执行按键功能。调用后kv值立刻清0,确保按一次键执行一次按键功能。驱动程序代码如下:
void key()
{
static unsigned char kv=0;
static unsigned char ts=0;
key1=1;key2=1;key3=1;
if(!(key1
Ⅱ 谁告诉我2秒延时电路怎么做啊,也就是通电两秒,电流通过才能电路
不清楚你要控制什么,简单的买个时间继电器就可以了,复杂的请看图,或者回到这里看看吧答http://image..com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=image&istype=2&fm=index&pv=&z=0&word=%D1%D3%CA%B1%B5%E7%C2%B7&s=0
Ⅲ 要求做一个打开开关延迟3秒才输出5v电源,硬件电路实现延迟打开,听说用触发器可以做,求电路图和原件
延时3s的时间很短,无需使用触发器和单稳态电路,仅用一个三极管和电阻电容组成RC延时版电路即可,连小继电权器都算也才5-6个元件,图在网上多得很,懒得画了.随便找了一个:
如要频繁启动(1分钟内),应在可调电阻上反向并联一个二极管作为电容的泄放通道,各元件参数要实验确定.
Ⅳ 什么是软件延时什么是硬件延时以及各自的特点
软件延时是通过使用空运算来消耗芯片的一定运算周期来实现延时的
硬件延时是通过硬件上的计时模块或中断模块来实现一定的延时的
Ⅳ 延时硬件电路,一个瞬间的高电平信号(5V)如何用硬件电路把它延长
关键是延长时间问题,一般的话,用一只电容充电,给一只场效应管栅极就能延时很久。
Ⅵ 求通电延时电路,,上电即触发,,延时1秒后接通电路
1S是准确,还是不准确的,不准确就RC延时,准确就555,更加准确就是晶振+分频器,或者MCU。
RC延时,
就这样的电路,9013的VBE是1.2V,计算好分压电阻的比值就可以了
Ⅶ 如何用硬件电路搭建带有滞后的一阶系统
自锁电路加个延时很实用,刚实现个自杀电路利用了rc延时。自杀电路用在底层程序活着但是受到干扰运行不正常,断电硬复位。
模拟方法:超声波或者电磁延迟线构成纯滞后,一节用RC或者RL。
Ⅷ 硬件延时电路设计
本设计中选用目前应用较广泛的VHDL硬件电路描述语言,实现对路口交通灯系统的控制器的硬件电路描述,在Altera公司的EDA软件平台MAX+PLUSⅡ环境下通过了编译、仿真,并下载到CPLD器件上进行编程制作,实现了交通灯系统的控制过程。 关键词:EDA;VHDL;控制器;CPLD
引言
EDA技术是用于电子产品设计中比较先进的技术,可以代替设计者完成电子系统设计中的大部分工作,而且可以直接从程序中修改错误及系统功能而不需要硬件电路的支持,既缩短了研发周期,又大大节约了成本,受到了电子工程师的青睐。
实现路口交通灯系统的控制方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统调试的困难。因此,在设计中采用EDA技术,应用目前广泛应用的VHDL硬件电路描述语言,实现交通灯系统控制器的设计,利用MAXPLUSⅡ集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的控制作用。
交通灯系统控制器设计要求
路口交通灯控制系统与其他控制系统一样,划分为控制器和受控电路两部分。控制器使整个系统按设定的工作方式交替指挥车辆及行人的通行,并接收受控部分的反馈信号,决定其状态转换方向及输出信号,控制整个系统的工作过程。
按照路口交通运行的实际情况,在本系统中,设定系统的工作情况如下。
路口交通灯控制系统的东西路有交通灯R(红)、Y(黄)、G(绿);东西人行安全通道灯:RXR(红)、RXG(绿)。南北路有交通灯:r1(红)、y1(黄)、g1(绿);南北人行安全通道灯:rxr1(红)、rxg1(绿),所有灯均为高电平点亮。设置15s的通行时间和5s转换时间的变模定时电路,由预置输入整数cnt决定是模15还是模5,输入逻辑cx是用来决定计数到4时清零还是到14时清零。Clk是外部提供的基准秒脉冲信号。x0、x1、x2、x3是由控制器输出的表示计数时间的四位二进制数。图1是该系统控制器的符号框图。
控制器的程序设计
* 控制器的ASM图
根据系统设计要求,得到控制器的ASM图,如图2所示。在这里,所有输入信号均为高电平有效。该ASM图反映了交通灯系统的不同状态的转换过程及持续时间。
* 控制器的VHDL程序设计
根据所分析的系统的ASM图,结合系统的设计要求,用VHDL语言对各个模块进行编程,最后形成顶层文件,在MAX+PLUSⅡ环境下进行编译与仿真,检查所编程序是否运行正确。如果出现错误,需要进行修改,直到完全通过为止。需要说明的是,在进行程序编译时,要先从底层程序开始,所有底层程序都正确后,才能开始顶层程序的编译。这是因为顶层程序是对底层程序的概括,它是把底层程序各个模块连接起来,就相当于把每个模块的功能汇聚到一起,实现整个系统的控制功能,所以底层程序的正确与否,关系到顶层程序的运行结果。
在控制器的程序设计中,在定义结构体时,有两种程序设计方法均可以通过编译及仿真,但在进行时序分析时结果却不同。
(1)如果这样定义:
...
ARCHITECTURE con1_arc of con1 IS
SIGNAL current_state:state;
BEGIN
...
在进行程序调试时,均通过了编译及仿真,但在进行时序分析中,却出现了不按设定的计数顺序工作的结果:14, 13, 2,1, 0...。经过反复修改调试,对程序进行了修改,如(2)所定义的。
(2)
ARCHITECYTURE con1_arc OF con1 IS
SIGNAL current_state:state;
SIGNAL TEMP_STATE:state;
...
TEMP STATE<=current_state;
BEGIN
...
在这种设计方法中,多定义了一个信号变量,从而使得程序能按设定的状态14,13,12...进行转换。通过这个实例,可以看出EDA技术作为电子设计工具的功能修改及调试的方便快捷,即不需要硬件电路的支持就可以找到问题所在并进行修改,体现了它的优越性。
硬件电路实现
根据交通灯系统的控制要求,图3所示为本系统的硬件电路图。该电路包含了1个CPLD芯片,2个七段LED数码显示器,20个分别表示各个方向上的红、黄、绿灯,以及相应的限流电阻。这个电路与其他控制方法相比,所用器件可以说是比较简单经济的。经过实验,实现了预定的交通灯系统的控制功能。
或单片机,PLC教材上有实例.
Ⅸ 如何用简单的硬件制作一个延时电路 就是 按一下开关开始延时三秒,松一下在按再延时三秒,按着不懂只延
最简单的当然是利用RC延时或者555定时器了,但是你这个配合按键,规则又略显得复杂,倒是不如直接放个C51,然后在软件里面解决
Ⅹ 长延时电路 的实现问题 请教一下 怎样硬件延时 4个小时以上
cd4060
这个图稍改即可