年,月,日时钟问题

2019-07-16 00:31发布

本人编写有一个 年,月,日时钟,时钟没有问题了,就是在年,月,日有问题,不知为什么times New Roman">LCD1602写第以行有个黑点去不了,仿真时候黑点就不见了,就正常了。还有一个 问题是在判断日的时候老是出问题,ifswitch语句都改过使用过。都不能正常判断年,月,日希望高手帮看下我程序哪出问题了,谢谢~~
#include<reg51.h>
#define uint   unsigned  int
#define uchar  unsigned  char
sbit rw=P2^5;
sbit rs=P2^6;
sbit re=P2^7;
sbit key=P1^0;  
sbit key1=P1^1;
sbit key2=P1^2;      
const uchar  table1[]="   make in the    maker is";
const uchar  table2[]="   2013-05-09     niu  niu";
const uchar  table3[]="    00:00:00     ";
char aa=0,miao,fen,shi,ri,yue,ii;
int year;
void delay(uint z)     //延时函数
{
      uint i,j;
      for(i=0;i<110;i++)
         for(j=z;j>0;j--);
    }
void wrint_com(uchar com)    //写指令函数
{
   rs=0;
   rw=0;
   P0=com;
   re=0;
   delay(2);
   re=1;
   delay(5);
   re=0;
}
void wrint_dat(uchar dat)  //写数据函数
{
   rs=1;
   rw=0;
   P0=dat;
   re=0;
   delay(2);
   re=1;
   delay(5);
   re=0;
}
void innt1(void)      //液晶初始化函数1
{
     delay(5);
     wrint_com(0x38);
     delay(2);
     wrint_com(0x38);
     delay(2);
     wrint_com(0x38);
     wrint_com(0x38);
     wrint_com(0x08);
     wrint_com(0x01);
     wrint_com(0x06);
     wrint_com(0x0c);
}
void  sfm(char ad,char datt)
{
   char ge,si;
   ge=datt%10;
   si=datt/10;
   wrint_com(0x80+0x40+ad);
   wrint_com(0x0c);
   wrint_dat(0x30+si);
   wrint_dat(0x30+ge);
}
void  nyr(char add,int date)
{
   char  ge, si, bai, qian,i;

   if(date<=32)
    {
    si=date/10;
    ge=date%10;
    wrint_com(0x80+add);
    wrint_dat(0x0c);
    wrint_dat(0xb0);
    wrint_dat(0x30+si);
    wrint_dat(0x30+ge);
    delay(10);
    }  
      else
  {
     qian=date/1000;
     bai=date%1000/100;
      si=date%1000%100/10;
      ge=date%1000%100%10/1;
      wrint_com(0x80+add);
      wrint_dat(0x0c);
      for(i=0;i<2;i++)
       {
      wrint_dat(0x20);
       }
     

      wrint_dat(0x30+qian);
      delay(5);
      wrint_dat(0x30+bai);
      delay(5);
      wrint_dat(0x30+si);
      delay(5);
      wrint_dat(0x30+ge);
}

}



void innt2(void)        //液晶显示初始化函数2
{
    uchar num;
    wrint_com(0x80);
    for(num=0;num<26;num++)
    {
      wrint_dat(table1[num]);
       delay(1);
     }
     delay(1);
     wrint_com(0x80+0x40);
    for(num=0;num<26;num++)
     {
      wrint_dat(table2[num]);
      delay(1);
     }
     delay(1500);
     for(num=0;num<14;num++)
     {
      wrint_com(0x18);
      delay(30);
     }
     delay(2000);



     wrint_com(0x01);
     wrint_com(0x80);
     for(num=0;num<18;num++)
     {
      wrint_dat(table2[num]);
      delay(2);
     }
     
     wrint_com(0x80+0x40);
     for(num=0;num<16;num++)
     {
       wrint_dat(table3[num]);
       delay(1);
     }

       nyr(0x09,ri);
       nyr(0x06,yue);
       nyr(0x00,year);
       sfm(0x04,shi);
       sfm(0x07,fen);
       sfm(0x0a,miao);
}
void cursor(void)
{
  if(ii!=0)
     {
         wrint_com(0x0f);
        if(ii==1)
        {
            wrint_com(0x80+0x40+0x0a+0x01);
         }
         if(ii==2)
        {
            wrint_com(0x80+0x40+0x07+0x01);
         }
          if(ii==3)
        {
            wrint_com(0x80+0x40+0x04+0x01);
         }
         if(ii==4)
        {
            wrint_com(0x80+0x09+0x03);
         }
          if(ii==5)
        {
            wrint_com(0x80+0x09);
         }
               if(ii==6)
        {
            wrint_com(0x80+0x6);
         }
     }        
}


int pdt(char n,  char y,  char r)
{
switch(y<=12)
{
case 2:  if((n%4==0&&n%100!=0)||(n%400==0))
            {
                if(r==30)
               {
               ri=0;
               break;
               }
               else if (r==-1)
               {ri=29;break;}
               else{ri=r;break;}
             }
          else{
                if(r==29)
                {ri=0;break;}
                else if (r==-1)
                {ri=28;break;}
                else
                {ri=r;break;}
               }break;

case 4:     
case 6:
case 9:
case 11: if(r==31)
           {ri=0;break;}
         else if(r==-1)
           {ri=30;break;}
         else{ri=r;break;}
           
           
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:if(r==32)
        {ri=0;break;}
        else if(r==-1)
        {ri=31;break;}
        else{ri=r;break;}         

}
return ri;

}



