找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1974|回复: 0
收起左侧

任意调整时间的单片机程序,分2次显示,一次时和秒,一次分钟和秒

[复制链接]
ID:254373 发表于 2017-11-27 21:05 | 显示全部楼层 |阅读模式
#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++;
            }
        }
            }

回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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