usTime) {
UCHAR8 j; LONG32 i;
for (i = (LONG32)10 * usTime; i > 0; i--) {
for(j = 110; j > 0; j--) { } } return; }
//main.c//
// Ds1302.c//
#include
#define uchar unsigned char #define uint unsigned int sbit rst=P1^2; sbit dat=P1^1; sbit clk=P1^0;
void ds1302_write(char comm,char dat1) { char temp,t; rst=0; clk=0;
rst=1;
temp=comm; for(t=0;t<8;t++) { if(temp&0x01)
dat=1;
else dat=0; clk=1;
temp=(temp>>1); clk=0;
}
temp=dat1; for(t=0;t<8;t++) {
if((temp&0x01)==1)//0000 0001
dat=1;
else dat=0; clk=1; temp=temp>>1; clk=0;
}
rst=0; }
uchar ds1302_read(char comm)
{ char temp,t; rst=0;
clk=0;
rst=1; temp=comm; for(t=0;t<8;t++) { if(temp&0x01)
dat=1;
else dat=0;
clk=1;temp=temp>>1;
clk=0;}
temp=0;//00000000 for(t=0;t<8;t++) { temp=temp>>1; if(dat==1)
temp=temp|0x80;
else temp=temp&0x7f; clk=1; clk=0;
} rst=0;
return temp; }
//Ds1302
.c//
#ifndef _DS1302_H__ #define _DS1302_H__
//DS1302管脚定义
sbit T_CLK=P0^5; //位定义1302芯片的接口,根据时钟芯片与单片机实际连接进行修改
sbit T_IO=P0^6; //位定义1302芯片的接口,根据时钟芯片与单片机实际连接进行修改
sbit T_RST=P0^7; //位定义1302芯片的接口,根据时钟芯片与单片机实际连接进行修改
unsigned char TableDs1302[7]={55,59, 23, 4, 3, 5, 11}; //初始化时时间日期设置,由使用者进行修 //秒 分 时 日 月 星期 年
//DS1302头文件中所有函数声明(7个) void Delay1Us(unsigned int k);
void Write1302(unsigned char ); //向1302写
void WriteSet1302(unsigned
char ,unsigned char );//根据命令字,向1302写一个字节数据
unsigned char Read1302(void);//从1302读一个字节数据
unsigned char
ReadSet1302(unsigned char Cmd);//根据命令字从1302读取一个字节数据 void InitDS1302(void);//初始化
1302 ,同时会将数组TableDs1302[]中初始值写入到时钟芯片内
void GetTime_DS1302(void);//获取1302的时间
void Delay1Us(unsigned int k) {
unsigned int i;
for(i=0;i } /***************************************************** 函数功能:向1302写一个字节数据 入口参数:x ***************************************************/ void Write1302(unsigned char dat) { unsigned char i; T_CLK=0; //拉 低T_CLK,为脉冲上升沿写入数据做好准备 Delay1Us(2); //稍微等待,使硬件做好准备 for(i=0;i<8;i++) //连续写8个二进制位数据 { T_IO=dat&0x01; //取出dat的第0位数据写入1302 Delay1Us(2); //稍微等待,使硬件做好准备 T_CLK=1; //上升沿写入数据 Delay1Us(2); //稍微等待,使硬件做好准备 T_CLK=0; //重新拉低T_CLK,形成脉冲 dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位 } } void WriteSet1302(unsigned char Cmd,unsigned char dat) { T_RST=0; //禁止 数据传递 T_CLK=0; //确保写数居前T_CLK被拉低 T_RST=1; //启动数据传输 Delay1Us(2); //稍微等 待,使硬件做好准备 Write1302(Cmd); //写入命令字 Write1302((dat/10<<4)|(dat)); //写数据 T_CLK=1; //将时钟电平置于已知状态 T_RST=0; //禁止数据传递 } unsigned char Read1302(void) { unsigned char i,dat; Delay1Us(2); //稍微 等待,使硬件做好准备 for(i=0;i<8;i++) //连续读8个二进制位数据 { dat>>=1; if(T_IO==1) // 如果读出的数据是1 dat|=0x80; //将1取出,写在dat的最高位 T_CLK=1; //将T_CLK置于高电平,为下降沿读出 Delay1Us(2); //稍微等待 T_CLK=0; // 拉低T_CLK,形成脉冲下降沿 Delay1Us(2); //稍微等待 } return dat; //将读 出的数据返回 } unsigned char ReadSet1302(unsigned char Cmd) { unsigned char temp,dat1,dat2; T_RST=0; //拉低T_RST T_CLK=0; //确保写数居前T_CLK被拉低 T_RST=1; //启动数据传输 Write1302(Cmd); //写入命令字 temp=Read1302(); //读出数据 T_CLK=1; // 将时钟电平置于已知状态 T_RST=0; //禁止数据传递 dat1=temp/16; //16进制转成BCD dat2=temp; temp=dat1*10+dat2; //转 换成10进制数字 return (temp); //将读出的数据返回 } /***************************************************** 函数功能: 1302进行初始化设置 ***************************************************/ void InitDS1302(void) { unsigned char i,add; add=0x80; WriteSet1302(0x8e,0x00); //允许写入 for(i=0;i<7;i++) { WriteSet1302(add,TableDs1 302[i]); add+=2; } WriteSet1302(0x90,0xa6); //写充电控制寄存器. WriteSet1302(0x8e,0x80); //禁止写入 } /***************************************************** 程序功能:获取DS1302时间 *****************************************************/ void GetTime_DS1302() { unsigned char i,add=0x81; WriteSet1302(0x8e,0x00); //允许向DS1302写入数据 for(i=0;i<7;i++) { TableDs1302[i]=ReadSet1302(add); //获得的数据已转换为十进制 add+=2; #ifndef USHORT16 WriteSet1302(0x8e,0x80); } //获取完一次时间,禁止向DS1302写入 数据,提高可靠 } #endif //OLED.h// #ifndef __OLED_H__ #define __OLED_H__ #include #define OLED_IMAGE_WHITE 1 #define OLED_IMAGE_BLACK 0 #define OLED_MAX_ROW_NUM 64 #define OLED_MAX_COLUMN_NUM 128 #ifndef VOID #define VOID void #endif /* VOID */ #ifndef UCHAR8 #define UCHAR8 unsigned char #endif /* UCHAR8 */ #ifndef CHAR8 #define CHAR8 char #endif /* CHAR8 */ #define USHORT16 unsigned short #endif /* USHORT16 */ #ifndef SHORT16 #define SHORT16 short #endif /* SHORT16 */ #ifndef ULONG32 #define ULONG32 unsigned long int #endif /* ULONG32 */ #ifndef LONG32 #define LONG32 long int #endif /* LONG32 */ #ifndef ULONG64 #define ULONG64 unsigned long long int #endif /* ULONG64 */ #ifndef LONG64 #define LONG64 long long int #endif /* LONG64 */ #ifndef TRUE #define TRUE 1 #endif /* TRUE */ 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库OLED显示时钟(4)在线全文阅读。
相关推荐: