微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 简易可调电子表

简易可调电子表

时间:10-02 整理:3721RD 点击:
该程序简单明了  也可能存在不足之处  欢迎指正
#include<reg52.h>
char code table[] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
char num,miao,fen,shi,tt,num;
sbit dula=P2^6;
sbit wela=P2^7;
sbit k0=P3^4; //功能键   
sbit k1=P3^5; //加
sbit k2=P3^6; //减  
/*************延时函数*************/   
void delay (int z)
{
        int x,y;
    for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
/************显示时分秒函数*******/
void display_sfm(char add0,char add1,char add3,char add4,char add6,char add7,char miao,char fen,char shi)
{
        dula=1;
        P0=table[miao%10];
        dula=0;
        P0=0xff;
    wela=1;
        P0=table1[add0];
        wela=0;
        delay(1);
   dula=1;
        P0=table[miao/10];
        dula=0;
        P0=0xff;
    wela=1;
        P0=table1[add1];
        wela=0;
        delay(1);
            dula=1;
        P0=table[fen%10];
        dula=0;
        P0=0xff;
    wela=1;
        P0=table1[add3];
        wela=0;
        delay(1);
   dula=1;
        P0=table[fen/10];
        dula=0;
        P0=0xff;
    wela=1;
        P0=table1[add4];
        wela=0;
        delay(1);
            dula=1;
        P0=table[shi%10];
        dula=0;
        P0=0xff;
    wela=1;
        P0=table1[add6];
        wela=0;
        delay(1);
   dula=1;
        P0=table[shi/10];
        dula=0;
        P0=0xff;
    wela=1;
        P0=table1[add7];
        wela=0;
        delay(1);
}
/*********显示时分秒之间的间隔-函数********/
void display_jiange()
{
           dula=1;
        P0=0x40;
        dula=0;
        P0=0xff;
    wela=1;
        P0=0xdf;
        wela=0;
        delay(1);
   dula=1;
        P0=0x40;
        dula=0;
        P0=0xff;
    wela=1;
        P0=0xfb;
        wela=0;
        delay(1);
}
/***********初始化函数**********/
void init()
{
   num=0;
        miao=50;
        fen=58;
        shi=23;
        TMOD=0x01;
        TH0=(65530-50000)/256;
   TL0=(65535-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;       
}
/********按键函数***********/
void keyscan()
{
        if(k0==0)         //功能键按下
      {  
         delay(5);
         if(k0==0)
                   {
                                 while(!k0);
             delay(5);
             while(!k0);
                  num++;
                              if(num==5)
                  num=1;  
            }         
          switch(num)   
                         {
                                 case 1:TR0=0;     //功能键按一下:关闭定时,led1亮,调节秒钟
                    P1=0xfe;break;
                                 case 2:P1=0xfd;break;//功能键按两下:led2亮,调节分钟
                                 case 3:P1=0xfb;break;//功能键按三下:led3亮,调节时钟
                 case 4:TR0=1;    //功能键按四下:灯全灭,定时开启
                    P1=0xff;break;
                 default:break;
                         }                           
          }
     if(num!=0)
      {
                        if(k1==0)    //加键按下
          {
                                delay(5);
            if(k1==0)
              {
                 while(!k1);
                                                delay(5);
                  while(!k1);
                 if(num==1)  //秒加
                  {
                    miao++;
                    if(miao==60)
                     miao=0;                  
                  }
                  if(num==2)  //分加
                   {
                     fen++;
                                              if(fen==60)
                      fen=0;                     
                   }
                   if(num==3)  //时加
                   {
                     shi++;
                                              if(shi==24)
                      shi=0;                     
                    }  
               }
           }
          if(k2==0)
            {
                                        delay(5);
                if(k2==0)  //减键按下
                 {
                   while(!k2);
                   delay(5);
                   while(!k2);
                    if(num==1)  //秒减
                      {
                        miao--;
                         if(miao==-1)
                          miao=59;
                      }
                    if(num==2)  //分减
                                                         {
                         fen--;
                         if(fen==-1)
                          fen=59;
                      }
                    if(num==3)  //时减
                      {
                         shi--;
                         if(shi==-1)
                          shi=23;
                      }
                 }
            }
       }
}
/*********定时函数***********/
void timer0() interrupt 1  
{
  TH0=(65530-50000)/256;
  TL0=(65535-50000)%256 ;
  tt++;
}
void main()
{  
  init();
  while(1)
  {
                display_jiange();
      keyscan();
           if(tt==18)
       {
              tt=0;
              miao++;
             if(miao==60)         
          {        
                                miao=0;
            fen++;
                                if(fen==60)
             {
                                   fen=0;
               shi++;
               if(shi==24)
               shi=0;
             }                        
          }                                  
       }
      display_sfm(0,1,3,4,6,7,miao,fen,shi);
   }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top