单片机定时器应用

2024-06-23

单片机定时器应用(共9篇)

单片机定时器应用 篇1

1 引言

单片机的定时器是单片机里最“活跃”的部件之一,很多程序、应用系统都离不开定时器。由于定时器的应用与单片机的其他硬件相关,存在着一定的复杂性。而定时器也是单片机应用中解决某类复杂问题的最为有效的方法,应用非常广泛[1]。定时器的应用,可以说即简单又复杂。对于简单应用场合,时间要求较长不算很精确的场合,用起来就简单,对于复杂应用场合时间要求即短又精确的场合,用起来就要复杂。本文以STC90C51RC/RD+系列单片机定时器为研究对象,并给出几个示例程序。STC90C51RC/RD+系列单片机是宏晶科技推出的新一代超强抗干扰/高速/低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。

2 定时器/计数器应用

2.1 STC90C51RC/RD+系列单片机定时/计数器

STC90C51RC/RD+系列单片机共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用。定时器0和定时器1,与传统8051的定时器完全兼容,当在定时器1做波特率发生器时,定时器0可以当两个8位定时器用。

STC90C51RC/RD+系列单片机内部设置的两个16位定时器/计数器T0和T1都具有计数方式和定时方式两种工作方式。对每个定时器/计数器(T0和T1),在特殊功能寄存器TMOD中都有一控制位C/T来选择T0或T1为定时器还是计数器。定时器/计数器的核心部件是一个加法(也有减法)的计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每1 2个时钟或者每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5),则为计数方式,每来一个脉冲加1。

当定时器/计数器工作在定时模式时,可在烧录用户程序时在STC-ISP编程器中设置是系统时钟/12还是系统时钟/6后让T0和T1进行计数。当定时器/计数器工作在计数模式时,对外部脉冲计数不分频。

定时器/计数器0有4种工作模式:模式0(13位定时器/计数器),模式1(16位定时器/计数器模式),模式2(8位自动重装模式),模式3(两个8位定时器/计数器)。定时器/计数器1除模式3外,其他工作模式与定时器/计数器0相同,T 1在模式3时无效,停止计数。

定时器2是一个16位定时/计数器。通过设置特殊功能寄存器T2CON中的C/T2位,可将其作为定时器或计数器。

定时器2有3种操作模式:捕获、自动重新装载(递增或递减计数)和波特率发生器。这3种模式由T2CON中的位进行选择。

2.2 定时器/计数器应用

与传统8051单片机相比,STC90C51RC/RD+系列单片机性能更优越,就以定时/计数器为例,在笔者应用单片机定时器定时,输出脉冲过程中发现,如果需要用两个以上定时器同时工作,在定时时间较长情况下,前者的定时器能够胜任;但是,当两个同时工作的定时器至少有一个定时时间较短时,前者的定时器就会“罢工”。,鉴于此笔者选用STC90C51RC/RD+系列单片机作为研究对象。

如下几个示例程序,从不同方面应用STC90C51RC/RD+系列单片机的定时器,也充分展示了该类单片机的优越性。所有程序都经过keil软件调试通过,并生成*.hex文件烧入单片机实测。每一个程序都可作为一完整程序应用。

应用定时器进行定时或计数,不可避免要存在误差,而每个程序存在误差之处都以注释的形式标明。由于以下程序皆为C语言编写,需要经过编译器编译为汇编语言,所以,误差的精确值不易算出,仅仅标出产生误差的语句。而如果采用汇编语言编写,情况会好些。

1) 5秒内计数脉冲个数

单片机外接的振荡源频率为11.0592MHz,利用定时器0定时,每次定时50ms,循环100次,达到5s时间,利用定时器1计数5s内外部脉冲个数,并由串口传输给上位机。

本程序旨在说明定时器0与定时器1同时工作的编程方法与思路。

2) 定时器T0计数50个脉冲所需时间

/*查50个脉冲所需时间,脉冲由定时器T1发出,每50ms P1.1取反,形成脉冲,将P1.1连接到T0(14号)引脚,即可计数,定时器T0计数输入脉冲个数,50(0x32)先显示,之后,显示50ms的个数,再次显示TL1的值,最后显示TH1的值,此两个值是时间零头*/

……

……省略号部分与第一个程序相同

3) 定时器T2计数T1波特率发生器

/*脉冲由定时器T0发出,一定时间后p1.2取反,形成脉冲,T1波特率发生器,发出38k方波,T2计数,T2计数脉冲输入端为p1.0

……省略号部分与第一个程序相同

……

3 定时/计数器误差分析

由于单片机的机器周期为1μs~2μs,定时误差一般应在5μs~25μs之内,对于一般应用,此误差可以忽略,但是对于精确度要求比较高的应用场合,此误差必须进行校正[2]。定时误差是定时溢出后转入执行定时处理语句段之间所耗费的时间,此时间主要由定时溢出转入定时处理语句段所必须执行的指令或硬件过程产生.而且,在转入、转出定时器中断服务子程序过程都有延迟,即产生误差[1]。再有,如果像第一个程序那样,利用循环定时以产生更长定时,执行循环处理及控制指令时亦会产生误差,影响时间的精确性。

综上,虽然利用硬件定时会节省CPU的时间,并且,能产生较为“准确”的定时,但“准确”是相对的,误差会由于指令的执行而产生。为了得到更加精确的定时,这些误差是不容忽视的。

4 结束语

定时器是单片机里最“活跃”的部件之一,很多单片机的应用系统都是需要应用定时器。本文以STC90C51RC/RD+系列单片机作为研究对象,避开传统8051单片机的弊端,通过几个示例程序,展示了STC90C51RC/RD+系列单片机定时器的应用。程序并不复杂,也存在一定误差,如果想得到非常精确的定时,对于定时器的误差是必须考虑的,尤其是反复应用定时器的程序中,更要详尽考虑误差的产生原因及指令,必要时要做出修正。

参考文献

[1]王暄.单片机定时器的应用与误差纠正[J].电子元器件应用,2002,(5):15.

[2]沈威羽.单片机定时器的应用与误差纠正[J].经营管理者,2009,(1):20.

单片机定时器应用 篇2

/* 名称:定时器控制交通指示灯

说明:东西向绿灯亮5s后,黄灯闪烁,闪烁5次亮红灯,红灯亮后,南北向由红灯变成绿灯,5s后南北向黄灯闪烁,闪烁5次后亮红灯,东西向绿灯亮,如此往复。*/ #include #define uchar unsigned char #define uint unsigned int sbit RED_A=P0^0;//东西向指示灯

sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3;//南北向指示灯

sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;//延时倍数,闪烁次数,操作类型变量

uchar Time_Count=0,Flash_Count=0,Operation_Type=1;//定时器0中断函数 void T0_INT()interrupt 1 { TL0=-50000/256;TH0=-50000%256;switch(Operation_Type){

case 1: //东西向绿灯与南北向红灯亮5s

RED_A=0;YELLOW_A=0;GREEN_A=1;

RED_B=1;YELLOW_B=0;GREEN_B=0;

if(++Time_Count!=100)return;//5s(100*50ms)切换

Time_Count=0;

Operation_Type=2;

break;

case 2: //东西向黄灯开始闪烁,绿灯关闭

if(++Time_Count!=8)return;

Time_Count=0;

YELLOW_A=~YELLOW_A;GREEN_A=0;

if(++Flash_Count!=10)return;//闪烁

Flash_Count=0;

Operation_Type=3;

break;

case 3: //东西向红灯与南北向绿灯亮5s

RED_A=1;YELLOW_A=0;GREEN_A=0;

RED_B=0;YELLOW_B=0;GREEN_B=1;

if(++Time_Count!=100)return;//5s(100*50ms)切换

Time_Count=0;

Operation_Type=4;

break;

case 4: //南北向黄灯开始闪烁,绿灯关闭

if(++Time_Count!=8)return;

Time_Count=0;

YELLOW_B=~YELLOW_B;GREEN_A=0;

if(++Flash_Count!=10)return;

Flash_Count=0;

Operation_Type=1;

break;}

} //主程序 void main(){ TMOD=0x01;

//T0方式1 IE=0x82;TR0=1;while(1);}

应用于教改的单片机定时器 篇3

关键词:单片机,定时器,LED,拨码开关

1 引言

本套系统是为方便学生进行单片机实训而设计的,该系统不仅可以进行模拟数据采集,也可以进行开关量控制,由于我们的教学进度分两步,首先让同学们将电路板焊接好,进行数据的输入与显示及声光“报警”,这一步调试好后,再进行模拟量的采集整理。本文所描述的程序就是要求学生完成定时器的设置而编制的范例程序。

2 系统总体设计

本系统主要有七大部分组成,即:C P U,键盘(D I P拨码开关,也可以扩展),显示(4位L E D),模入,开出,报警及存储器七大部分。结构框图如图1。

3 系统原理

系统应用定时器t0,硬件定时100ms,定时器初值是3cafh,循环10次,即为1秒,循环600次即为一分钟。系统复位后,LED显示0000,并不断闪烁,同时系统利用蜂鸣器播放音乐《八月桂花香》,此时,拨动DIP1,开始设置定时时间秒数,拨动一次,L E D的后两位显示即加1,同时,音乐停止(只要开始设置时间,音乐即停止),如果DIP1拨上之后不动,那么秒数就不断自增,通过LED的后两位可显示出来,该两位L E D不断闪烁自增,当增至59后,再自增1,后两位LED恢复到00,同时前两位LED增1,表示秒数增至60,那么分钟增1,秒数恢复到00。拨下DIP1,拨动DIP2,设置定时时间分钟数,拨动一次,LED前两位闪烁增1,如果DIP2拨上不动,那么分钟数不断自增,因为使用2位LED显示分钟数,所以,分钟数最大为99分,当增至99时,再增1,则前两位LED自动恢复为00。时间设置好后,4位LED显示所设置时间,同时不断闪烁,处于“待命”状态,当拨上DIP3时,启动定时,后2位LED每秒闪烁一次,同时秒数减1,当减至00时,再下一秒,则分数减1,即前两位LED显示的数据减1,后两位LED从59开始递减。当定时时间到,即4位LED显示为0000时,停止闪烁,同时播放音乐《八月桂花香》。

4 系统设计

4.1 硬件子系统

CPU部分采用性价比较高的A T 8 9 C 5 1单片机,数据存储器选用一片6264,键盘部分可以扩展,暂用4位DIP,低位到高位分别对应8255的PC4至PC7,LED采用4个74LS48驱动,74LS48是共阴极7段数码管驱动芯片,当然,也可以用其它驱动芯片。播放音乐用的蜂鸣器就是声光报警所用的蜂鸣器,其通过74LS244驱动与CPU的P1.6相连。因本文只应用了本系统进行定时设置,所以,暂不对模拟部分进行介绍。以后另行描述。具体电路如图:[2]

4.2 软件子系统设计

在软件部分,完成本系统原理所描述的过程,关键程序如下:

设置时间程序段:

并且有控制铃声在设置时间过程中不响

以下程序为了播放音乐《八月桂花香》[1]

4结束语

本系统是应计算机系教改而设计的,其可实现的功能很多,现在先让学生完成数字部分的设计,下一步再进行模拟部分。对于模拟部分,本人还会继续编制一些范例程序,以后再继续阐述。本文介绍了带播放音乐的定时器,播放音乐的核心代码摘录自网上,已标明。在此,我对原作者深表感谢。本定时器的难点在于如何把音乐结合进来,并且如何控制停止播放,这样可进一步提高同学们的编程实践能力。

参考文献

[1]http://www.pe.gxnu.edu.cn/cx/Article/ArticleShow.asp?ArticleID=40,2007-8-19。

单片机实验三 定时计数器实验 篇4

定时/计数实验

一、实验目的

1、理解单片机的定时/计数原理,掌握定时/计数程序的编写方法。

2、掌握定时/计数器在定时、计数、频率测量等方面的应用。

3、学会使用PROTEUS中VSM虚拟示波器观察波形。

