极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7533|回复: 0

这个差不多也的快半个小时

[复制链接]
发表于 2014-2-28 20:51:13 | 显示全部楼层 |阅读模式
/***********************************************************
实验名称:定时器0时钟
程序说明:烧好程序同时拨码开关2打上 数码管显示分秒
实验平台:HY-M51核心板          51单片机 12M晶振
作者:刘哲
日期:2011-10-01
宏远电子  http://imcu.taobao.com/  版权所有
***********************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a1,a2,a3,a4;
uchar a,s,f,m;
sbit s1=P2^4;
sbit s2=P2^5;
sbit s3=P2^6;
sbit s4=P2^7;
uchar code table[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};// 定义段码
void delay(uint n)//延时
{
        uint x;
        while(n--)
        {
                x=50;
                while(x--);
        }
}
void disp(uchar n3,n2,n1,n0)//显示子程序
{
        P0=table[n3];//开段选
        P2=0Xfe;        //开位选       
        delay(10);        //延时

        P0=table[n2];
        P2=0Xfd;               
        delay(10);       


        P0=table[n1];
        P2=0Xfb;
        delay(10);
       
        P0=table[n0];
        P2=0Xf7;
        delay(10);       
}
void Time0()//定时器0中断
{
        TMOD=0X01;
        TH0=0x3c;//装初值50ms
        TL0=0xb0;
        TR0=1;  //开定时器0中断
        ET0 = 1;//IE中断允许寄存器 t0溢出中断允许位
        EA=1;   //开总中断
}
void main()
{
        Time0();
       
        //调用定时器0中断
        while(1)
        {

                a1=s/10;
                a2=s%10;
                a3=f/10;
                a4=f%10;
                disp(a1,a2,a3,a4);//显示数字
                        if(s1 == 0)
   {
      delay(10);//延时去抖动
          if(s3 == 0)
      {
                if(f<60)
                {f++;
                 if(f==60)
                 {f=0;
                 }
                }
      }       
                         
   }
          if(s2 == 0)
      {
                if(f<60)
                {f++;
                 if(f==60)
                 {f=0;
                 }
                }
      }
          if(s1 == 0)
      {
                if(s<24)
                {s++;
                 if(s==24)
                 {s=0;
                 }
                }
      }       
          delay(1);
                         
   }       
                         
   
}
void Timer0Interrupt() interrupt 1
//中断服务程序
{
        TH0=0x3c;//50ms
        TL0=0xb0;
        a++;
        if(a==20)
        {
                a=0;
                m++;
                if(m==60)
                {
                        m=0;
                        f++;
                        if(f==60)
                        {
                                f=0;
                                s++;
                                if(s==24)s=0;
                        }
                }
        }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 20:18 , Processed in 0.040840 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表