关于单片机蓝桥杯——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地址里的值在显示出来就好了
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地址里的值在显示出来就好了
相关文章推荐
- 关于单片机蓝桥杯——EEPROM
- 关于单片机蓝桥杯——按键与矩阵按键
- 【蓝桥杯单片机组】| DS1302(官方驱动)+ 矩阵按键 + 数码管(改,解决数码管跳动的问题)
- 关于单片机蓝桥杯
- 【蓝桥杯单片机组】实时时钟RTC(DS1302)
- 关于蓝桥杯STC15单片机的18B20程序
- 基于proteus的51单片机仿真实例八、关于proteus常用操作的补充说明
- 【蓝桥杯单片机组】(4)Timer0/1 定时器
- 关于真真正正开始学习 单片机 四天以来的点滴收获
- 单片机==ds18B20_ds1302_时日周温(31)
- 关于郭天祥单片机书上第186页AT24C02操作
- 关于单片机机密的一些认识
- 关于低端单片机的轮询思想
- 浅谈单片机c语言模块化编程-附ds1302时钟芯片驱动程序
- 关于湖南工业大学“蓝桥杯”预选赛
- 关于NOR_FLASH的大小在单片机程序中的应用
- 关于单片机I/0口置低的引脚不能拉高的问题
- 关于单片机与上位机系统(VB或C++)在自动化控制领域的整合!
- 关于单片机的C语言编程基础知识(初学注意)
- 关于郭天祥51单片机教程视频课后题《同时用两个定时器控制蜂鸣器发声》