二、实验设备

计算机一台;单片机实验仪一台;Keil C51和Proteus软件。

三、实验内容

利用定时计数器1,编程实现从P1.0、P1.1、P1.2三个I/O引脚分别输出频率为0.25Hz、50 Hz、1k Hz的方波信号。利用P1.0、P1.1、P1.2三个I/O引脚所接的三个LED灯或利用示波器进行观察。已知fosc=12MHz。

四、实验电路图

图1 8路LED灯控制原理图

五、实验接线

P1.0、P1.1、P1.2三个I/O引脚接J12的三个引脚(即三个LED灯)。

六、思考题

1、简要写出实现该实验的方案(要有必要的计算)。

2、单片机定时/计数器的“加一”操作和单片机运行主程序是同时工作(并行工作)的,还是有先后顺序的?单片机运行中断程序和运行主程序是同时工作(并行工作)的,还是有先后顺序的?

3、单片机定时/计数器的定时与计数的区别是什么,软件上分别应如何设置?

4、在该实验的基础上,输出的三路信号的占空比可以分别为1/2,1/3,1/4吗?

七、实验报告要求 实验目的

1、实验目的

2、实验设备

3、实验内容

4、实验流程图

5、实验源程序

7、思考题解答

单片机唱歌报时器 篇5

作为一个单片机奏乐的入门级爱好者,此文引起笔者很大兴趣,也对笔者启发很大。笔者对该文进行了认真的研读、学习及实验,收获颇丰。之后,笔者努力尝试实用化,成功制作了一款单片机唱歌的实用作品——单片机唱歌报时器。此款报时器报时可靠,易于制作,成本低廉,兼有报时乐曲丰富且音质悦耳动听。尤其突出的是乐曲背景纯净,经放大后也无失真及任何杂音。现介绍给各位爱好者们。

硬件电路

此机与于永泉老师给出的电路相比具有以下特点:

1.在原电路基础上增加了硬件计时芯片DS1302和LED数码管实时时间显示部分,编程时增加对应驱动程序。实现24小时内根据用户设置时刻可达到40次奏乐报时。

2.增加了报时音频输出电路,考虑用外接功放驱动大功率扬声器。增加了外接功放受控电源电路,考虑在报时前给外接功放供电,报时结束时断开外接功放供电,实现节能。

3.增加了6键独立键盘电路,是考虑方便用户校时及用户对报时时刻进行设置。选用内部带有EEPROM存储空间的单片机STC89C52RC,用于存储用户设置的报时时刻。

图1是电路原理图。电路分为5V电源部分、单片机部分、实时时钟芯片部分、LED数码管显示驱动部分、键盘部分、报时音频输出及外接功放受控电源部分。为扩展需要,预留了一体化遥控红外接收头3线插座。另外笔者将此电路定位为单片机奏乐报时实验电路,所以为了调试方便,另增加了程序串口烧写电路。笔者将LED数码管显示板,键盘板用于洞洞板制作焊接,其余电路制做在一块印刷电路板上,见图2。共3块板子,各板之间用排线连接。

软件编写

鉴于用汇编语言编写程序效率低,全部程序改用C51编写。除主程序架构、用户报时时刻设置及DS1302驱动程序外,程序的核心就是一个报时函数。所有不同的乐曲简谱以数组形式存于ROM中,当报时时刻发生时,只要将乐曲简谱数组首地址传给报时函数即可报时。为了丰富报时音乐,笔者不辞繁复,编辑了12首不同乐曲简谱(如一些老歌,红歌,台湾校园歌曲等。如果读者感兴趣,这些报时乐曲可根据个人喜好增加或更改)烧存于ROM中。并实现在每天不同时段,自动用不同乐曲报时。

作品实物照如图3所示。

此项目电路不算复杂,程序较烦杂,由笔者独立编制,经多次修改而成,鉴于许多单片机相关文章一般只给出程序,少见程序编写思路介绍。笔者在此处重点介绍编写思路。由于知识水平、经验条件等限制,程序中疏漏拙笨错误之处不会少,但程序跑起来还是挺流畅的,预设功能也都实现了。此处敢丢砖引玉,请同行们不吝赐教。鉴于篇幅所限,此处只重点介绍部分关键程序编写思路及内容。完整程序请从《电子制作》官网www.ele169.com上下载。另外请恕笔者习惯用汉语拼音首字母拼变量名,各位读者可根据自身习惯修改。

笔者选型STC89C52RC单片机,内部资源是8K ROM,512RAM,4K EEPROM。用Keil uVision3编译C51源程序,用宏晶官网提供的STC_SP_V4.80串口烧录软件烧录。烧录时选择芯片工作在12T模式,外置12M晶振,因此可以直接用于永泉老师在原文中的公式来计算某音调简谱码对应的定时器1初值T,其中fi=1000000 Hz,fr为某音调简谱码对应的频率。

1.乐曲的编辑存储

首先将乐曲简谱中与音调对应的各音对应频率查出,用上述公式计算出T值并转换为4位16进制数记录备用,笔者使用windowsXP附件中的计算器软件计算转换,十分方便。

为简便起见,笔者以乐音时长(节拍)的1/1 6为基本延时单位,其他乐音时长都换算为其整数倍。以乐曲实际演奏快慢听觉效果确定基本延时单位的时间。笔者经反复调试后1/16拍延时函数时长定为152ms。

函数形参time接收延时1/16拍的倍数。例如某音是1/4拍,函数调用形式为

delay_152ms(4);//即1/16拍乘以4=1/4拍

这里该音节拍数为4。再将一个音T值分两字节,高位在前,低位在后,与节拍数值一字节组合,就构成3字节的该简谱对应的存储数据。一首乐曲各简谱按自身先后顺序就可以组成一个简谱数组,例如,《我爱北京天门》对应简谱数组为:

例如数组前3字节为《我爱北京天安门》简谱第一个音5对应T值及节拍数。最后Oxff,0xff为数组结束标志。

数组声明中要使用关键字code,以保证编译烧写时数据存在ROM中,否则就要存于512字节RAM中,这是远不够用的。ROM中的数据程序运行时为只读,不可改变。STC89C52RC有8K ROM,笔者编存了12首简短乐曲,再加上程序,还有些剩余。

2.主程序架构分析

程序分为DS1302驱动,时间读出显示部分;校时部分;用户报时时刻设置部分;EEPROM读写部分,搜寻匹配报时时刻部分等组成。这里重点介绍主程序。

如图4,主程序流程图较形象的表示出主程序架构。

单片机主程序一般要有一个无限循环,主要功能在此循环内实现。作品要进入实用阶段,主程序至少要具有以下功能:驱动实时时钟芯片ds1302计时并不断读取其中实时时分,驱动显示电路LED数码管显示时刻;将当前时刻与用户设置的报时时刻比较,判别有无时刻匹配,当有匹配时刻时奏乐报时;用户可以校时;用户可以设置报时时刻并存储,且机器掉电后设置数据不丢失。为此,笔者进行了这样处理:在此无限循环中考虑将各种功能分别编写成功能函数,并在程序运行时设置一个标志变量flag,基于其值的改变使程序在各功能函数之间切换跳转,最终解决了问题。

在进入主程序循环之前,声明变量flag,并赋初值1,在进入循环后,程序有主干与分支两部分连接组成,分支分为1、2、3、4功能部分。主干部分判断是否有键盘按下,没有按下,将进入“1”部分支。如有将根据键名分别将flag赋值2或3,程序将在下一循环中进入分支功能“2”部分进行校时,或“3”部分设置用户报时时刻。2、3部分完毕后,最后将flag赋值1,在下一循环将返回“1”部分。在“1”部分,编写时刻读取并显示功能程序,并判断当前时刻有无与设置的时刻匹配,如无匹配,程序继续在此分支部分循环,如有匹配,将flag赋值4,下一循环将进入报时分支“4”部分。在“4”部分,调用报时函数实现在每天不同时段用不同音乐报时。报时完毕将flag赋值1,下一循环将返回“1”部分。

在各功能函数编写时,进行了一些技巧性的处理,觉得似乎是有效合理的,做些介绍。

在程序调用DS1302读取函数将当前实时的分,时读入全局变量Minute,hour后,为了编程时便于比较时刻,笔者将时,分换算为分。即当前时刻换算为从零时起的分钟数,存于变量dqsk中,即:

对应的,初始化时,从EEPROM读出的80字节用户报时时刻数据(小时在前,分钟在后,共40次80字节)也换算成40个从零时起的分钟数存于数组bsskzs_minute[40],这样便于搜寻是否有与当前时刻匹配的报时时刻。程序变得简单,搜寻程序段为:

Dqsked为int型变量,用于存储当前时刻,只为防止当乐曲长度时间不足1分钟时,也只播放一次乐曲。否侧播放一次后,返回再查表,还在同一分钟内,又匹配,又再次播放。设此变量,在同一分钟内,就不会查表两次。

3.报时功能函数

其中a为char型指针变量。

播放函数需与定时器1中断函数配合,才能播放奏乐。中断函数为:

4.在每天不同时段用不同乐曲报时的函数

播放《我爱北京天安门》乐曲一次。如前所述,Wabjtam为《我爱北京天安门》数组名,代表数组首地址,调用时数组首地址传给形参指针变量yysz,在播放时就可以通过yysz引用数组元素了。这样一个播放函数调用时传给不同的乐曲地址就可播放不同乐曲了。其余情况类同。

装配调试

如图5装配照片,找一旧的卫视接收机壳装配。利用其电源开关,6个外键及显示窗。将主板、显示板,按键板焊好后,用排线连接。固定在机壳内。选一个9~12V,3W变压器做电源,固定在机壳内。

监听喇叭选2.5寸收音机喇叭,粘接在底壳上。上壳开孔,选一交流220V墙座固定在上壳上,作为功放受控电源插座。音频输出利用莲花座从原壳后预留孔伸出。

装配好硬件后,将程序编译并通过串口烧写器烧录,就可以通电试验了。首次使用,需要通过键盘校时及设置每日40次报时时刻,报时时刻初始值全0,如用不了报时40次,可保留部分0值,如前程序所示,每日零时不报时。键盘校时设置使用方法由设置程序确定,可从《电子制作》网站www.ele169.com下载。

调试时先听报时的时候内部扬声器监听效果,演奏快慢可通过调试16分之1拍延时函数参数改变。以习惯为准。然后可将音频输出与功放机的音频输入连接,功放机电源插接报时器机壳上受控电源,要打开功放机电源开关待机,在报时时刻发生时,受控电源将会自动给功放机供电,可测试放大后音响效果及电源受控情况。

面板功能键

单片机唱歌报时器面板布局见图6。

电源开关——开关电源

1.进入校时状态键;

2.进入用户报时时刻设置状态键;

3.时、分选择键减键或用户报时时刻序号减键,还有退出校时或用户设置功能;

4.时、分选择键加键或用户报时时刻序号加键,还有退出校时状态或用户设置状态功能;

5.校时时时刻减键或在设置用户报时时刻时,时刻减键;

6.校时时时刻加键或在设置用户报时时刻时,时刻加键。

基于单片机定时开关的设计 篇6

现如今,往往由于某些特殊原因可能会给我们的生活或工作带来一些困挠和遗憾。比如:许多球迷或新闻爱好者因错过了开电视机的时间因而与精彩球赛或新闻擦肩而过;农民可能由于工作繁忙而忘记给自家水塔抽水,造成生活一时不便;学校的起床广播因值班人员睡过头而推迟播放等等。

针对以上情况,本文提出以单片机为控制核心加上固态继电器组成定时开关的设计思想,并且详细阐述了定时开关的设计过程,有效地解决了上述一些实际问题。

1 整体方案设计

基于单片机定时开关的系统构成框图如图一所示:

