单片机/MCU论坛
直播中

包能胜

10年用户 47经验值
擅长:可编程逻辑 测量仪表 嵌入式技术 连接器 光电显示 存储技术 接口/总线/驱动 控制/MCU RF/无线
私信 关注
[文章]

简易可调电子表

该程序简单明了  也可能存在不足之处  欢迎指正

#include
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;
***it dula=P2^6;
***it wela=P2^7;
***it k0=P3^4; //功能键   
***it k1=P3^5; //加
***it 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);
   }
}


回帖(1)

许攸

2020-5-23 14:12:59
单片机怎么配合传感器制作出适用于鱼塘的智能水位系统啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分