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

AVR单片机万年历程序

点击数:7784 次   录入时间:03-04 11:39:06   整理:http://www.55dianzi.com   AVR单片机
         nn=(nn&0xfe);                 
         SetSCL(0);}
     else 
        {nn<<=1;
         nn=(nn|0x01);                 
         SetSCL(0);}
    }
  DDRB=DDRB|0x02;
 return(nn);              
}

//****************************写N个字节子程序**********************//
//函数参数说明:
//Slave:IIC器件地址,如上文定义的SD2303
//Address:起始地址
//Array:读数据存放的数组
//Number:读取的字节数
void Write_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
{uchar k;
 writ:do                     //开始->写IIC器件地址->检查应答位
    {Start();
     Write_Byte(Slave);
     Check_Ack();
    }while(F_Flag==1);
   do
    {Write_Byte(Address<<4); //送起始地址->检查应答位
     Check_Ack();
    }while(F_Flag==1);
   for(k=0;k<Number;k++)     //写Number个数据
    {Write_Byte(*Array);
     Array++;
     Check_Ack();}           //检查应答位
   Stop();                 
}

//****************************写一个字节子程序**********************//
//函数参数说明:
//Slave:IIC器件地址,如上文定义的SD2303
//Address:IIC器件寄存器地址
//Data:数据
void Write_1byte(uchar Slave,uchar Address,uchar Data)
{writ:do                     //开始->写IIC器件地址->检查应答位
    {Start();
     Write_Byte(Slave);
     Check_Ack();
    }while(F_Flag==1);
   do
    {Write_Byte(Address<<4); //送起始地址->检查应答位
     Check_Ack();
    }while(F_Flag==1);
   Write_Byte(Data);
   Check_Ack();              //检查应答位
   Stop();                   //停止信号
}


//***************************读N个字节子程序***********************//
//函数参数说明:
//Slave:IIC器件地址,如上文定义的SD2303
//Address:起始地址
//Array:读数据存放的数组
//Number:读取的字节数
void Read_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
{uchar data0,x;
    //第一步:开始信号->写IIC器件地址->检查应答位
    do{Start();Write_Byte(Slave);Check_Ack();}while(F_Flag==1);
    //第二步:写起始地址->检查应答位
    do {Write_Byte(Address<<4);Check_Ack();}while(F_Flag==1);
    //第三步:开始信号->写IIC器件地址+1(表示读)->检查应答位
    do{Start();Write_Byte(Slave+1);Check_Ack();}while(F_Flag==1);
    //第四步:读N字节,每读完一字节发一个Ack应答,最后一字节发Nack
    for(x=0;x<Number;x++)
     {data0=Read_Byte();*Array=data0;Array++;
      if(x<(Number-1)) { Ack(); }}
    Nack();
    //第五步:发停止信号,结束读操作
    Stop();
}

//***************************按键处理程序**************************//
//说明:为简化程序设计,此程序不保证输入的时间数据的合理性。
void Key_Process(void)
{uchar temp1[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  //输入数据格式依次为年、月、日、星期、小时和分钟
 uchar temp2[7]={0,0,0,0,0,0,0,};
 uchar teMP3[3]={0,0,0xff};
  //输入数据格式依次为小时和分钟
 uchar Key;
 uchar *Flag;
 uchar i;
 Flag=temp1;
 if(PIND!=0xff)
  {DelayMs(20);                        //延时去抖
   if(PIND!=0xff)
   Key=PINB;
   if(Key==0xfe)                       //"时间设置"键按下
    {temp1[0]|=0x80;                   //年高位设置提示
     while(!Enter_Flag)                //直到按下确定键方停止
       {for(i=0;i<50;i++)
          Display(temp1);              //显示和延时
        Key=~PIND;
        switch(Key)
         {case 0x04:                   //"+"键处理
               (*Flag)++;
               if(((*Flag)&0x7f)==10) *Flag=0|0x80;
               break;
          case 0x08:                   //"-"键处理
                if(((*Flag)&0x7f)==0)    *Flag=10|0x80; 
                (*Flag)--;
                break;
          case 0x10:                   //"下一位"键处理
                Flag++;
                (*(Flag-1))&=0x7f;     //上一位去掉小数点显示

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


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