本系统采用单片机AT89C51做为本设计的核心控制器件,整个系统由显示器、报警器、定时时间设置按键、继电器、受控电器插座及受控电器几部分组成。各部分功能如下:显示器用于显示实时时间以及定时开关的定时时间;报警器用于定时报警,即当定时时间到时便发出10秒报警声,用以提示用户;而定时时间设置按键顾名思义是用来设置定时开关的定时时间;继电器、受控电器插座及受控电器组成一个执行机构,当定时时间到时,单片机向继电器输出一个高电平使继电器工作,继电器常开触点闭合接通受控电器插座,使受控电器通电加以工作,从而完成定时开关电器的功能。

2 硬件系统设计

定时开关的硬件电路如图二所示。采用单片机直接驱动共阳数码管,数码管采用动态显示,数码管的7个笔画直接接单片机的P0.0~P0.7,数码管显示供电由单片机的P2.0、P2.1、P2.2和P2.3所接三极管9012控制,通过三极管推动电路,使四个数码管循环得电,在数码管供电的同时7位笔画数据驱动脚给予不同数字的驱动,便显示出不同的数字。根据人眼的视觉暂留的特点,故所观察到时间数字是稳定的数字。定时时间设置由键盘控制,分别由K1、K2、K3、K4四个按键组成。电路上电后,D1秒显示开始闪烁,此时是从00:00开始计时的。我们可以按动K4,进入校时状态后,按K3校正时钟,按K2校正分钟,按K1退出校时状态。若要设置定时时间,按K2校正定时分钟,按K3校正时钟,按K1退出校时状态。需要关闭定时功能请按K1,听到鸣响一声为关闭,鸣响三声为开启。查询定时时间按K3。

从图二中可以看到,用P0口和P2口就可以实现四个数码管的显示控制。其中,P2口中的P2.0、P2.1、P2.2、P2.3用作位控制,即控制哪个(位)数码管显示。对于图二中标出的共阳极数码管,当位控制码某位为低电平时,三极管9012导通,便控制相应数码管可以显示数据。但具体显示什么数据,则由另一个端口P0口即段控制端口决定。因此当P0口送出一个显示代码时,各数码管阴极都收到了此代码,但只有位控制码中为低电平的位对应的数码管才得到导通而显示数字,其它数码管并不发光。

由上述可知,只要CPU通过段控制端口送出段显示代码,然后通过位控制端口送出位显示代码,指定的数码管便显示相应的数字。如果CPU顺序地输出段码和位码,依次让每个数码管显示数字,并不断地重复显示,利用眼睛的视觉惯性,当重复频率达到一定程度,从四个数码管上便可以看到相当稳定的数字显示。

本设计中采用了单相固体继电器,如果要使用定时开关控制电视机定时收看17:00的新闻联播时,控制过程如下:当定时时间没到时,P3.5输出高电平,使三极管Q6截止,继电器的输入电流为零,继电器不工作;定时时间指向17:00时,P3.5输出低电平,使三极管Q6导通,继电器的输入电流大至继电器工作,向电视机插座供电,从而开启电视收看17:00的新闻联播。

此款定时开关还具有报警功能:当开关定时时间没到时,P3.4输出高电平,三极管Q5截止,蜂鸣器不工作;当定时时间到时,P3.4输出低电平,三极管Q5导通,蜂鸣器有电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声,提醒定时时间到。

3 软件系统

软件程序流程如图三所示。序初始化后,设置定时器T0工作在方式1用于定时,同时设置开关定时时间,调用显示子程序。当定时启动后,系统不断查询定时时间到否。定时时间到时,P3,5=0,继电器闭合,受控电器工作,同时P3.4=0,蜂鸣器报警;定时时间没到时则查询功能按键,视按键按下情况执行相应功能。

4 结束语

针对家庭小电器、农家抽水系统、校园广播系统的定时开关经过实验测试证明该系统定时准确,操作方便,能较好地满足用户要求。

参考文献

[1]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1990.

[2]蔡美琴,张为民,沈新群,张荣娟.MCS—51系列单片机系统及其应用[M].北京:高等教育出版社,1992.

[3]楼然苗,李光飞.51系列单片机设计实例[M].北京:北京航空航天大学出版社,2003.

单片机定时器应用 篇7

电路硬件部分如图1所示。

电源部分电路:AC220V交流市电从电路图1中左下端的三孔插头输入到本定时插座中,其中“火线”L分为两路分别加在控制电压输出继电器J1的定触点 (4) 端和电源变压器T1的初级绕组的保险丝管上,“零线”N端加在输出插座JP1的N端和电源变压器T1的另一端,“接地线”E端则与输出插座的接地端E相连,输出插座JP1的“火线端”L则受控于继电器J1的动触点 (1) 端。由T1电源变压器将AC220V交流市电变换为AC12V电压后加在由D2~D5组成的桥式整流电路的两个桥臂端,再经C1滤波、MC7805稳压、C3、C2高、低频滤波后得到稳定的DC5V直流电压作为整机的工作电源。

本电源定时插座的主控MCU芯片为PIC16F627单片机。PIC16F系列单片机优点之一是:端口驱动电流大,每个端口的拉电流或者灌电流均大于20mA,这样用它的端口驱动能力就可以直接驱动LED数码管了,无需在加驱动三极管,使得该插座的硬件电路设计变得十分简洁。

PIC16F627单片机端口的设置:

单片机的RA有6个I/O端口,用RA<5:0>表示。本应用中RA0-RA2设置为输出端口;其中RA0、RA1端口分别用于两个数码管的“个位”和“十位”的“位码”驱动,RA2用于控制三极管Q3的b极工作,连带控制继电器J1触点的闭合与否,进而,控制了定时插座JP1的AC220V输出电压的有无。RA3端口设置为输入/输出分时二重复用工作状态: (1) 作输入端口时:用作定时插座的“个位定时时间预置调整键”; (2) 作输出端口时:用于驱动LED1发光二极管做为本定时插座的工作指示灯。在定时插座没有进入定时输出供电的情况下,RA3作为输入端口,保持了用于设置定时器的个位数码预置数的设置功能;在插座工作输出电压的情况下,RA3转换为输出端口,用于驱动LED1作为插座的工作指示灯。RA4端口设置为输入端口,用于定时时间的十位数值预置调整键。RA5端口为输入端口,与之相接的按钮开关S1为“启动/报警解除按键”。

RB端口的设置:电路中PIC16F627的RB端口设置为输出端口。其中RB0-RB6端口分别用于LED数码管的“a-g”7个“段码”的驱动,因这里选用的是LG5621BH(红色)共阳极LED数码管,故而,只有当RB0-RB6端口输出“低电平”时,LED数码管所对应的“a-g”码段才能被点亮。RB7端口用于驱动有源蜂鸣器,在RB7端口输出高电平时,该高电平电压通过1k电阻R9加至三极管Q4的b极上,Q4导通,蜂鸣器鸣响报警。

电源定时插座功能:定时插座初始上电时,两位数码管显示值为:“99”,并处于停止走时的待机状态,其输出插孔JP1没有电压输出。要是此时按下个位定时时间数值预置调整键S3,则个位数码管从当前的显示值减小“1”个数,如,第一次按下S3并且释放按键后,个位数码管显示值由“9”变为“8”,再按一次S3,显示值变为“7”,……直至显示值变为“0”,再从“0”回到“9”往复循环显示。十位定时时间预置调整按键S2功能与S3相同,只不过每按动S2一次,并且释放后,十位数码管显示值减小“1”,同样,显示值也是从9→8→7→…→0→9往复循环显示。S1为启动/报警解除键。当第一次按动S1按钮时,定时插座进入工作状态:RA2端口输出高电平,此高电平经过1K限流电阻R8加在三极管Q3基极b上,Q3导通,继电器J1吸合,J1的 (1) 、 (4) 触点闭合,AC220V交流市电的“火线”L经继电器的定、动触点 (4) 、 (1) 加至本插座的输出JP1的L端口,从而JP1插孔输出AC220V交流电压,同时交流电压输出指示灯LED2被点亮,表示插座有AC220V电压输出。同时,定时时间以倒计时的方式开始计时、递减,定时时间为分钟,定时时长从数码管当前的显示值开始到显示00结束。在倒计时的时间范围内,LED1工作指示灯开始以2S的频率闪烁点亮、熄灭一次,并且每过一分钟,数码管的个位显示值递减“1”个数;每过10分钟,数码管的十位显示值减“1”,当数码管显示值为“00”时,再过60秒钟,输出插孔JP1断电,AC220V输出电压指示灯LED2同时熄灭;蜂鸣器开始报警鸣响。在蜂鸣器报警其间内,数码管始终显示“00”值不变、LED1工作指示灯停止闪烁,并且处于常亮状态。直至再次按下S1按键时蜂鸣器才能停止报警;数码管显示值跳回到上一次预置的定时时间的数值上,LED1熄灭。

在倒计器的定时时间范内,S1~S3按键功能均被屏蔽、失效,不能使能。

程序设计要点:程序设计包括PIC16F627初始化程序,主程序,1分钟定时中断子程序,蜂鸣器提示音子程序,查数码表子程序等组成。

本程序设计中,LED1闪烁点亮速度设置不宜太快或太慢,LED1闪烁点亮速度太快,会使人看了后心理产生太“忙碌”,感受心慌,闪烁的太慢又会使人疑惑定时插座是否在走动、工作,以每2S钟的频率点亮、熄灭一次为妥。另外电路中增加了LED2作为AC220V输出电源指示灯,当定时插座工作时,LED2点亮,表示JP1插孔有AC220V电压输出;LED2熄灭则表示电源JP1插孔无AC220V电压输出,以示确认插孔有否AC电压输出。

程序设计流程模块,主程序框图如图2所示。

1分钟定时中断子程序流程图如图3所示。数码管显示子程序流程图如4所示。

程序设计要点:1)本定时器使用了PIC16F627的一个定时器模块TMI0,并用TMI0做了50mS定时中断,再用寄存器“递减、判零”语句:“DECFSZ F”判断20×60次中断到了与否来确定显示1分钟时间的界限,1分钟未到,继续显示当前的数码值,1分钟到了,从当前显示的数码值减“1”后在显示1分钟……,这样:每过1分钟数码管个位显示值就减“1”,每过10分钟,十位数码管显示值就减“1”,直到两位数码管的显示值减到“00”为止。2)定时器如何区分:预置显示程序和定时工作显示程序。在此程序设计中是用了一个寄存器的标志位加以区分的,标志位为“0”,执行预置显示程序;标志位为“1”,执行定时器工做程序。3)按键的防抖动问题,机械按键在按下和抬起的瞬间均存在着多次接通与断开的情况,加之单片机执行程序的速度非常之快,即在瞬间(1μS时间内)即可检测到开关的闭合与断开的状态,故而,必须要做好S1-S3按键开关的防抖问题,防抖使用软件来解决,具体方法是在按键按下和抬起的过程中均加有延时程序,一般延时时间取10m S左右为宜,这样即解决了按键的防抖问题,又不至于让人感觉按键反映的速度太慢。4)调用显示查表程序,用查表法作数码管的数码值显示是程序设计中惯用的手段之一,它可使软、硬件设计变得更加的简洁、易懂。但本定时器设计中把数码管的小数点位用作了“工作指示灯”,又由于数码管采用的是“动态扫描”的方法点亮工作的,查表码会发生了变化。以下列出了本项目此共阳极数码所用的查表程序的码表见表1。

如将码表的值“颠倒”书写:RETLW 0X40写在最前面;RETLW 0X10写在最后面,则本定时插座就变成了“正”定时插座了。

程序在总体设计上是以模块化为主,这样读起来思路较易清晰,流程更加明确。

元器件选择:电路中电源变压器T1要选用功率大于3W、次级输出电压为AC12V~AC15V的变压器,这样才能保证在继电器工作时不至于使T1次级输出的DC电压降的太低而影响单片机的正常工作。LS1选择5V有源蜂鸣器。J1也可以选择其它型号的产品,J1线圈工作电压高,其工作电流就小,对电路电压降低值影响就小,J1触点电流应选择大于10A为宜,避免该定时插座在带动大的交流负载时触点被烧蚀的可能性。数码管选用2位一体化的共阳极数码管。晶振选用4MHz的。

安装、制作、调试时要注意:由于电路中有AC220V电压接入,建议定时插座在调试阶段暂时不接插座JP1的AC220V电压,以策人身安全。待程序调试通过后在将AC220V电压接通,保证整机的调试阶段是在安全电压下进行的。电路中元件没有特殊要求,保证安装、焊接的正确性就可以了,PIC16F627芯片要装在IC插座中,以便于随时取下重新烧写程序。

程序烧写:文章附带的(.hex)文件读者可直接用来将其烧录到PIC16F627芯片中。烧写程序中一定要注意编程器的“配置位”设置,它在PIC单片机中起到举足轻重的作用,万万不可忽视。

性能分析:

本定时插座1小时产生的时间误差约8S,这个定时插座定时精准度不高是数码管“动态显示”和TMI0中断相互影响,TMI0溢出时要等程序做完才发生中断,就会有延迟误差,对于我们日常生活中一般使用,其定时的精度也算是足够高的了。

基于单片机的精确定时流水灯设计 篇8

1 分析设计

本文利用的是AT89C51单片机, 带有2个定时/计数器, T0和T1。有四种工作方式。

方式0:13位定时/计数方式;方式1:16位定时/计数方式;方式2:8位自动重装初值定时/计数方式;方式3:T0分为两个独立的8位定时/计数器, T1停止工作。本文采用定时方式, 产生0.05S的时间基准。可选择T0定时/计数器, 使其工作在方式1。计数初值确定按公式 计算[1]。fosc为单片机晶振频率, 为12MHZ。t为定时时间, 本设计中为0.05s。代入计算可得a=0x3CB0。这样设定后, T0每隔0.05s会溢出一次, 计算T0的溢出次数, 就可以实现精确定时。本设计拟采用每隔1s对流水灯进行一次控制, 即溢出20次对流水灯发出一次控制信号。只要改变控制信号, 就可以实现对流水灯的准确定时控制。

2 详细设计

2.1 硬件电路设计

元件清单:AT89C51单片机、LED灯7个。

本设计利用Protues软件进行硬件电路的仿真设计。单片机采用AT89C51, 利用单片机内部晶振, 可以通过软件设定单片机的晶振频率为12MHZ以满足设计要求。流水灯采用LED灯。单片机的P1口为准双向口, 可以直接驱动LED灯。

2.2 软件设计

软件设计采用C51程序编写。使流水灯工作方式为:第一秒钟L1, L3亮, 第二秒钟L2, L4亮, 第三秒钟L5, L7亮, 第四秒钟L6, L8亮, 第五秒钟L1, L3, L5, L7亮, 第六秒钟L2, L4, L6, L8亮, 第七秒钟八个LED灯全亮, 第八秒钟全灭, 以后又从头开始, L1, L3亮, 然后L2, L4亮……一直循环下去。

源程序清单如下:

inta=20, b=8;//a为计数变量, b为工作状态变量

