⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi.c

📁 利用PIC16F877的SPI口做出来的时钟
💻 C
字号:
#include  <pic1687x.h>

//*该程序用于在LED上依次显示0~9等10个字符*/
const int table[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned  char  data,flag,setflag; 
unsigned char i,a,b,c,d,e,f;

void delay500ms(void) 
{
  unsigned char i,m,n;
  for(i=15;i>0;i--) 
  for(m=202;m>0;m--) 
  for(n=81;n>0;n--);
}

void settimedelay()
{
  unsigned char h,l;
  for(h=0;h<40;h++)
  for(l=0;l<100;l++);
}


void clockint()               //初始化时间----11:12:00
{
  flag=0;
 
  SSPBUF=table[1];  
  RD5=RD4=RD3=0;  
  while(flag==0)
    {
      if(SSPIF==1)
       { flag=1; 
         RD5=RD4=RD3=1; 
         SSPIF=0;  
       }               
    }

  flag=0; 
  SSPBUF=table[2];    
  RD2=0;
  while(flag==0)
    {
      if(SSPIF==1)
       { flag=1; 
         RD2=1; 
         SSPIF=0;  
       }               
    }   

  flag=0;
  SSPBUF=table[0];  
  RD0=RD1=0;
  while(flag==0)
    {
      if(SSPIF==1)
       { flag=1; 
         RD0=RD1=1; 
         SSPIF=0;  
       }               
    }   

}


void initial()
{       
   ADCON1=0X07;
   TRISD=0X00;
   TRISC3=0;     //SCK时钟输出引脚。
   TRISC5=0;     //串行数据输出引脚。  
   TRISD7=1;
   TRISE0=1;
   TRISE1=1; 
   TRISE2=1; 
   SSPCON=0x20;  //主控方式,空闲时时钟为低电平,时钟为:Fosc/4
   SSPSTAT=0xc0; //SCK上跳沿数据传送。
   INTCON=0X00;  
}


void secbit0full()         //秒个位满9
{
   b=b+1;
   SSPBUF=table[b];   
   RD1=0;   
   while(flag==1)
      {
        if(SSPIF==1)
          { flag=0; 
            RD1=1; 
            SSPIF=0;       
           }               
       }
}

void secbit1full()      //秒十位满5(即59)
{
    if(b==6)
     {
       flag=1;
       b=0 ;    
       SSPBUF=table[b];       
       RD1=0;
       while(flag==1)
        {
          if(SSPIF==1)
           { flag=0; 
             RD1=1; 
             SSPIF=0;       
           }               
         }  
       
     
       c=c+1;
       SSPBUF=table[c];       
       RD2=0;
       while(flag==0)
        {
           if(SSPIF==1)
            { flag=1; 
              RD2=1;
              SSPIF=0;        
            }               
         }      
       }
}


void minbit0full()
{
  if(c==0x0a)
    { flag=1;
       c=0;
       SSPBUF=table[c];       
       RD2=0;
       while(flag==1)
        {
         if(SSPIF==1)
          { flag=0; 
             RD2=1;
             SSPIF=0;        
            }  
         }

         d=d+1;
         SSPBUF=table[d];
         RD3=0;
         while(flag==0)
          {
            if(SSPIF==1)
             { flag=1; 
               RD3=1; 
               SSPIF=0;       
             }        
          }
     }
}


void minbit1full()
{
    if(d==6)
     {  
       flag=1;
       d=0;
       SSPBUF=table[d];
       RD3=0;
       while(flag==1)
        {
          if(SSPIF==1)
            { flag=0; 
              RD3=1;
              SSPIF=0;        
             }        
          }
             
        e=e+1;
        SSPBUF=table[e];
        RD4=0;
         while(flag==0)
              {
                 if(SSPIF==1)
                  { flag=1; 
                    RD4=1;
                    SSPIF=0;        
                   }        
             }
        }
}


void hourbit0full()
{
   if(e==0x0a)
     {
        flag=0;
         e=0;
         SSPBUF=table[e];
         
          RD4=0;
          while(flag==0)
            {
              if(SSPIF==1)
                { flag=1; 
                  RD4=1;
                  SSPIF=0;        
                }       
            }

            f=f+1;
            SSPBUF=table[f];
            RD5=0;
            while(flag==1)
              {
                if(SSPIF==1)
                  { flag=0; 
                    RD5=1; 
                    SSPIF=0;       
                   }        
              }

          }
}


void hourbit1full()
{
    if(f==2)
      {
        if(e==4)
          { flag=1;
             e=0;
             f=0;
             SSPBUF=table[0];                
             RD5=0;
             RD4=0;
              while(flag==1)
                {
                  if(SSPIF==1)
                   { flag=0; 
                     RD5=1; 
                     RD4=1; 
                     SSPIF=0;      
                    }        
                }
           } 
        }     
}



void settime()
{    
     setflag=1;    
     flag=0; 
     a=b=0;
     SSPBUF=0X3F;
     RD0=RD1=0;     
     while(flag==0)
      {
        if(SSPIF==1)
         { flag=1; 
           RD0=RD1=1;          
           SSPIF=0;    
         }               
      }

   while(setflag==1)
  {

    if(RE0==0)
     {
       settimedelay();
       settimedelay();
       settimedelay();        
       if(RE0==0)
        {
          flag=0;
          c=c+1;

           if(c==0x0a)
           {
             flag=0;
             c=0;
             d=d+1;
             if(d==6)
              {d=0;}
             SSPBUF=table[d];
             RD3=0;
             while(flag==0)
             {
              if(SSPIF==1)
               { flag=1; 
                RD3=1;            
                SSPIF=0;    
              }               
             }       
           }  

          flag=0;
          SSPBUF=table[c];
          RD2=0;
          while(flag==0)
          {
            if(SSPIF==1)
            { flag=1; 
              RD2=1;            
              SSPIF=0;    
            }               
          }         
       }
     }          
     settimedelay();
     settimedelay();

      
    if(RE1==0)
     {
       settimedelay();
       settimedelay();
       settimedelay(); 
       if(RE1==0)
         {
           flag=0;
           e=e+1;
           if(e==0x0a)
            {
              e=0;
              f=f+1;              
            }
           
          if(f==2 && e==4)
          {f=0;e=0;}
           
          flag=0;
          SSPBUF=table[e];
          RD4=0;
          while(flag==0)
          {
            if(SSPIF==1)
            { flag=1; 
              RD4=1;            
              SSPIF=0;    
            }               
          }

          flag=0;
          SSPBUF=table[f];
          RD5=0;
          while(flag==0)
          {
            if(SSPIF==1)
            { flag=1; 
              RD5=1;            
              SSPIF=0;    
            }               
          }

         }       
      }

     settimedelay();
     settimedelay();
    

     if(RE2==0)
       {
         settimedelay();  
         settimedelay();
         settimedelay();                
         if(RE2==0)
          {setflag=0;}
       }
     
   }
   
}




void main()
{  
  initial(); 
  f=e=d=1;
  c=2;
  clockint();       //初始化时间----11:12:00       2007年11月12日完成——我的生日(JONCY)为了纪念生日,故让这个数字多显示一分钟
  while(1)
  {   
     RE0=1;
     RE1=1;
     RE2=1;
     RD7=1;     
     for(a=0;a<0x0a;a++)
      {  
        if(RD7==0)
        {
          settimedelay();                           
          if(RD7==0)
           { settime(); }     
           
        }
    
        flag=0;        
        SSPBUF=table[a];          
        RD0=0;   
        while(flag==0)
         {
           if(SSPIF==1)
            { flag=1; 
              RD0=1;
              SSPIF=0;         
            }               
        }
        RD6=1;
        delay500ms();
        RD6=0;
        delay500ms(); 
        RD6=1; 
       }     
    secbit0full();      
    secbit1full();
    minbit0full();    
    minbit1full();
    hourbit0full();
    hourbit1full();         

   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -