标题: 任意调整时间的单片机程序,分2次显示,一次时和秒,一次分钟和秒 [打印本页]

作者: 对面的女孩看过    时间: 2017-11-27 21:05
标题: 任意调整时间的单片机程序,分2次显示,一次时和秒,一次分钟和秒
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};
unsigned char cnt = 0;
unsigned char cnt0 = 0;  
unsigned char sec0 = 0;
unsigned char sec1 = 0;
unsigned char sec2 = 0;


bit flag=0;
bit flag0=0;
bit flag1=0;
bit flag1s=0;



sbit key0=P3^2;
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;

void delay(uint ms)
{
  while(ms--);
}


void main()
{
sec2=23;
sec1=59;
sec0=55;

  EX0=1;                //外部中断0
    IT0=1;
        EX1=1;                //外部中断1
        IT1=1;
        EA = 1;   
        TMOD = 0x01;
    TH0=(65536-50000)/256;
    TL0=(655356-50000)%256;
    ET0=1;
        TR0=1;               
        while(1)
        {
         
                P2 = 0x80;P0 = tab[sec0%10];delay(10);P0 = 0xff;
                P2 = 0x40;P0 = tab[sec0/10];delay(10);P0 = 0xff;
                                                         
           if(flag1s==0)
                   {
                      P2 = 0x20;P0 = tab[sec1%10];delay(10);P0 = 0xff;
                      P2 = 0x10;P0 = tab[sec1/10];delay(10);P0 = 0xff;
                          P2 = 0x20;    P0 =0x7f;      delay(10);P0=0xff;
                   }

       else
                   {
                      P2 = 0x20;P0 = tab[sec2%10];delay(10);P0 = 0xff;  
                        P2 = 0x10;P0 = tab[sec2/10];delay(10);P0 = 0xff;
                   }
                        
             if((key2==0)&&(flag0==0))
               flag0=1;
                   if((key2==1)&&(flag0==1))
             {
              flag=0;
                          flag1s=0;
                      flag0=0;
                  sec1++;
                        
                  if(sec1==60)
                    {
                     sec1 = 0;
                 sec2++;
                    }
             }
         if((key3==0)&&(flag1==0))
                   flag1=1;
                   if((key3==1)&&(flag1==1))
             {
                         flag=0;
                         flag1s=1;
                  flag1=0;
                  sec2++;
                  if(sec2==24)
                    sec2 =0;
                     }
        }
        }


void t0(void) interrupt 1 using 3
{
     TH0 = (65536-50000)/256;
         TL0 = (65536-50000)%256;
     cnt++;      
    if (cnt >= 20)  
    {        
            if(flag==1)
        {         
         cnt = 0;
                 cnt0++;
                 if(cnt0==5)
                 {
                 flag1s=~flag1s;
                 cnt0=0;
                 }
                 sec0++;
                  if(sec0==60)
                  {
                     sec0=0;
                         sec1++;
                         if(sec1==60)
                         {
                           sec1=0;
                           sec2++;
                           if(sec2==24)
                           {
                             sec2=0;
                           }
                         }
                  }
                  }                        
    }
        }

void int0_()interrupt 0 using 1
{
  if(key0==0)


         flag=1;

}
void int1_()interrupt 2 using 2
{
   if(key1==0)
   {
         flag=0;
         sec0++;
             if(sec0==60)
            {
             sec0 = 0;
             sec1++;
            }
        }
            }






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1