{TH1=0X3C;//设定定时器1工作方式, 方式1

IE=0X88;//开中断

time1 () interrupt3using1//中断函数

a--;

3 功能调试

将源程序在Keiluvision4中生成可执行文件。在Protues中将可执行文件加载到单片机中, 点击运行, 观察LED灯的亮灭。可以看到每隔1SLED灯变换一种状态, 且与软件设定的功能一致。

4 结束语

本文利用单片机自带的定时器实现了精确定时, 并对流水灯实现了控制。对工业控制领域中的实时性问题作出了探索。

摘要:利用单片机定时器的定时功能, 设计了一种可以实现精确定时的流水灯。并利用Protues实现了仿真。

关键词:定时器,流水灯,单片机

参考文献

单片机定时器应用 篇9

目前,学校、企事业单位、电视台及商业机构等为选拔人才和评选优胜而进行的竞赛活动越来越多,能为各种智力和知识竞赛活动提供快速客观公正的裁决的形式多样的抢答器,逐渐成为一种商业性电子产品。现在小规模的知识竞赛越来越多,操作简单和经济实用的小型抢答器更是大有市场。现有的抢答器虽有多种设计方案并各具特色,但存在两点主要不足:其一,显示系统和抢答按键之间距离较远,连线多,结构复杂,安装不便;其二,当抢答路数增多时电路修改困难,可扩展性差。

笔者针对上述情况和实际需要,采用单片机控制和红外遥控技术,设计与制作成一种具有电路简单、反应直观且速度快和连线及扩展方便等特点的多路定时抢答器,具有抢答自锁、暂停复位、数码显示、抢答定时、电子音乐提示和自动定时等功能。

2 硬件电路设计

2.1 硬件电路组成

基于单片机的多路红外遥控定时抢答器的硬件组成如图1所示,主要由单片机系统、红外遥控抢答电路、抢答结果和定时显示电路、音乐响铃电路和电源电路组成,其控制核心是单片机AT89S52。单片机系统是由AT89S52、复位电路和时钟电路组成最小系统,红外遥控抢答电路包括红外发射电路和红外接收电路,电源电路将为其它电路分别提供3V、5V和9V电源。工作原理是:若抢答按键矩阵中按键有抢答动作输入,经红外发射电路编码后发出遥控信号,由红外接收电路将之译码输出,AT89S52对抢答信号进行裁决判断出最先按键者,之后立即显示将先抢答的组号以数字形式显示出来,同时触发音乐响铃提示有键按下。另外,要封锁对其它按键的继续响应;答题开始计时并显示,定时时间到,音乐响铃提示答题时间已到,停止答题。只需简单复位操作即可进入下一轮抢答。

AT89S52单片机是Atmel公司新近推出的高档、增强型产品。它是一个低功耗、高性能CMOS 8位微控制器,器件采用Atmel公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,在单芯片上,拥有灵巧的8位CPU和在系统可编程FLASH,使得AT89S52为众多嵌入式控制应用系统提供高灵活、高性价比的解决方案[1]。选用AT89S52作为控制器,不必外接ROM存贮器,可提高系统可靠性、灵活性,降低成本。

2.2 红外遥控抢答电路设计

2.2.1 红外发射电路

红外遥控抢答电路包括红外发射电路和红外接收电路。红外发射电路由十六组编码键盘矩阵、DTMF编码电路S2559和红外发射管等组成,如图2所示。DTMF编码电路S2559已广泛应用于家电和工业自动化遥控中,它采用由双音(高音组和低音组)多频(高、低单组各四种频率)的八个频率中,从高低音组中各取一个音频信号复合成DTMF编码。抢答按钮接成键盘矩阵结构(本系统最多可设计成16路抢答,实际使用可根据需要选定路数),每按下其中一个按钮便对应选中某一行和某一列,对应S2559确定了哪两种音调组合,形成脉冲编码信号直接驱动红外发射管发出红外遥控信号。不同的按钮其对应的脉冲编码信号不同,按钮动作转换成为红外遥控信号发出[2]。

2.2.2 红外接收电路

红外接收电路由红外接收管、前置放大器、DTMP译码电路MT8870BE和四—十六线译码器等组成,如图3所示。红外接收管TLP04将接收到的DTMF红外遥控脉冲信号,经前置放大器的光—电转换和电压放大。放大后的电脉冲信号输入DTMP译码电路MT8870BE进行译码,由译码电路输出的是8421码;再由四—十六线译码器将此二进制码变为按顺序输出的十六位输出[2,3],分别对应16个抢答按钮,只有按下的键对应的输出端输出高电平,其它为低电平。此十六位输出通过I/O口(P0和P1)传送给单片机,由其对电平状态进行识别,从而对最先抢答者做出裁决。

2.3 控制及输出电路设计

控制及输出电路包括抢答结果和定时显示电路、音乐响铃电路等,如图4所示,系统采用单片机AT89S52作为控制器,当有键按下时通过外部中断0向AT89S52申请中断。单片机响应中断后,对P0和P1口十六位输入进行扫描,裁定出电平状态变化者即最先抢答者,由P3.4~P3.7口输出显示抢答编号,同时由P3.0触发音乐芯片KD-153H工作驱动扬声器进行提示已有人抢答。另外要封锁对其它按键的继续响应,复位后才进入下一轮抢答。当开始作答时,P2口输出显示计时,定时时间到,由P3.0触发KD-153H工作提示答题时间已到。

抢答结果和定时显示电路:显示采用共阴极七段数码管LN4010BX,其显示屏幕大,亮度高。系统采用了显示硬件译码的方式,选择BCD码译码及驱动芯片7448,既可完成BCD译码任务,又实现驱动放大的功能。当需要显示最先按答组号时,由AT89S52经P3.4~P3.7送出组号对应的BCD码值,由7448进行译码和驱动,送给LN4010BX用于显示抢答结果。同时,开始答题时,由AT89S52经P2送出定时时间对应的BCD码值,由7448进行译码和驱动,送给二位LN4010BX用于时间定时显示[4]。

音乐响铃提示电路:采用“叮咚”音乐集成电路KD-156H,音乐IC并不是一直工作的。在抢答准备好时,当有键按下时,才由AT89S52从P3.0引脚输出一个触发信号给它,产生抢答声音提示;当答题定时到时,又从P3.0引脚输出一个触发信号给它发出声音提示停止答题。

2.4 电源电路设计

电源电路设计为一个多电压输出自动充电电路,如图5所示。市电(AC220V)经过整流、滤波后,经三端稳压器MC7809CT稳压获得+9V直流电提供给抢答结果和定时显示与驱动电路;+9V直流电再经MC7805CT降压输出+5V电源,为AT89S52系统提供能量;+5V电源经3V稳压管IN4728A稳压输出得到+3V电源,供给音乐响铃电路工作。另外,电路中设有9V可充电蓄电池,在正常情况由市电(AC220V)提供系统工作电源时,蓄电池处于充电状态;当断电时,蓄电池将自动向本系统供电[5]。

3 软件设计

软件设计的基本任务是实现对多路抢答按键的动作进行监测,并且要对多个抢答动作进行仲裁,按抢答的时间先后顺序决定最先按键者,并且对抢答时间进行限制。系统的主程序流程图如图6所示,抢答处理中断子程序流程图如图7所示。

上电后单片机AT89S52启动主程序,先通过初始化I/O接口电路关闭显示和音乐,之后设置中断系统启动外部中断0。然后监视中断输入,若无键按下则等待;若有键按下,则响应抢答处理中断进行中断处理,转去执行中断服务子程序。

抢答处理中断子程序负责对抢答信号的处理:首先禁止中断,这样封锁了对后来按下的其他按钮的响应;接着扫描P0和P1口找出最先抢答者的序号且显示序号和启动音乐提示;之后开始答题时间计时,规定时间一到,音乐提示答题结束,在此过程中封锁对后来按下的其它按钮的响应。由于在子程序中关闭中断后没有再重新开启,因此单片机对后来的按键动作的中断请求不会响应,而达到封锁对后来按下的按钮的目的,只能通过复位操作重新运行主程序进入下一轮抢答。

4 结束语

在本抢答器的设计中,运用了红外遥控技术大大简化了连线;充分利用单片机的内部资源(硬件和软件),极大地简化了硬件电路设计,同时扩展抢答路数十分方便。如将单片机裁决的结果通过串口传送到个人计算机,则很容易实现大屏幕更为直观的显示以及计分功能。

本抢答器已在本校多类知识竞赛活动中进行了实际使用,结果表明其可实现定时抢答功能,反应准确、直观且响应速度快,性能可靠。

参考文献

[1]孙育才.ATMEL新型AT89S52系列单片机及其应用[M].北京:清华大学出版社,2005.

[2]肖景和.实用遥控电路[M].北京:人民邮电出版社,2000.

[3]王俊峰,薛鸿德.现代遥控技术及应用[M].北京:人民邮电出版社,2005.

[4]卢飞跃.常用电子玩具电路实例精选[M].北京:化学工业出版社,2007.

上一篇:初中数学总复习教学下一篇:设备功耗