您的位置:首页 > 其它

关于单片机蓝桥杯——ds1302

2018-03-15 13:52 851 查看
    对于ds1802,我们先创建几个数组:
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf9,0x80,0x90,0xbf};//数码管显示0,1,2,3,4,5,6,7,8,9,—
uchar code read[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8f,0x91};//ds1302的读地址
uchar code write[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90};//ds1302的写地址
uchar  time[]={0x59,0x54,0x21,0x17,0x02,0x06,0x18};      //我们打算写进去的时间,依次是秒,分,钟,年,周,月,日
  对于蓝桥杯给的驱动,我们需要再添加两个函数,一是ds1302的初始配置函数——ds1302_conflg()二是读取函数——ds1302_read()

 void ds1302_conflg(){    uchar i;
    Write_Ds1302_Byte(0x8e,0x00)//读入地址,关闭写保护    for(i=0;i<7;i++)
{    Write_Ds1302_Byte(write[i],time[i]); //往地址写入时间}  Write_Ds1302_Byte(0x8e,0x80)//读入地址,开启写保护
}ds1302_read()

{
    uchar i;

      for(i=0;i<7;i++)

{
       time[i]= Ds1302_Single_Byte_Read[read[i]]

}
}
最后,我们通过一个show函数将读取出来的时间显示在数码管上
void showtime()
{
display(0x80,time[0]&0x0f);//读取time[0]的低位 即9
delay(500);
display(0x40,time[0]/16);//读取time[0]的高位 即5
delay(500);
display(0x20,10);
delay(500);
display(0x10,time[1]&0x0f);
delay(500);
display(0x08,time[1]/16);
delay(500);
display(0x04,10);
delay(500);
display(0x02,time[2]&0x0f);
delay(500);
display(0x01,time[2]/16);
delay(500);

}
然后我们在主函数里不停得去读取ds1302地址里的值在显示出来就好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: