您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机AVR单片机万年历程序 正文
AVR单片机万年历程序

AVR单片机万年历程序

点击数:7784 次   录入时间:03-04 11:39:06   整理:http://www.55dianzi.com   AVR单片机

AVR单片机万年历程序

//***************************FileName:RTC.C************************//
//***************************ICCAVR V6.30编译**********************//

#include <io8535v.h>                   //寄存器定义文件
#include <macros.h>                    //使用到宏
#define uchar unsigned char            //数据类型定义
#define uint unsigned char             //数据类型定义
#define SD2303 0x64                    //SD2303器件IIC识别码


uchar Table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x76};
     //显示数据表 0    1    2     3   4    5    6    7    8    9    L    H  
uchar Data[4]={0,0,0,0};               //DS1722
uchar Enter_Flag;                      //确定
uchar F_Flag;                          //数据应答标志

void DelayMs(uint i)                   //延时函数1
{uchar j;
 for(;i!=0;i--)
  {for(j=2000;j!=0;j--) {;}}
}

void Display(uchar *p)                //显示函数
{uchar i,sel=0x00;
 for(i=0;i<16;i++)
  {PORTC=sel;
   PORTA=Table[p[i]];
   DelayMs(10);
   sel=sel<<1;
  }
}

  
void NOPNOP(uchar i)                   //延时函数2
{for(;i!=0;i--) NOP();}

void SetSCL(uchar i)                   //IIC时钟线SCL设置
{if(i==1) PORTB=PORTB|0x01;
 else     PORTB=PORTB&0xFE;}
 
void SetSDA(uchar i)                   //IIC数据线SDA设置
{if(i==1) PORTB=PORTB|0x02;
 else     PORTB=PORTB&0xFD;}
 
//SCL=PB^0;       SD2303时钟线  
//SDA=PB^1;       SD2303数据线 
//INTRB=PB^3;     SD2303中断线A
//INTRA=PB^2;     SD2303中断线B

void Start()                           //IIC总线开始信号
{SetSDA(1);
 SetSCL(1);
 NOPNOP(50);
 SetSDA(0);
 NOPNOP(50);
 SetSCL(0);
}

void Stop()                            //IIC总线停止信号
{SetSDA(0);             
 SetSCL(1);
 NOPNOP(50);
 SetSDA(1);
 NOPNOP(50);
 SetSCL(0);
}

void Ack()                             //单片机应答信号
{SetSDA(0);
 SetSCL(1);   
 NOPNOP(50);
 SetSCL(0);
 SetSDA(1);     
}

void Nack()                            //单片机非应答信号
{SetSDA(1);
 SetSCL(1);
 NOPNOP(50);
 SetSCL(0);
 SetSDA(0);
}

void Check_Ack()                       //器件应答信号检查
{SetSDA(1);
 SetSCL(1);
 F_Flag=0;
 DDRB=DDRB&0xFD; 
 if((PINB&0x02)==0)
   {SetSCL(0);
    NOPNOP(50);}
 else
    {F_Flag=1;
     SetSCL(0);
     NOPNOP(50);}
DDRB=DDRB|0x02;
}

void Write_Bit0()                      //向IIC总线写0
{SetSDA(0);
 SetSCL(1);
 NOPNOP(50);
 SetSCL(0);
}

void Write_Bit1()                      //向IIC总线写1
{SetSDA(1);
 SetSCL(1);
 NOPNOP(50);
 SetSCL(0);
 SetSDA(0);
}

void Write_Byte(uchar Data)            //向IIC总线写一字节数据
{uchar i;
 for(i=0;i<8;i++)
   {if((Data&0x80)>0)       
         Write_Bit1();
    else
         Write_Bit0();
    Data<<=1;                        
    }
}


uchar Read_Byte()                      //从IIC总线读一字节数据
{uchar nn=0xff;             
 uchar j;
 for (j=0;j<8;j++)
    {SetSDA(1);
     SetSCL(1);
     DDRB=DDRB&0xFB;
    
       if((PINB&0x02)==0)
        {nn<<=1;

[1] [2] [3] [4] [5]  下一页


本文关键字:单片机  程序  万年历  AVR单片机单片机-工控设备 - AVR单片机