单片机T0方式2实现简单时钟

发布者:大伊山人最新更新时间:2020-08-28 来源: 51hei关键字:单片机  T0方式2  简单时钟 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

//按4X4键盘的F键 进入设定状态

//E D 键是前后移动键

//C按键是调整数值按键

#include "reg52.h"

#define uchar unsigned char

sbit key_h=P1^0;

sbit key_m=P1^1;

sbit key_s=P1^2;

unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //段码表

unsigned int h,m,s,counter;


void delay1ms(unsigned int i)

{

unsigned char j;

while(i--)

{

         for(j=0;j<125;j++)          //1ms基准延时程序

         {

          ;

         }

}  

}

void Display_h(unsigned char x)

{           

        P2=0xfb;        //P2.6引脚输出低电平,DS6点亮

    P0=Tab[x/10];   //显示十位

            delay1ms(5);

         P2=0xff;


    P2=0xf7;      //P2.7引脚输出低电平,DS7点亮

    P0=Tab[x%10];  //显示个位

    delay1ms(5);

        P2=0xff;

}

void Display_m(unsigned char x)

{           

        P2=0xef;        //P2.6引脚输出低电平,DS6点亮

    P0=Tab[x/10];   //显示十位

            delay1ms(5);

         P2=0xff;


    P2=0xdf;      //P2.7引脚输出低电平,DS7点亮

    P0=Tab[x%10];  //显示个位

    delay1ms(5);

        P2=0xff;

}

  void Display_s(unsigned char x)

{           

        P2=0xbf;        //P2.6引脚输出低电平,DS6点亮

    P0=Tab[x/10];   //显示十位

            delay1ms(5);

         P2=0xff;


    P2=0x7f;      //P2.7引脚输出低电平,DS7点亮

    P0=Tab[x%10];  //显示个位

    delay1ms(5);

        P2=0xff;

}


/*********************初始化子程序**********************/

void init()

{

  TMOD=0x01;

  TH0=(65536-50000)/256;

  TL0=(65536-50000)%256;

  EA=1;

  ET0=1;

  TR0=1;

  counter=0;

  h=12;m=0;s=0;

}


/***************************按键调时间************************/

void TZ_h()

{

h++;

if(h>24)

{

         h=0;

}

while(key_h!=1);

TR0=1;

}

void TZ_m()

{

m++;

if(m>60)

{

         m=0;

}

while(key_m!=1);

TR0=1;

}

void TZ_s()

{

s++;

if(s>60)

{

         s=0;

}

while(key_s!=1);

TR0=1;

}


/***************************主程序************************/


void main(void)

{

  init();

  while(1)

  {

           Display_h(h);

        Display_m(m);

        Display_s(s);


        if(key_h==0)

        delay1ms(20);

        if(key_h==0)

        {

                TR0=0;        

                TZ_h();

        }

        if(key_m==0)

        delay1ms(20);

        if(key_m==0)

        {

                TR0=0;        

                TZ_m();

        }

        if(key_s==0)

        delay1ms(20);

        if(key_s==0)

        {

                TR0=0;        

                TZ_s();

        }

   }

}

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

void Time0() interrupt 1 using 2    //再次强调中断子程序执行时间越短越好

{

  TH0=(65536-50000)/256;

  TL0=(65536-50000)%256;

  counter++;

  if(counter==20)

  {

    s++;

    counter=0;

          if(s==60)

          {

            m++;

            s=0;

              if(m==60)

              {

               h++;

               m=0;

               if(h==24)

                h=0;

               }

           }

  }

}


关键字:单片机  T0方式2  简单时钟 引用地址:单片机T0方式2实现简单时钟

上一篇:单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片
下一篇:基于单片机的精简八路抢答器

推荐阅读最新更新时间:2024-10-27 14:15

