ds1302实时时钟c程序加仿真原理图Word文档格式.docx
- 文档编号:13719930
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:25
- 大小:96.98KB
ds1302实时时钟c程序加仿真原理图Word文档格式.docx
《ds1302实时时钟c程序加仿真原理图Word文档格式.docx》由会员分享,可在线阅读,更多相关《ds1302实时时钟c程序加仿真原理图Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
lcden=1;
lcden=0;
voidwrite_data(uchardate)
lcdrs=1;
P0=date;
voidwrite_lcd(ucharx,char*cha)
{ucharlength,i=0;
write_com(x);
for(length=0;
cha[length]!
=0;
length++);
for(i=0;
i<
length;
i++)
{
write_data(cha[i]);
delay(5);
}
voidwrite_bcd(ucharcha)
ucharch1,ch2;
ch1=(cha&
0x0f)+'
0'
;
ch2=((cha>
>
4)&
write_data(ch2);
write_data(ch1);
voidwrite_fd(floatt)//显示float型函数
{uchars1,s2,s3,s4;
uinttt;
tt=t*100;
s1=tt/1000;
s1+=0x30;
s2=tt%1000/100;
s2+=0x30;
s3=tt%1000%100/10;
s3+=0x30;
s4=tt%10;
s4+=0x30;
write_data(s1);
write_data(s2);
write_data(46);
write_data(s3);
write_data(s4);
}
voidinit()
write_com(0x38);
//设置16*2显示
write_com(0x0c);
//设置开显示,不显示光标
write_com(0x06);
//写一个字符后地址指针加1
write_com(0x01);
//显示清0,数据指针清0
}
#endif
/**************************************************************************
THEREALTIMERDS1302DRIVERLIB
COPYRIGHT(c)2010BYZYK.
--ALLRIGHTSRESERVED--
FileName:
DS1302.h
Author:
ZHANGYUANKE
Created:
2010/06/21
Modified:
NO
Revision:
1.0
***************************************************************************/
#ifndef_DS1302_2010_06_21_
#define_DS1302_2010_06_21_
sbitSCLK=P1^6;
//实时时钟时钟线引脚
sbitDIO=P1^7;
//实时时钟数据线引脚
sbitCE=P1^5;
//实时时钟复位线引脚
sbitACC0=ACC^0;
sbitACC7=ACC^7;
charsec,min,hour,day,mon,week,year;
char*tab[7]={"
Sun"
"
Mon"
Tue"
Wed"
Thu"
Fri"
Sat"
};
voidwrite_1302(ucharadd,uchardat)
uchari;
ACC=add;
CE=0;
SCLK=0;
CE=1;
8;
DIO=ACC0;
SCLK=1;
SCLK=0;
ACC>
=1;
ACC=dat;
for(i=0;
ucharread_1302(ucharadd)
for(i=8;
i>
i--)//为什么不能for(i=0;
i++)又为什么用我写的函数不能改时间!
!
i--)
{ACC>
ACC7=DIO;
return(ACC);
}
voidinputbyte(uchard)//实时时钟写入一字节(内部函数)
{
ACC=d;
DIO=ACC0;
//相当于汇编中的RRC
SCLK=1;
ACC>
ucharoutputbyte()//实时时钟读取一字节(内部函数)
i>
i--)
ACC=ACC>
1;
//相当于汇编中的RRC
ACC7=DIO;
voidwrite_1302(ucharadd,uchardat)//ucAddr:
DS1302地址,ucData:
要写的数据
inputbyte(add);
//地址,命令
inputbyte(dat);
//写1Byte数据
ucharread_1302(ucharadd)//读取DS1302某地址的数据
uchardat;
//地址,命令
dat=outputbyte();
//读1Byte数据
return(dat);
voidsetprotect(bitflag)
if(flag)
write_1302(0x8e,0x80);
else
write_1302(0x8e,0x00);
voidgettime_1302()
sec=read_1302(0x81);
min=read_1302(0x83);
hour=read_1302(0x85);
day=read_1302(0x87);
mon=read_1302(0x89);
week=read_1302(0x8b);
year=read_1302(0x8d);
voidstop_time(bitflag)//是否将时钟停止
unsignedchardat;
dat=read_1302(0x81);
setprotect(0);
write_1302(0x80,dat|0x80);
write_1302(0x80,dat&
0x7F);
voidinit_1302()
ucharsecond=read_1302(0x81);
if(second&
0x80)
write_1302(0x80,0);
/********************************************************************************
voidBurstWrite1302(unsignedchar*pWClock)//往DS1302写入时钟数据(多字节方式)
unsignedchari;
Write1302(0x8e,0x00);
//控制命令,WP=0,写操作?
DS1302_RST=0;
DS1302_CLK=0;
DS1302_RST=1;
DS1302InputByte(0xbe);
//0xbe:
时钟多字节写命令
for(i=8;
i--)//8Byte=7Byte时钟数据+1Byte控制
DS1302InputByte(*pWClock);
pWClock++;
DS1302_CLK=1;
voidBurstRead1302(unsignedchar*pRClock)//读取DS1302时钟数据(时钟多字节方式)
DS1302InputByte(0xbf);
//0xbf:
时钟多字节读命令
for(i=8;
i--)
*pRClock=DS1302OutputByte();
//读1Byte数据
pRClock++;
********************************************************************************/
#endif
#include"
1602.h"
DS1302.h"
sbitset=P3^2;
sbitjia1=P3^0;
sbitjian1=P3^1;
ucharslect=0;
ucharbcdtoasc(ucharcha)
return((cha/16)*10+(cha%16));
ucharasctobcd(ucharcha)
return((cha/10)*16+(cha%10));
voiddisp_week()
{switch(week)
{
case1:
{write_lcd(0xcd,tab[0]);
break;
case2:
{write_lcd(0xcd,tab[1]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ds1302 实时 时钟 程序 仿真 原理图