精华内容
下载资源
问答
  • 51 单片机 定时器 倒计时 电子钟 闹钟 c语言
  • 51单片机定时器做300s倒计时器,适用于初学者
  • 基于51单片机倒计时器设计2015-07-22 10:53:04来源:51heivoid Displaypro(void){StrTab[0]=tab[hour/10]; //存储小时StrTab[1]=tab[hour%10];StrTab[2]=0x40; //存储"-"StrTab[3]=tab[minute/10];...

    基于51单片机的倒计时器设计

    2015-07-22 10:53:04   来源:51hei

    void Displaypro(void)

    {

    StrTab[0]=tab[hour/10];             //存储小时

    StrTab[1]=tab[hour%10];

    StrTab[2]=0x40;                    //存储"-"

    StrTab[3]=tab[minute/10];                 //存储分钟

    StrTab[4]=tab[minute%10];

    StrTab[5]=0x40;                           //存储"-"

    StrTab[6]=tab[second/10];                 //存储秒

    StrTab[7]=tab[second%10];

    }

    void Print_play_pro(void)                 //动态扫描数码管

    {

    D0=1; D1=1; D2=1;               //显示秒

    P0=StrTab[7];

    delay(3);

    D0=0;D1=1; D2=1;

    P0=StrTab[6];

    delay(3);

    D0=1;D1=0; D2=1;               //显示"-"

    P0=StrTab[5];

    delay(3);

    D0=0;D1=0;D2=1;                    //显示分

    P0=StrTab[4];

    delay(3);

    D0=1;D1=1;D2=0;

    P0=StrTab[3];

    delay(3);

    D0=0;D1=1;D2=0;                    //显示"-"

    P0=StrTab[2];

    delay(3);

    D0=1;D1=0;D2=0;                    //显示小时

    P0=StrTab[1];

    delay(3);

    D0=0;D1=0;D2=0;

    P0=StrTab[0];

    delay(3);

    }

    /*****************************定时器1中断*********************************/

    void time1_isr(void) interrupt 3           //定时器1用来处理蜂鸣器

    {

    static uint count = 1;          //位置待定

    TH1=0xd8;               //重入初值定时20ms

    TL1=0xf0;

    //Print_play_pro();       //抖动效果

    count++;

    D3=0;          //产生闹钟方波

    if(200==count)

    {

    TR0=1;

    TR1=0;

    count=1;

    D3=1;

    }

    }

    /***************************定时器0中断**********************************/

    void tim(void) interrupt 1       //定时器0用来处理倒计时

    {

    static uchar count;            //定义内部局部变量

    TH0=0xd8;               //重新赋值

    TL0=0xf0;

    count++;

    switch (count)

    {

    case 80:Displaypro();break;     //隔一定时间调用显示处理

    default:break;

    }

    if (count==100)

    {

    clock_judge_pro();    //定时时间判断

    count=0;

    if((0==minute)&&(second==0)) //倒计时值处理

    {

    if(0==hour)    { hour=0;    }

    else           { hour--;    }

    minute=60;

    }

    if(0==second)

    {

    if(0==minute)  { minute=59; }

    else           { minute-=1; }

    }

    if(0==second)      { second=60; }

    else               { second-=1; }

    if((0==hour)&&(0==minute)&&(0==second)) //倒计时到00:00:00,结束倒计时

    { hour=0; minute=0; second=0; Displaypro(); TR0=0; }

    }

    }

    c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] 610626052e95c7fbe3d254abc769d9ad.gif

    404-电子工程世界

    b094b28065371bab7e73d36d606aa669.png

    97c883c75098afdd39f665c518c59eec.png

    258b0bd82dd9ca476c7c8afdd48d607a.png

    北京市海淀区知春路23号集成电路设计园量子银座1305

    电话:(010)82350740

    邮编:100191

    电子工程世界版权所有

    京ICP证060456号

    Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved

    展开全文
  • 51单片机作为主控芯片,采用定时器计时循环点亮8个LED小灯,在Proteus 8.6 中建立仿真测试,内含程序源码(keil 5.26),Proteus仿真模型
  • 51单片机数码管实现9999到0的倒计时 #include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit ...

    51单片机定时器中断数码管实现9999到0的倒计时

    在这里插入图片描述
    在这里插入图片描述

    #include "reg51.h"			 //此文件中定义了单片机的一些特殊功能寄存器
    typedef unsigned int u16;	  //对数据类型进行声明定义
    typedef unsigned char u8;
    
    sbit LSA=P2^2;
    sbit LSB=P2^3;
    sbit LSC=P2^4;//设置38译码器的输入端
    u16 flag=9999,num=0;//设置数码管初值以及中断次数变量
    void DelayMS(u8 i);
    u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
    void Timer0Init(void)		//中断初始化
    {
    	TMOD =0x01;		//设置定时器模式
    	TL0 = 0x18;		//设置定时初值
    	TH0 = 0xFC;		//设置定时初值 1ms
    	TF0 = 0;		//清除TF0标志
    	ET0 = 1;      //定时/计数器T0中断允许开启
    	EA  = 1;       //开启总中断
    	TR0 = 1;		//定时器0开始计时
    }
    void   DIGdisplay()
    {
    	 u8 i;
    	 for (i=0;i<4;i++){
    	 	switch(i){
    	 	    case(0): LSA = 0 ;LSB = 0 ; LSC = 0 ;P0 = smgduan[flag%10]      ;DelayMS(1);  break;	//第一位数码管		
    			case(1): LSA = 1 ;LSB = 0 ; LSC = 0 ;P0 = smgduan[flag/10%10]   ;DelayMS(1);break; //第二位数码管
    			case(2): LSA = 0 ;LSB = 1 ; LSC = 0 ;P0 = smgduan[flag/100%10]  ; DelayMS(1);break; //第三位数码管
    			case(3): LSA = 1 ;LSB = 1 ; LSC = 0 ;P0 = smgduan[flag/1000]    ; DelayMS(1);break; // 第四位数码管  这里延时是为了提高数码管亮度
    		}															 
    		P0 =0X00;//消隐
    	 }
    }
     void time() interrupt 1//中断函数
    	{
    		TL0 = 0x18;		//设置定时初值
    	   TH0 = 0xFC;		//设置定时初值  1ms
    		num++;
    		if(num==20)        /20ms则跳数字
    		{
        		num=0;
        		flag--;
    		}
      }
    void main()
    {	 
    	Timer0Init();
    	P0 = 0x00;
    	while(1)
    	{	
    	  	DIGdisplay();
        }
    }
    void DelayMS(u8 i)
    {
    	//大约 1ms
    	u8 j=100;
    	while(i--)
    	{
    		while(j--);  
    	}
    }
    
    
    展开全文
  • 开篇说明:开发板平台是普中的A7开发板,实验代码及相关注意事项以及精度不精确原因在下面代码注释中有说明。... *实验现象:通过串转并及138译码器控制动态数码管秒表计时 *接 线:P0.0 -> RC, P0.1 -> ...

    开篇说明:开发板平台是普中的A7开发板,实验代码及相关注意事项以及精度不精确原因在下面代码注释中有说明。

    /*******************************************************************************
     *实验现象:通过串转并及138译码器控制动态数码管秒表计时
     *接    线:P0.0 -> RC, P0.1 -> SC, P0.2 -> SE; P1.0 -> A_138, P1.1 -> B_138,
     			P1.2 -> C_138; J27 -> J6;
     *注意事项:需要注意数码管数字显示前消影,数码管显示时不能用for循环来显示,因为
     *			for循环显示刷新太快了,而数码管显示最起码要保持1ms。所以在中断函数
     *          刷新显示数码管的时候用的是switch而不是for循环。
     *特别注意:做秒数定时实验的时候,使用了封装函数或者代码量太多后反而计时不准确,
     *          走时会变快,如果使用代码量小的测试代码计时基本正常,具体可以查看最下
     *          面的那段测试代码;
     ******************************************************************************/
    #include <reg52.h>
    
    #define DELAY_1_MS
    //#define DELAY_500_US
    
    #define BIT_16_LOAD		0X01
    #define AUTOLOAD		0X02
    #define ON				0x01
    #define OFF				0x00
    
    sbit RC = P0^0;
    sbit SC = P0^1;
    sbit SE = P0^2;
    
    sbit A_138 = P1^0;
    sbit B_138 = P1^1;
    sbit C_138 = P1^2;
    
    /* 数码管字模 */
    unsigned char code byte_buff[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6};
    /* 138译码器真值表 */
    unsigned char code ctl_138[] = {0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0};
    /* 用来保存时间计算得出的数字 */
    unsigned char tmp_buf[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    unsigned char pos = 1;		/* 记录需要显示多少个数码管 */
    unsigned long sec = 0;		/* 记录走了多少个秒数 */
    unsigned int cnt = 0;		/* 记录中断次数 */
    unsigned char x_pos = 1;	/* 记录当前显示第几个数码管 */
    
    void Timer0Init();
    void SetDelay();
    void SentByte(unsigned char byte);
    void SelectDisplay(unsigned char num);
    
    void main()
    {
    	unsigned char i;
    	
    	Timer0Init();
    	
    	while(1)
    	{
    		if(cnt >= 1000)			/* 计时为1s的时候做下面的运算 */
    		{
    			cnt = 0;
    			sec++;
    			
    			/* 用设置的ms计数计算tmp_buf[]的值 */
    			tmp_buf[0] = byte_buff[sec%10];
    			tmp_buf[1] = byte_buff[(sec/10)%10];
    			tmp_buf[2] = byte_buff[(sec/100)%10];
    			tmp_buf[3] = byte_buff[(sec/1000)%10];
    			tmp_buf[4] = byte_buff[(sec/10000)%10];
    			tmp_buf[5] = byte_buff[(sec/100000)%10];
    			tmp_buf[6] = byte_buff[(sec/1000000)%10];
    			tmp_buf[7] = byte_buff[(sec/10000000)%10];
    		
    			/* 计算有几个数码管需要显示 */
    			for(i=1; i<8; i++)
    			{
    				if(tmp_buf[8-i] != 0xFC) 
    				{
    					pos = 8 - i + 1;
    					break;		/* 如果不加break就会导致显示的数码管数量有时候是错误的 */
    				}
    			}
    		}				
    	}
    
    	return;
    } 
    
    /* 定时器中断初始化 */
    void Timer0Init()
    {
    	TMOD = BIT_16_LOAD;
    	SetDelay();
    	TR0 = ON;
    	
    	ET0 = ON;
    	EA = ON;	
    	
    	return;
    } 
    
    /* 设置延迟并计算秒数 */
    void InterruptTimer0() interrupt 1
    {	
    	SetDelay();
    	cnt++;	
    	SentByte(0x00);
    		
    	/* 让需要显示的数码管正确显示数字 */
    	if(x_pos > pos)
    	{
    		x_pos = 1;
    	}
    		
    	switch(x_pos)
    	{
    		case 1:
    			SelectDisplay(0); x_pos++; break;
    		case 2:
    			SelectDisplay(1); x_pos++; break;
    		case 3:
    			SelectDisplay(2); x_pos++; break;
    		case 4:
    			SelectDisplay(3); x_pos++; break;		
    		case 5:
    			SelectDisplay(4); x_pos++; break;		
    		case 6:
    			SelectDisplay(5); x_pos++; break;	
    		case 7:
    			SelectDisplay(6); x_pos++; break;
    		case 8:
    			SelectDisplay(7); x_pos++; break;
    		default:
    			break;		
    	}
    }
    
    /* 选择显示数码管并发送显示数据到数码管 */
    void SelectDisplay(unsigned char num)
    {
    	A_138 = (ctl_138[num] >> 0) & 0x1;
    	B_138 = (ctl_138[num] >> 1) & 0x1;
    	C_138 = (ctl_138[num] >> 2) & 0x1;
    	SentByte(tmp_buf[num]);
    }
    
    void SentByte(unsigned char byte)
    {
    	unsigned char i;
    	RC = 0;
    
    	for(i=0; i<8; i++)
    	{
    		SC = 0;
    		SE = (byte >> i) & 0x1;
    		SC = 1;
    	}
    
    	RC = 1;
    	
    	return;
    }
    
    /* 延迟设置 */
    #ifdef DELAY_1_MS
    void SetDelay()
    {
    	TH0 = 0xFC;
    	TL0 = 0x18;
    	
    	return;
    }
    #elif define DELAY_500_US
    void SetDelay()
    {
    	TH0 = 0xFE;
    	TL0 = 0x0C;
    	
    	return;
    }
    #endif
    
    /*********************************************************************** 
     * 测试51单片机定时器计时是否准确代码,只摘录了main函数和interrupt函数,
     * 其他的函数都是跟上面的一模一样.
     **********************************************************************/
    #if 0
    void main()
    {
    	Timer0Init();
    	
    	while(1)
    	{
    		if(cnt >= 1000)			/* 计时为1s的时候做下面的运算 */
    		{
    			cnt = 0;
    			sec++;
    			
    			/* 用设置的ms计数计算tmp_buf[]的值 */
    			tmp_buf[0] = byte_buff[sec%10];
    			
    			SentByte(0x00);
    			A_138 = (ctl_138[0] >> 0) & 0x1;
    			B_138 = (ctl_138[0] >> 1) & 0x1;
    			C_138 = (ctl_138[0] >> 2) & 0x1;
    			SentByte(tmp_buf[0]);		
    		}				
    	}
    
    	return;
    } 
    
    /* 设置延迟并计算秒数 */
    void InterruptTimer0() interrupt 1
    {	
    	TH0 = 0xFC;
    	TL0 = 0x18;
    	cnt++;	
    }
    #endif
    
    
    
    
    展开全文
  • 51单片机定时器计算工具,方便计算,自动生成C语言代码
  • 本文为大家介绍了51单片机定时器/计数器的结构和原理。
  • 51单片机定时器学习

    2021-02-11 18:14:04
    51单片机定时器前言:作者的话什么是定时器单片机的周期定时器的初始化 前言:作者的话 这是我第一次在CSDN上做文章,我可能写的不是很好,但是我会加油的。 什么是定时器 定时器Timer人类最早使用的定时工具是沙漏...

    前言:作者的话

    这是我第一次在CSDN上做文章,我可能写的不是很好,但是我会加油的。

    什么是定时器

    定时器Timer人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。
    定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多。人们甚至将定时器用在了军事方面,制成了定时炸弹,定时雷管。不少家用电器都安装了定时器来控制开关或工作时间。

    51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。
    定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。
    51单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。
    有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。
    CPU转而处理一些复杂的事情。同时可以实现精确定时作用。

    单片机的周期

    振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)
    状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。
    机器周期:1个机器周期含6个状态周期,12个振荡周期。
    指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

    例如:51单片机 内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频外接晶振为12MHz时,那么单片机内部的时钟频率就是12/12MHZ。

    51单片机(12Mhz 晶振)相关周期的具体值为:
    振荡周期=1/12us;
    状态周期=1/6us;
    机器周期=1/1M=1us;
    指令周期=1~4us;

    定时器的初始化

    下面我们在STC-ISP中的几个定时器的初始化程序:
    11.0692Mhz晶振:100微秒

    void Timer0Init(void) //100微秒@11.0592MHz
    {
    AUXR &= 0x7F; //定时器时钟12T模式
    TMOD &= 0xF0; //设置定时器模式
    TL0 = 0xA4; //设置定时初值
    TH0 = 0xFF; //设置定时初值
    TF0 = 0; //清除TF0标志
    TR0 = 1; //定时器0开始计时
    }

    11.0692Mhz晶振:10毫秒

    void Timer0Init(void) //10毫秒@11.0592MHz
    {
    AUXR &= 0x7F; //定时器时钟12T模式
    TMOD &= 0xF0; //设置定时器模式
    TL0 = 0x00; //设置定时初值
    TH0 = 0xDC; //设置定时初值
    TF0 = 0; //清除TF0标志
    TR0 = 1; //定时器0开始计时
    }

    定时器里面的寄存器

    1.**辅助寄存器AUXR **
    在这里插入图片描述
    如果我们平时使用的话,一般仅使用AUXR的B6和B7的两个定时器的预分频数

    我们使用定时器0的12分频时:
    AUXR &= 7F;// 0111 1111

    这里引入与或非的讲解:
    P1 &= 0X40; 相当于P1 = P1 & 0x40;
    当P1 = 0x20时,P1 = 0x20 & 0x40;
    0x20 = 0b 00100000
    0x40 = 0b 01000000
    &是按位与,就是相同bit位相乘,结果就是:
    0x00 = 0b 00000000
    P1 = 0b00100000 & 0b01000000;
    P1 = 0b00000000 = 0x00;
    那么当P1 = 0x40时,P1 &= 0X40;的结果是0x40
    而P1|=0x40,就是将P1的第7 位置1,而其它位保持不变

    2.定时器/计数器工作模式寄存器TMOD
    在这里插入图片描述
    在这里插入图片描述
    3.控制寄存器TCON
    在这里插入图片描述
    TF1:定时器1溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除。或用软件清除。
    TF0:定时器0溢出标志。定时/计数器溢出时由硬件置位。中断处理时由硬件清除,或用软件清除

    程序讲解

    #include <reg51.h>//使用11.0592Mhz晶振
    int i = 0;
    void Timer0Init(void) ;//初始化定时器
    void main()
    {
    Timer0Init();
    while(1)
    {
    if(TF0 == 1) //检测定时器0是否溢出,每到65535次
    {
    TF0 = 0;//TF清零
    i++;//单片机记满65535时会花费约71ms
    if(i == 14) //71ms乘以14为1s
    {
    i = 0;
    P0 = ~P0;//翻转P0
    }
    }
    }
    }
    void Timer0Init(void) //初始化定时器
    {
    AUXR &= 0x7F; //定时器时钟12T模式
    TMOD &= 0xF0; //设置定时器模式
    TL0 = 0x00; //设置定时初值
    TH0 = 0x00; //设置定时初值
    TF0 = 0; //清除TF0标志
    TR0 = 1; //定时器0开始计时
    }

    展开全文
  • 到处收集的4个51单片机计时器计算器,输入想要的额计时器配置,可自动生成配置计时器的代码,复制粘贴即可用。
  • 51单片机 定时器学习

    2021-04-11 15:30:04
    定时器51单片机定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可实现软件计时,或使程序每隔一固定时间完成一项操作 2.替代长时间的Delay,提高CPU的运行...
  • 51单片机定时器的原理与使用

    万次阅读 多人点赞 2017-06-18 15:51:07
    文章分析了定时器原理与定时器中断,通过实验详细阐述了定时器的使用,尤其是深入分析了各个细节问题。
  • 内容简单,使用stc89c52单片机自带的定时器进行较为精准计时的秒表
  • 51单片机定时器中断

    万次阅读 多人点赞 2019-06-08 23:58:02
    51单片机有2个16位定时器/计数器:定时器0(T0为P3.4) 和定时器1(T1为P3.5) 这里所说的16位是指定时/计数器内部分别有16位的计数寄 存器。当工作在定时模式时,每经过一个机器周期内部的16位计数 寄存器的值就会...
  • 51单片机定时器初值计算

    万次阅读 多人点赞 2017-08-03 11:04:05
    51单片机中把一个时钟周期定义为一个节拍(用P表示),2个节拍定义为状态周期(用S表示) 时钟周期是单片机中最小的时间单位。 eg:12M晶振的单片机,时钟周期=振荡周期=1/12 us。2、机器周期:
  • 51单片机定时器初值计算以及初值计算软件 不想搞懂计算原理的直接跳到文章末尾,使用初值计算软件来解决有关初值计算的问题 51单片机定时器初值计算部分 时钟周期,也称为振荡周期:定义为时钟脉冲的倒数,在...
  • 51单片机定时器

    千次阅读 多人点赞 2018-05-29 21:25:46
    转载自--简书点击打开链接定时器/计数器简介首先,“定时器/计数器”说的是一个东西,因为它既能计时也能计数。其次,它与数码管不一样,不是独立出来的配件,而是存在于单片机内部的一个独立的硬件部分,依赖晶振...
  • 51单片机定时器工作方式1、2原理详解

    万次阅读 多人点赞 2019-08-09 18:38:36
    1.本篇博文旨在帮助那些像我一样刚入门51单片机,如果你对定时器有一定了解,但是其中的的工作方式不能理解,那么这篇文章很适合你,如果你是大神的话…直接绕行吧…… 2.我在学习的过程中由于知识上的不足很多的...
  • 有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 LED灯即发光二极管,它是半导体二极管的...
  • 其于AT89C51单片机定时器数码管显示0到9。带Proteus DSN仿真图。
  • 51单片机定时器初值计算详解

    千次阅读 多人点赞 2019-10-24 23:42:44
    本文详细介绍了51单片机学习过程中定时器的初值计算问题以及相关概念,力求把每一个学习过程中的可能会遇到的难点说清楚,并举相关的例子加以说明。学习完毕,又顺手利用刚学到定时器的相关知识写了一个“定时器...
  • 51单片机 定时器及其应用

    万次阅读 多人点赞 2018-07-17 20:38:23
    89c51单片机内部有两个16位的定时/计数器,即定时器T0和定时器T1,单片机的定时功能其实就是通过计数来实现的,当单片机每一个机器周期产生一个脉冲时,计数器就加一。定时器的应用涉及到中断方面的知识,可以先了解...
  • 51单片机定时器0工作在模式0,每中断10次,使P2.0引脚连接的LED灯闪烁
  • MCS-51单片机定时器和计数器的4种工作方式解析一、定时器/计数器定时器/计数器T0由特殊功能寄存器TH0、TL0构成定时器/计数器T1由特殊功能寄存器TH1、TL1构成特殊功能寄存器TMOD用于控制和确定 定时器/计数器 T0、T1...
  • 51单片机定时器时间计算

    千次阅读 2020-09-15 20:24:45
    51单片机定时器时间计算 #include<stdio.h> int main(void) { unsigned int a,b,c,d,e,f; float g; scanf("%f",&g);//获取定时器时间,单位是ms f=g/1000*11059200/12;//将ms转化为秒s a=65535-f...
  • 单片机定时器采用中断方式,实现单片机的精确定时,误差降到很低!
  • 51单片机定时器控制LED闪烁

    千次阅读 2019-01-20 14:54:44
    //## 定时器控制LED闪烁(500MS)## #include &amp;amp;quot;reg51.h&amp;amp;quot; typedef unsigned int u16; typedef unsigned char u8; #define LED P1 #define LED_ON() LED = 0xfe #define ...
  • 基于51单片机定时器的智能交通灯系统(含仿真),通过外部中断实现的,交通路口交通灯,有数码管倒计时显示数字。里面有PR仿真程序。
  • 51单片机定时器初值计算问题

    千次阅读 2020-03-08 16:16:35
    最近在看51单片机定时器与中断,作为51单片机比较重点的内容,很多人也花费了很长时间在这上面,有些问题网上的资料方法各不相同,也看得云里雾里,比如定时器的初值计算问题,在此我想以此篇作为学习笔记,希望...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,354
精华内容 1,341
关键字:

51单片机定时器倒计时