77范文网 - 专业文章范例文档资料分享平台

OLED显示时钟(4)

来源:网络收集 时间:2019-08-28 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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 //#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)在线全文阅读。

OLED显示时钟(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/688187.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: