zoukankan      html  css  js  c++  java
  • 基于51单片机,通过定时器实现的时钟程序

    //使用定时器设计一个时钟
    //数码管:Datapros(),DigDisplay()
    //定时器初始化
    //中断函数,主函数
    //临时变量:a,秒:sec,分:min,时:hour

    #include<reg52.h>

    typedef unsigned char uchar;
    typedef unsigned int uint;

    uchar a=0,sec=0,min=0,hour=0;
    uchar DataTime[8];

    sbit LSA=P2^2;
    sbit LSB=P2^3;
    sbit LSC=P2^4;

    uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

     //延时函数
    void delay(uchar i)
    {
        while(i--);
    }

    //数码管显示函数
    void DigDisplay()
    {
        uchar i;
        for(i=0;i<8;i++)       //动态扫描显示8个数码管
        {
            switch(i)
            {
                case(0):
                    LSA=0;LSB=0;LSC=0;break;
                case(1):
                    LSA=1;LSB=0;LSC=0;break;
                case(2):
                    LSA=0;LSB=1;LSC=0;break;
                case(3):
                    LSA=1;LSB=1;LSC=0;break;
                case(4):
                    LSA=0;LSB=0;LSC=1;break;
                case(5):
                    LSA=1;LSB=0;LSC=1;break;
                case(6):
                    LSA=0;LSB=1;LSC=1;break;
                case(7):
                    LSA=1;LSB=1;LSC=1;break;            
            }
            P0=DataTime[i];          //给P0口赋值,时对应的数码管输出对应的值
            delay(100);
            P0=0x00;           //消隐
        }
    }

    //对得到的时间进行处理,供P0口使用
    void Datapros()
    {
        DataTime[0]=smgduan[sec%10];         //取余得到秒的个位    ,通过smgduan[]得到对应的十六进制数
        DataTime[1]=smgduan[sec/10];         //取余得到秒的十位
        DataTime[2]=0x40;                      //显示一条横线
        DataTime[3]=smgduan[min%10];
        DataTime[4]=smgduan[min/10];
        DataTime[5]=0x40;
        DataTime[6]=smgduan[hour%10];
        DataTime[7]=smgduan[hour/10];        
        
    }
     //定时器初始化
    void TimerInit()
    {
        TMOD=0X01;       //选择定时器0,方式1
        TH0=0Xd8;          //对TH0和TL0赋初值为10ms,
        TL0=0Xf0;            
        EA=1;
        ET0=1;
        TR0=1;
    }

    void main()
    {
        TimerInit();
        while(1)
        {
            Datapros();    
            DigDisplay();    
        }    
    }


    void Timer() interrupt 1
    {
        TH0=0Xd8;
        TL0=0Xf0;
        a++;
        if(a==99)           // TH0和TL0溢出一次为10ms,溢出100次为1s.
        {
            sec++;             //+1s
            a=0;
            if(sec==60)
            {
                min++;          //+1分钟
                a=0;
                sec=0;
                if(min==60)
                {
                    hour++;
                    a=0;
                    sec=0;
                    min=0;
                    if(hour==24)
                    {
                        a=0;
                        hour=0;
                        min=0;
                        sec=0;

                        
                        }    
                }
                
            }    
        }    
    }

  • 相关阅读:
    mysql添加用户和密码
    常用正则表达式
    锐捷配置telnet
    Cisco配置aaa验证
    华为交换机端口镜像配置
    华为交换机boot默认密码
    python自动化运维常用模块安装
    python交互模式下tab键自动补全
    python脚本检查TCP端口是否正常
    python脚本获取主机Mac地址
  • 原文地址:https://www.cnblogs.com/hexia7935/p/13904690.html
Copyright © 2011-2022 走看看