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

📄 clock.c

📁 AVR单片机用C语言编写的包括时钟
💻 C
字号:
#include "iom64v.h"
#include "clock.h"

void Delay(int n)
{
   unsigned int i;
   i=0;
   while(i++ < n);
 }

/*void Init(void)
{
  DIR_OUT;
  SCL_OUT;
  SCL_1;
  Delay(5);
  SDA_1;
  Delay(5);
}

void Start(void)
{
  SDA_1;
  Delay(5);
  SCL_1;
  Delay(5);
  SDA_0;
  Delay(5);
  SCL_0;
  Delay(5);
}

void Stop(void)
{
  SDA_0;
  Delay(5);
  SCL_1;
  Delay(5);
  SDA_1;
  Delay(5);
}

unsigned char WriteByte(unsigned char WriteData)
{
  unsigned char i;
  for (i=0; i<8; i++)
  {
    if (((WriteData <<i) & 0x80))
    {
      SDA_1;
    }
    else
    {
      SDA_0;
    }
    Delay(5);
    SCL_1;
    Delay(5);
	SCL_0;
  }
  Delay(5);
  SDA_1;
  Delay(5);
  SCL_1;
  Delay(5);
  DIR_IN;
  if(SDA_IN==1)
  {
   DIR_OUT;
   SCL_0;
   return 0;
  } 
  else 
  {
   DIR_OUT;
   SCL_0;
   return 1;
  } 
  
}

unsigned char ReadByte(void)
{
  unsigned char i;
  unsigned char Retc;
  
  Retc=0;
  SDA_1;
  for (i=0; i<8; i++)
  {
    Delay(5);
    SCL_0;
    Delay(5);
	SCL_1;
    //DIR_IN;
	Delay(5);
	Retc=Retc<<1;
    if (SDA_IN == 0x01 )
    {
      Retc=Retc+1;
    }
    //DIR_OUT;
  }
  SCL_0;
  Delay(5);
  return(Retc);
}

void Ack(unsigned char a)
{
  if(a==0)
  SDA_1;
  else
  SDA_0;
  Delay(5);
  SCL_1;
  Delay(5);
  SCL_0;
  Delay(5);
}


unsigned char Read8Byte(unsigned char *TimeBuffer)
{
  unsigned char i;
  unsigned char ack;
  Start();
  ack=WriteByte(0xa0);
  if(ack==0)
  {
   return(0);
  } 
  ack=WriteByte(0x00);
  if(ack==0)
  return(0);
  
  Start();
  ack=WriteByte(0xa1);
  if(ack==0)
  return 0;
  for (i=0; i<7; i++)
  {
    TimeBuffer[i] = ReadByte();
    Ack(0);
  }
  TimeBuffer[i] = ReadByte();
  Ack(1);
  Stop();
 return 1;
}

unsigned char Write8Byte( unsigned char *WriteData)
{
  unsigned char i;
  unsigned char ack;
  Start();
  ack=WriteByte(0xa0);
  if(ack==0)
  return 0;
  
  ack=WriteByte(0x00);
  if(ack==0)
  return(0);
  
  
  for(i=0;i<8;i++)
  {
   ack=WriteByte(WriteData[i]);
   if(ack==0)
   return(0);
   
  } 
  
  Stop();
  return(1);
}

void main12(void)
{
 unsigned char TimeB[9];
 unsigned char i;
 SP=0x10ff;
 WDTCR=0x00;
 SREG=0x00;
 TimeB[1]=9;
 TimeB[0]=0xff;
 TimeB[3]=0x05;
 TimeB[4]=4;
 TimeB[5]=6;
 TimeB[2]=2;
 TimeB[6]=6;
 TimeB[7]=2;
 Init();
 Write8Byte(TimeB);
 
 for(i=0;i<8;i++)
 {
  TimeB[i]=i;
 }
 Read8Byte(TimeB);

}*/
void Init_TWI(void)
{
 TWBR=24;
 
}

unsigned char Init_Clock(void)
{
 if(TWIWriteOneByte(0x0c,0x00)==0)
  return 0;
  Delay(5);
 if(TWIWriteOneByte(0x05,0x07)==0)
  return 0;
  Delay(5);
 if(TWIWriteOneByte(0x05,0x0f)==0)
  return 0;
  Delay(5);
 if(TWIWriteOneByte(0xcb,0x08)==0)
  return 0;
  
 return 1; 
}

unsigned char SetTime(void)
{
 unsigned char TBuffer[8];
 unsigned char F,m;
 TBuffer[0]=0x80;
 TBuffer[1]=0;//(unsigned char)syst_parm[19];
 TBuffer[2]=0 ;
 F=(unsigned char)syst_parm[24];
 F=(((unsigned char)(F/10))*0x10)+(F-((unsigned char) F/10)*10); 
 TBuffer[3]=F;
 F=(unsigned char)syst_parm[23];
 F=(((unsigned char)(F/10))*0x10)+(F-((unsigned char) F/10)*10);
 TBuffer[4]=F;
 F=(unsigned char)syst_parm[22];
 F=(((unsigned char)(F/10))*0x10)+(F-((unsigned char) F/10)*10);
 m=((unsigned char)syst_parm[20]%4)<<6;
 F=F|m;
 TBuffer[5]=F;
 F=(unsigned char)syst_parm[21];
 F=((unsigned char)(F/10)*0x10)+(F-((unsigned char) F/10)*10);
 TBuffer[6]=F;
 TBuffer[7]=0;
 
 if(TWIWriteOneByte(0x80,0x00)==0)
  return 0;
 Delay(5);
 if(TWIWriteByte(TBuffer)==0)
   return 0;
   Delay(5);
 //if(TWIWriteOneByte(0x05,0x07)==0)
 // return 0;
 // Delay(5);
// if(TWIWriteOneByte(0x05,0x0f)==0)
//  return 0;
 // Delay(5);
// if(TWIWriteOneByte(0xcb,0x08)==0)
//  return 0; 
  // Delay(5);
 if(TWIWriteOneByte(0x00,0x00)==0)
  return 0; 
  Delay(5);
  return 1;
}

unsigned char ReadTime(unsigned char *rTimBuff)
{
  
 if(TWIReadBytes(rTimBuff)==0)
  return 0;
  
  return 1;
}
unsigned char TWIWriteOneByte(unsigned char wData,unsigned char wAddr)
{
   
 TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
 while (!(TWCR & (1<<TWINT)));
 if ((TWSR & 0xF8) != START)
 return 0;

 TWDR = 0xa0;
 TWCR = (1<<TWINT) | (1<<TWEN);
 while (!(TWCR & (1<<TWINT)));
 if ((TWSR & 0xF8) != MT_SLA_ACK)
  return 0;
  
 TWDR = wAddr;
 TWCR = (1<<TWINT) | (1<<TWEN);
 while (!(TWCR & (1<<TWINT)));
 if ((TWSR & 0xF8) != MT_DATA_ACK)
 return 0;

 
  TWDR = wData;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  if ((TWSR & 0xF8) != MT_DATA_ACK)
  return 0;
 

 TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);

 return 1;
  
}

unsigned char TWIWriteByte(unsigned char *Bdata)
{

 unsigned char i;
 
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != START)
return 0;

TWDR = 0xa0;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_SLA_ACK)
 return 0;
  
TWDR = 0x00;
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != MT_DATA_ACK)
return 0;

for(i=0;i<7;i++)
{
 TWDR = Bdata[i];
 TWCR = (1<<TWINT) | (1<<TWEN);
 while (!(TWCR & (1<<TWINT)));
 if ((TWSR & 0xF8) != MT_DATA_ACK)
 return i;
}

TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);

return 1;
}

unsigned char TWIReadBytes(unsigned char *rBytes)
{
  unsigned char k;
  
  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  if ((TWSR & 0xF8) != START)
  return 0;
  
  TWDR = 0xa0;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  if ((TWSR & 0xF8) != MT_SLA_ACK)
  return 0;
  
  TWDR = 0x00;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  if ((TWSR & 0xF8) != MT_DATA_ACK)
  return 0;
  
  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
  
  Delay(50);
  
  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  if ((TWSR & 0xF8) != START)
  return 0;
  
  TWDR = 0xa1;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  if ((TWSR & 0xF8) != MR_SLA_ACK)
  return 0;
    
  for(k=0;k<7;k++)
  {
   TWCR=0xc4;
   while (!(TWCR & (1<<TWINT)));
   if ((TWSR & 0xF8) !=  MR_DATA_ACK)
   return k;
   else
   rBytes[k]=TWDR;
  }
   TWCR=0x84;
   while (!(TWCR & (1<<TWINT)));
   if ((TWSR & 0xF8) != 0x58)
   return k;
   else
   rBytes[k]=TWDR;
   
  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
  return 1;
}

⌨️ 快捷键说明

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