有时候带手机不方便,可以又想知道时间,这时候可以用蜂鸣器做一个音频的时间提醒器,每60秒发一声提醒
提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时)
代码如下
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
#define time_set0 5000//设置定时器0的计时长度
#define th0 (65536-time_set0)/256//计算定时器高8位装入值
#define tl0 (65536-time_set0)%256 //计算定时器低8位装入值
#define time_set1 256-200//设置定时器1的计时长度
sbit P1_1=P1^1;//系统运行指示灯管脚
sbit beep=P1^7;//蜂鸣器管脚
uint cnt=0;//计数器
uint cnt2=0;//计数器
uint cnt3=0;//计数器
void delay(uint i)//延时函数
{
uchar k;
for(;i>0;i--)
for(k=0;k<200;k++);
}
timer0()interrupt 1 using 1//定时器0设置
{
cnt++;//每次中断增加一
if(cnt>100)//计数时间5ms*100=500ms
{
cnt=0;
}
TH0=th0;//重装定时器
TL0=tl0;
}
timer1()interrupt 3 using 2//定时器1设置
{
cnt2++;
if(cnt2>=5000)//计数时间0.2ms*5000=1s
{
cnt2=0;
cnt3++;//秒计数器增加一
P1_1=!P1_1;//指示灯每秒翻转一次
}
}
void main()
{
TMOD=0x21;//设置定时器1方式2(高4位0010,自动重装TH->TL,计满255),定时器0方式1(低4位0001,16位定时器,可计满65535)
TH0=th0;//装载定时器初始值
TL0=tl0;
TH1=time_set1;
TL1=time_set1;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;//开定时器1中断
TR0=1;//打开定时器0
TR1=1;//打开定时器1
while(1)
{
if(cnt3>=60)//计时60秒
{
cnt3=0;//计时清零
beep=0;//打开蜂鸣器
delay(100);//延时100
beep=1;//关闭蜂鸣器
}
}
}
关键字:C51 单片机 定时器 基本设置
引用地址:
C51单片机定时器T0,T1的常用基本设置
推荐阅读最新更新时间:2024-03-16 16:10
PIC单片机以及51和AVR单片机的IO口操作方法解析
对于pic单片机的学习,很多朋友总是能充满激情,不断利用闲余时间研究pic单片机的各类技术。而谈及pic单片机,必须牵扯至51、AVR单片机。因此本文中,将探讨pic单片机以及51、AVR单片机对于IO口的操作。对于本文,希望大家认真研读,以在pic单片机的学习之路上更为精进。 一.51单片机IO口的操作 51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。 #i nclude sbit bv=P2^0;//定义位变量
[单片机]
MSP430单片机控制IO口操作-LED灯闪烁
//******************************************************************************* // D13x Demo - 在上一节基础上改变系统时钟,观察LED灯的闪烁频率 // // 描述:通过改变系统时钟,来改变闪烁频率;通过 P1 异或 来取反 P1.5;软件循环延时 // ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k // // MSP430F13x // ----------------- // /|\| XIN|- // | | | // --|RST XOUT|- // | | // | P1.5|-- L
[单片机]
IC解密之单片机算术运算指令
单片机算术运算指令汇总,不带进位位的单片机加法指令 ADD A,#DATA ;例:ADD A,#10H ADD A,direct ;例:ADD A,10H ADD A,Rn ;例:ADD A,R7 ADD A,@Ri ;例:ADD A,@R0 用途:将A中的值与其后面的值相加,最终结果否是回到A中。 例:MOV A,#30H ADD A,#10H 则执行完本条指令后,A中的值为40H。 下面的题目自行练习 MOV 34H,#10H MOV R0,#13H MOV A,34H ADD A,R0 MOV R1,#34H ADD A,@R1
[单片机]
基于亏单片机的水塔水位检测控制系统仿真设计
l 引言 水塔供水的主要问题是塔内水位应始终保持在一定范围,避免“空塔”、“溢塔”现象发生。目前,控制水塔水位方法较多,其中较为常用的是由单片机控制实现自动运行,使水塔内水位保持恒定,以保证连续正常地供水。实际供水过程中要确保水位在允许的范围内浮动,应采用电压控制水位。首先通过实时检测电压,测量水位变化,从而控制电动机,保证水位正常。因此,这里给出以Atmel公司的AT89C5l单片机为核心器件的水塔水位检测控制系统仿真设计,实现水位的检测控制、电机故障检测、处理和报警等功能,并在Pmteus软件环境下实际仿真。实验结果表明,该系统具有良好的检测控制功能,可移植性和扩展性强。 2 水塔水位控制原理 单片机水塔水位控制原理如
[测试测量]
PIC单片机asm与C混合编程
一、如何从汇编转向PICC 首先要求你要有C 语言的基础。C代码的头文件一定要有#include,它是很多头文件的集合,C 编译器在pic.h 中根据你的芯片自动载入相应的其它头文件。这点比汇编好用。载入的头文件中其实是声明芯片的寄存器和一些函数。顺便摘抄一个片段: static volatile unsigned char TMR0 @ 0x01; static volatile unsigned char PCL @ 0x02; static volatile unsigned char STATUS @ 0x03; 可以看出和汇编的头文件中定义寄存器是差不多的。如下: TMR0 EQU 0X01; PCL EQU 0X02;
[单片机]
【话说定时器系列】之六:STM32定时器输入捕获话题
STM32定时器 是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍。去年,电堂推出了 《STM32 TIMER基础及常规应用介绍》 ,为大家梳理了 STM32 TIMER 的庞大内容,涵盖 TIMER 的基本应用原理、常规应用等。现在将课程内容整理为文章,针对STM32定时器有基本了解的用户,分享具体的应用实现环节及常见问题解决。 STM32定时器除了基本计数定时功能外,还对外拓展了输入、输出通道,从而实现输入捕捉、比较输出功能。 输入捕获【Input Capture】基本原理 : 定时器针对外部输入信号或内部触发信号实行边沿捕捉;产生捕捉事件,并可以触发中断或DMA请求,同时记录捕捉时刻计数器的值。基
[单片机]
51单片机-数码管小数点
1.显示小数点 我们可能忽略了数码管上还有一段发光二极管,这个在它的右下角,平时我们点亮这个小点是用来表示数字的小数点。要想让这个小数点即使显示的数字一直变但它还是保持常亮状态有什么办法吗。 我们不可能为每一个数字再弄一个带小数点的真值表数组,这样太麻烦了,熟悉C语言知识的话,我们用另一种方法。 大家要明白这个知识点:(0x7F)&(0xC0)=0x40 用二进制表示 0111 1111 & 1100 0000 = 0100 0000 01000000(0x40)就是使数码管显示0的同时还显示小数点了 所以不管是0xC0还是要显示其他数字,我们只要“0x7F & LedBuff ”就能保持住
[单片机]
低功耗射频IC卡读写器设计
本文介绍一款便携式巡更机(射频读写器)的设计。该读写器主要由MCU、射频IC卡读写模块、天线及USB通信接口等部分组成。为了方便对巡更情况的实时记录,系统采用了具有时间基准功能的时钟芯片。 随着近年来智能小区、智能大厦的迅猛发展,巡更系统将有着广泛的应用前景。手持式读写器的主要开发指标包括微型化、低功耗、便携式及方便的数据传输接口。 读写器总体设计方案 便携式IC卡读写器主要由电池供电。由于读写器不断发射无线电波,功耗较大,所以必须从每一个细节来考虑如何降低功耗,从而尽可能地延长电池的使用时间。硬件上采用低功耗设计,如低功耗器件、低压、模块化供电等;软件上采用规模化设计,尽量减少处理器的工作时间,使其处于低功耗运行模式。
[网络通信]