void anj(void)
{
  if(key==0)
  {
   delay(2);
         if(key==0)
         {
             TR0=0;
             ii++;
             while(!key);
             delay(5);
             while(!key);
         }
      }
     
   if(ii==7)
     {
          ii=0;
          TR0=1;
          wrint_com(0x0c);
     }

         
  if(ii!=0)
   {
     
     
       if(key1==0)
       {
        delay(5);
                if(key1==0)
                   {
                    while(!key1);
                    delay(5);
                    while(!key1);
                    }
                if(ii==1)
                {
                   miao++;
                            if(miao==60)
                             {
                                miao=0;                     
                             }                                                         
                                sfm(0x0a,miao);
                              
                     
                 }
                 if(ii==2)
                 {
                  fen++;
                           if(fen==60)
                           {
                               fen=0;
                           }
                               sfm(0x07,fen);
                           
                           
                 }
                 if(ii==3)
                 {
                  shi++;
                           if(shi==24)
                           {
                               shi=0;
                           }
                           sfm(0x04,shi);                           
                 }



                      if(ii==4)
                 {

                    pdt(year,yue,ri);
                    ri++;
                    pdt(year,yue,ri);
               nyr(0x09,ri);
               nyr(0x06,yue);
               nyr(0x00,year);
                 }

               if(ii==5)
                 {
                  yue++;
                             if(yue==13)
                       {}
                       else
                       
                       {
                       nyr(0x06,yue);
                       nyr(0x00,year);
                       }

                       if(yue==13)
                       {
                         yue=0;
                       nyr(0x06,yue);
                         nyr(0x00,year);
                       }                           
                 }
                if(ii==6)
                 {
                  
                         year++;
                         if(year==9999)
                         {year=0;}
                         nyr(0x00,year);
                       }               
                 }




      
      

     if(key2==0)
       {
        delay(5);
          if(key2==0)
           {
                 while(!key2);
                 delay(5);
                 while(!key2);
           }
           if(ii==1)
             {
              miao--;
                      if(miao==-1)
                       {
                        miao=59;
                       }
                       sfm(0x0a,miao);
             }
            if(ii==2)
            {
             fen--;
                 if(fen==-1)
                  {
                   fen=59;
                  }
                   sfm(0x07,fen);
            }
            if(ii==3)
            {
             shi--;
                     if(shi==-1)
                     {
                     shi=23;
                     }
                     sfm(0x04,shi);
            }

           if(ii==4)
            {
   
                 pdt(year,yue,ri);
                   ri--;
                  pdt(year,yue,ri);
               nyr(0x09,ri);
               nyr(0x06,yue);
               nyr(0x00,year);                        
            }

         if(ii==5)
                 {
                  yue--;
                             if(yue==-1)
                       {}
                       else
                       
                       {
                       nyr(0x06,yue);
                       nyr(0x00,year);
                       }

                       if(yue==-1)
                       {
                         yue=12;
                       nyr(0x06,yue);
                         nyr(0x00,year);
                       }                           
                 }
                if(ii==6)
                 {
                  
                         year--;
                         if(year==-1)
                         {year=9999;}
                         nyr(0x00,year);
                       }               
                 }

       }

      
     }   




jishi(void)
{
   if(aa==20)
   {
     aa=0;
     miao++;     if(miao==60)
                 {}
                  else{sfm(0x0a,miao);}

               if(miao==60)
               {
                   miao=0;
                   sfm(0x0a,miao);
                   fen++;
                   if(fen==60)
                   {
                    fen=0;
                    shi++;
                    if(shi==24)
                     {
                       shi=0;
                       ri++;
                      switch(12<=yue)
                       {
                          case 2:  if((year%4==0&&year%100!=0)||(year%400==0))
                                   {
                                             if(ri==30)
                                             {
                                              ri=0; yue++;  break;
                                              }

                                    }
                                     else
                                     {
                                                  if(ri==29)
                                                    {                           
                                                    ri=0;
                                                    yue++;  break;
                                                    }
                                   }
                         case 4:     
                         case 6:
                         case 9:
                         case 11: if(ri==30) {ri=0;yue++;} break;
                         default: if(ri==32) {ri=0;yue++;} break;

                         }
        
                             
                       nyr(0x09,ri);
                       nyr(0x06,yue);
                       nyr(0x00,year);
                       if(yue==13)
                       {}
                       else
                       
                       {
                       nyr(0x06,yue);
                       nyr(0x00,year);
                       }

                       if(yue==13)
                       {
                       yue=0;
                       nyr(0x06,yue);
                        
                         year++;
                         if(year==9999)
                         {year=0;}
                        // nyr(0x09,ri);
                      // nyr(0x06,yue);
                       nyr(0x00,year);
                       }
                       
                                       
                     
                     }
                     sfm(0x04,shi);
                   }
                   sfm(0x07,fen);
                }
                  
                                 
    }
   
}
        
        




void  zinit(void)
{
EA=1; //打开总中断
TMOD=0x01; //设置定时1工作方式
ET0=1;        //    开启定时器1
TR0=0;        //     启动定时器0
TH0=(65536-50000)/256;// 给定时器装载时间数据初值为50毫秒 给TH0高八位
TL0=(65536-50000)%256;//TH0低八位

}
int main(void)
{
   miao=55;fen=58;shi=23;
   year=2012;yue=11;ri=30;
   zinit();
   innt1();
   innt2();
   TR0=1;
   while(1)
   {
   jishi();
   anj();
   cursor();
   }
return  0;
}
void timer0(void) interrupt 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  aa++;
}

file:///C:DOCUME~1ADMINI~1LOCALS~1Tempksohtmlwps_clip_image-15670.png

1 1
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。