专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

数字电子时钟3(修正程序)

作者:佚名   来源:本站原创   点击数:  更新时间:2010年09月15日   【字体:
 
___________________________________________________________
功能:
        电子时钟程序重写,使用延时函数来设定扫描间隔
时间:
        2010—8--16
___________________________________________________________

#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char


sbit setsec=P3^0;
sbit setmin=P3^1;
sbit sethour=P3^2;



uchar num=0,hour,min,sec,hourshi,hourge,minshi,minge,secshi,secge;



void delayms(uchar cnt);
void display();
void scan();



void main()
{
        TMOD=0x01;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        TR0=1;
        EA=1;
        ET0=1;
        while(1)
        {
                if(num==100)
                {
                        sec++;
                        if(sec==60)
                        {
                                sec=0;
                                min++;
                        }
                        if(min==60)
                        {
                                min=0;
                                hour++;
                        }
                        if(hour==24)
                        {
                                hour=0;
                        }
                        num=0;
                }
                hourshi=hour/10;
                hourge=hour%10;
                minshi=min/10;
                minge=min%10;
                secshi=sec/10;
                secge=sec%10;
                display();
                scan();
        }

}


void display()//No use of timer1,using delayms()
{
        P0=secge;
        P2=0xfe;
        delayms(5); 
        P0=secshi;
        P2=0xfd;
        delayms(5);

        P0=0x40;
        P2=0xfb;
        delayms(5);

        P0=minge;
        P2=0xf7;
        delayms(5);
        P0=minshi;
        P2=0xef;
        delayms(5);

        P0=0x40;
        P2=0xdf;
        delayms(5);

        P0=hourge;
        P2=0xbf;
        delayms(5);
        if(hourshi)
        {
                P0=hourshi;
                P2=0x7f;
                delayms(5);
        }
}

 

void timer0() interrupt 1 using 0
{
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        num++; 
}

 

void scan()
{
        if(!setsec)
        {
                delayms(2);
                sec++;
                if(sec==60)
                {
                        sec=0;
                        min++;
                        if(min==60)
                        {
                                min=0;
                                hour++;
                                if(hour==24)
                                {
                                        hour=0;
                                }
                        }
              }
        }
        if(!setmin)
        {
                delayms(2);
                min++;
                if(min==60)
                {
                        min=0;
                        hour++;
                        if(hour==24)
                        {
                                hour=0;
                        }
                }
        }
        if(!sethour)
        {
                delayms(2);
                hour++;
                if(hour==24)
                {
                        hour=0;
                }
        }
}

 

void delayms(uchar cnt)
{
        uchar x,y;
        for(x=cnt;x>0;x--)
                for(y=110;y>0;y--);
}

___________________________________________________________

功能:

        电子时钟程序重写,使用定时器设定扫描间隔

时间:

        2010—8—16

___________________________________________________________
关闭窗口

相关文章