单片机T0方式2实现简单时钟
单片机源程序如下: //按4X4键盘的F键 进入设定状态 //E D 键是前后移动键 //C按键是调整数值按键 #include reg52.h #define uchar unsigned char sbit key_h=P1^0; sbit key_m=P1^1; sbit key_s=P1^2; unsigned char Tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码表 unsigned int h,m,s,counter; void delay1ms(unsigned int i) { unsigned char j; while(i-
[单片机]
<font color='red'>单片机</font><font color='red'>T0</font><font color='red'>方式</font><font color='red'>2</font>实现<font color='red'>简单</font><font color='red'>时钟</font>
51单片机定时器/计数器T0|T1的四种工作方式
• 选择方式0、方式1、方式2时,T0|T1的工作情况相同 • 选择方式3时,T0|T1的工作情况不同 方式0:13位定时器/计数器,TH0的高8位,TL0的低5位 方式1:16位定时器/计数器,TH0的高8位,TL0的低8位 方式2:自动重装的8位计数器,TL0用于计数,TH0用于备份 方式3:被分为TH0和TL0两个独立的8位计数器(只有T0可以在方式3下工作)
[单片机]
51<font color='red'>单片机</font>定时器/计数器<font color='red'>T0</font>|T1的四种工作<font color='red'>方式</font>
采用查询和中断方式利用单片机定时器T0产生定时脉冲编程
利用定时器T0产生定时脉冲。每隔2ms产生宽度为2个机器周期的正脉冲,由P1.0输出此定时序列脉冲信号(设时钟频率为6MHZ)。 答:首先求出定时器T0初值。由于时钟频率为6MHZ,所以,机器周期为2µs。 因为:t=(213-T0初值)´ 机器周期 所以,当t=2ms时,则:(213-T0初值)´ 2´10-6=2´10-3 解得:T0初值=7096=11011101 11000B,其中将高8位11011101 B=DDH赋给TH0,低5位11000B=18H赋给TL0。 方法一: 采用查询工作方式, 编程 如下: ORG 0000H AJMP MAIN
[单片机]
单片机内部定时器T0工作方式下输出方波脉冲信号编程
应用单片机内部定时器T0工作在方式1下,从P1.0输出周期为2ms的方波脉冲信号,已知单片机的晶振频率为6MHZ。 请 (1)计算时间常数X,应用公式X=216-t(f/12) (2)写出程序清单 解:X=216-t(F/12) =216-1*10-3*6*106/12 =OFEOCH ORG 3000H START:MOV TMOD,#01H MOV TL0,#OCH MOV THO,#OFEH SETB TR0 LOOP: JBC TFO,DONE SJMP LOOP DONE: MOV TL0,#OCH MOV THO,#OFEH CPL P1.0 SJMP LOOP
[单片机]
mcs-51单片机T0、T1的四种工作方式功能及定时初始值计算
1、 方式0 当位M1M0=00时。T为13位计数器,THi是高8位,TLi是低5位。 设计数值为N,则计数初值X=2^13-N;2^13=8192=2000H 例1:设fosc=6MHz,要求用T1的方式0定时10ms,求TH1、TL1的初值。 设计数初值为X;由已知条件得:1个机器周期=12/fosc=2us; 10,000us=12/fosc*(2^13-X)us X=2^13-10000/2=8192-5000=3192=0C78H 得:TL1=18H,TH1=63H 2、 方式1 当位M1M0=01时。T为16位计数器,THi是高8位,TLi是低8位。 设计数值为N,则计数初值X=2^16-N;2^16
[单片机]
51单片机 定时器T0方式1 控制流水灯
定时器这家伙在哪里都会用到,实际工程开发中没有能离开定时器的。所以掌握定时器就尤为重要了,这里主要提到的是最基本的使用了--用于定时。 LED原理图见《 51单片机--流水灯演示 》,定时器没有原理图,属于单片机内部资源。 代码如下: #include //头文件 #include #define uint unsigned int //宏定义 uint jishuNumber,aa; //定义jishuNumber为计数器计满次数(本程序20次为1S) aa代表流水号 void main(
[单片机]
51单片机T0做精确时钟
用T0做精确时钟,为了做到尽量精确,必须减少中断的次数,所以选择使用方式1,它最多可以计数65536次。但是,方式1中断后需要重新给定时器赋初值,这样就要耽误几个机器周期,很难保证时钟的精确。 有两个方法可以解决这个问题。 第一个方法:你可以计算出中断处理时重新给定时器赋初值所用的机器周期数,在你计算出的初值里除去这几个机器周期,作为补偿。这个方法,只是在每次定时器中断后,都可以按时得到执行时很精确,但事实上中断什么时候执行谁都说不准,所以这个方法,只能做到尽量精确。 第二个方法:计算出一个凑巧的初值,使TL0正好等于0x00,这样每次中断溢出后,TL0都从0x00开始计数,即使中断没有得到执行,TL0也会继续计数。利用这一点,
[单片机]
C51单片机运用定时器T0中断实现电子时钟
上面是 电路原理图 下面是程序源代码: /***************************************************************************** 功能描述:运用定时器T0实现 电子时钟 **************************************************************************/ #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit p32=P3^2; sbit p33=P
[单片机]
C51<font color='red'>单片机</font>运用定时器<font color='red'>T0</font>中断实现电子<font color='red'>时钟</font>
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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