定时器准确定时八位时钟

发布者:EternalSmile最新更新时间:2024-08-14 来源: cnblogs关键字:定时器  准确定时 手机看文章 扫描二维码
随时随地手机看文章

/*

定时器准确定时八位时钟

*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar code duanca[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

uchar code weica[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

int i,j,z;


sbit LED = P1^0;

uint hour = 23,minute = 59,second = 50,t50ms = 0;//所有参数从零开始

//含参数延时

void delays(int d)

{

   while(d--);

}

//定时器0

void kinson()

{

    TMOD = 0x09;

    TH0 = 0x3C;

    TL0 = 0x0B0;

    EA = 1;

    ET0 = 1;

    TR0 = 1;

   }

   //主函数

void main(void)

 { 

     kinson();

     LED = 0;

     while(1)//大循环

     {

    for(i = 0;i<= 7;i++)//for循环

    {  

       P3 = ~weica[i];//以此选择数码管显示,一个循环一次

       switch(i)//switch开关 i = 0 1 2 3 4 5 6 7

       { 

                             //时,分,秒,分别看作一个两位数,在通过这个两位数分别除以10和取余10,得到十位和各位

          case 0:P2 = duanca[hour/10];break;//读取选择十位    

          case 1:P2 = duanca[hour%10];break;//读取选择个位

          case 2:P2 = ~0xbf;break;//显示那个横杠

          case 3:P2 = duanca[minute/10];break;//同理

          case 4:P2 = duanca[minute%10];break;

          case 5:P2 = ~0xbf;break;

          case 6:P2 = duanca[second/10];break;

          case 7:P2 = duanca[second%10];break;

          default:break;     

          }

       delays(30);

       

       }

    }

 }

 

 //中断

 void kinson1() interrupt 1

 {

      j++;

    if(j == 13)

    {

       j = 0;

       LED = ~LED;

       delays(1000); 

           //这里是的秒分时分别进一,59秒后分就进一,59分后时就进一,23时后重新循环

        second++;

        if(second == 60)

        {

           second = 0;

           minute++;

           if(minute==60)

           {

              minute = 0;

              hour++;

              if(hour==24)

             hour = 0;

       }

    }   

 } 

 }


关键字:定时器  准确定时 引用地址:定时器准确定时八位时钟

上一篇:单片机中断寄存器知识点总结
下一篇:基于单片机的直流伺服电机控制系统设计

推荐阅读最新更新时间:2024-11-07 10:25

基于STM32F103系列单片机的11个定时器解析
STM32F103系列的单片机一共有11个定时器,其中: 2个高级定时器 4个普通定时器 2个基本定时器 2个看门狗定时器 1个系统嘀嗒定时器 除去看门狗定时器和系统滴答定时器的八个定时器列表; 8个定时器分成3个组; TIM1和TIM8是高级定时器 TIM2-TIM5是通用定时器 TIM6和TIM7是基本的定时器 这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式 计数器三种计数模式 向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时 向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时 中央对齐模式:从0开始向上
[单片机]
基于STM32F103系列单片机的11个<font color='red'>定时器</font>解析
STM32定时器中断实验
STM32的定时器功能十分强大,有TIME1和TIME8等高级定时器,也有TIME2~TIME5等通用定时器,还有TIME6和TIME7等基本定时器。接下来将主要讲述难度适中的通用定时器。 下面以TIM3为例讲解实现定时器中断的每一个步骤: 1、TIM3时钟使能。 TIM3是悬挂在APB1之下,所以应该调用RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);实现时钟使能。 2、初始化定时器参数,设置自动重装值,分频系数,技术方式等。 打开库函数可以发现定时器的初始化是通过初始化函数void TIM_TimeBaseInit来实现的: void TIM_TimeBaseIn
[单片机]
STM32中定时器时钟
STM32中有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。 下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图: 从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分。 下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当 APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟
[单片机]
STM32中<font color='red'>定时器</font>的<font color='red'>时钟</font>源
使用STM32定时器PWM功能时的小问题
有人使用STM32定时器的PWM功能,遇到点小疑问,这里一起看看。 他先将STM32某定时器计数周期设为0xff,单向递增计数模式,OC比较值设为0x7F。在某时刻将新的计数周期0x7F与比较值0x3F加载到影子寄存器。当正在进行的一个周期结束后,经示波器测量确实可以看到其下一个周期发生变化,但其周期明显与预设值对应不上!再次经过一个周期,定时器才会按照预设值稳定输出。 以上是咨询者不算很清晰的描述【其实咨询TIMER问题最好配上时序图】,但可以了解到他要做的事情就是在ARR=0xff,ccr=0x7F的PWM输出状态下,于某时刻赋予ARR和CCR新值以改变输出波形。 事情不算复杂,疑点就是为什么需要2个周期延时后才能有基
[单片机]
使用STM32<font color='red'>定时器</font>PWM功能时的小问题
51单片机使用定时器进行数码管动态扫描程序
数码管是51单片机学习中比较基础的一个模块,为简化电路连接,提高系统可靠性,降低制造成本,多位数码管广泛采用动态扫描的方式进行显示。如果程序编写不当,数码管动态扫描容易出现亮度不均匀、亮度过低、重影等现象。很多初学者会在主函数中使用while(1)循环,结合delay函数不断扫描,但这样得不断调用display扫描,如果单片机还要执行别的程序时,就会由于扫描不及时,导致各种问题。此外,在控制段选位选的先后顺序上,如果程序不当,则会造成显示重影等问题。在此给出一个稳定可靠的程序方案。 电路连接:P1口通过两个74HC573分别连接到八位数码管的段选和片选,段选、位选由P3.4和P3.5控制,低电平锁存 #include re
[单片机]
利用51系列单片机定时器功能实现测量脉冲宽度
STC12C系列增强型单片机片上扩展了基本51单片机的功能,如提供了PCA/PWM接口,定时器能工作在1T模式下(基本51单片机的时钟是Fosc的12分频,1T模式下1分频)。 PCA可以用于脉宽测量,但是,protues暂不支持该系列单片机的仿真功能,反复烧写也挺麻烦,所以还是先用基本51单片机实现该功能,在后面的博文里在实现PCA测量脉宽。 实现思路如下: TMOD最高位GATEn置位后,Tn启动计数受INTn(Pin3.3)和TRn的共同影响:TRn为1,当INTn引脚输入为高电平时,Tn才允许计数。利用这个功能可测量INTn上正脉冲的宽度。 先上图(原谅我的制图能力): 1):1处 在上升沿之前,初始化TMOD,T
[单片机]
利用51系列单片机<font color='red'>定时器</font>功能实现测量脉冲宽度
PIC16位单片机CAN(7)定时器
定时器相对来说是最简单的了,也没有什么说的, 每个定时器模块都是 16 位定时器 / 计数器,由以下可读 / 写寄存器组成: ? TMRx:16 位定时器计数寄存器 ? PRx:与定时器相关的 16 位定时器周期寄存器 ? TxCON:与定时器相关的 16 位定时器控制寄存器 需要注意的是: 1:定时器是16位了,也可以配置为32位的,具体看文档,这里使用16位的定时器。 2:PRx:与定时器相关的 16 位定时器周期寄存器。也就是TMRx的值和PRx值相等时产生中断。】 下面看程序: /***********************************************************
[单片机]
可编程定时/计数器提高输出频率准确度方法
摘要: 用可编程定时/计数器作脉冲发生器时,输出脉冲频率等于输入时钟频率除以计数值,但其数值是离散的,期望输出频率只能用这些离散频率点来近似,频率准确度随输出频率升高而下降。提高输入时钟频率,增加输入时钟源数能提高脉冲发生器输出频率准确度。 关键词: 计数器 脉冲发生器 频率准确度 将单片机内置或专用可编程定时/计数器作脉冲发生器,一般输入脉冲由晶振产生经过整形或分频后形成,有很高的频率准确度和稳定度。设输入脉冲频率为fin,期望输出脉冲频率为f,应置入脉冲发生器的计数值N=fin/f。当f为fin的约数,则N为整数,f与fin的准确度相同;当f不为fin的约数,则N也不为整数,N=n+ δ ,其中n为N的整数部分
[模拟电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved