#include "reg52.h"
#include "intrins.h"//头文件
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
sbit sda=P1^0;//;模拟I2C 数据传送位
sbit scl=P1^2;//;模拟I2C 时钟控制状态标志
sbit RS=P3^5;//LCD1602定义I/O的硬件接口
sbit E=P3^4;//LCD1602定义I/O的硬件接口
sbit A_B=P3^2;//74HC164接口
sbit CP=P3^3;//74HC164接口
uchar Hours;//定义小时
uchar Minutes;//定义分钟
uchar Seconds;//定义秒
uchar Year;//定义年
uchar Month;//定义月
uchar Date;//定义日期
uchar Weeks;//定义星期
uchar DispBuf[16]; //6字节的显示缓冲区
uchar code disp_tab[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char char_char_1[]={" www.aoyux.com "};//定义字符串
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void delay_2(uint z)//1ms延时
{
uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
}
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void delay()//5us延时
{
_nop_();
_nop_();
_nop_();
}
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void write_Directive(uchar a)//写指令
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=a;
temp&=0x80;
if(temp==0x80)
A_B=1;
else
A_B=0;
a=a<<1;
delay();
CP=0;
delay();
CP=1;
delay();
CP=0;
}
RS=0;
delay_2(3);
E=0;
delay_2(3);
E=1;
delay_2(3);
E=0;
delay_2(3);
}
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void write_Data(uchar a)//写数据
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=a;
temp&=0x80;
if(temp==0x80)
A_B=1;
else
A_B=0;
a=a<<1;
delay();
CP=0;
delay();
CP=1;
delay();
}
RS=1;
delay_2(3);
E=0;
delay_2(3);
E=1;
delay_2(3);
E=0;
delay_2(3);
}
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void star()//开始
{
sda=1;
delay();//5us延时
scl=1;
delay();//5us延时
sda=0;
delay();//5us延时
}
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void stop()//停止
{
sda=0;
delay();//5us延时
scl=1;
delay();//5us延时
sda=1;
delay();//5us延时
}
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void ack()//应答
{
uchar z=0;
while((sda==1)&&(z<50))z++;//条件判断, sda=1,则没有应答。如果没有应答则延时:z<50,z++;后返回
scl=0;
delay();//5us延时
}
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
///写一个数据函数
//器件写地址 slave_write_address
//字节地址 byte_address
//待写入数据 data_data
void write(uchar slave_write_address,uchar byte_address,uchar data_data)//写一个数据
{
uchar temp,temp1,i,ii;
star();//开始
for(ii=0;ii<3;ii++)//根据 24CXX文档资料,和时序图,按顺序送:器件写地址,字节地址,数据
{
if(ii==0)
{
temp=slave_write_address;//送 器件写地址
temp1=slave_write_address;
}
else if(ii==1)
{
temp=byte_address;//送 字节地址
temp1=byte_address;
}
else if(ii==2)
{
temp=data_data;//送 数据
temp1=data_data;
}
for(i=0;i<8;i++)
{
scl=0;
delay();//5us延时
temp=temp1;
temp=temp&0x80;// 相 与 后,把不相关的位清零
if(temp==0x80)//根据前面 相 与 后,判断 temp是否等于0x80,是则该位为 1
sda=1;
else
sda=0;
delay();//5us延时
scl=1;
delay();//5us延时
scl=0;
delay();//5us延时
temp1=temp1<<1;//向左移出1位
}
sda=1;
delay();//5us延时
scl=1;
delay();//5us延时
ack();
}
stop();//停止
}
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
///读一个数据函数
//器件写地址 slave_write_address
//器件读地址 slave_read_address
//字节地址 byte_address
//读出的数据 data_data
read(uchar slave_write_address,uchar byte_address,uchar slave_read_address)//读一个数据
{
uchar temp,temp1,i,ii,x,data_data;
star();//开始
for(ii=0;ii<3;ii++)//根据 24CXX文档资料,和时序图,按顺序送:器件写地址,字节地址,器件读地址
{
if(ii==0)
{
temp=slave_write_address;//送 器件写地址
temp1=slave_write_address;
}
else if(ii==1)
{
temp=byte_address;//送 字节地址
temp1=byte_address;
}
else if(ii==2)
{
star();//开始
temp=slave_read_address;//送 器件读地址
temp1=slave_read_address;
}
for(i=0;i<8;i++)//开始读数据
{
scl=0;
delay();//5us延时
temp=temp1;
temp=temp&0x80;// 相 与 后,把不相关的位清零
if(temp==0x80)//根据前面 相 与 后,判断 temp是否等于0x80,是则该位为 1
sda=1;
else
sda=0;
delay();//5us延时
scl=1;
delay();//5us延时
scl=0;
delay();//5us延时
temp1=temp1<<1;//向左移出1位
}
sda=1;
delay();//5us延时
scl=1;
delay();//5us延时
ack();//应答
}
for(x=0;x<8;x++)
{
data_data=data_data<<1;//向左移入1位
sda=1;
delay();//5us延时
scl=0;
delay();//5us延时
scl=1;
delay();//5us延时
if(sda==1)//判断 数据线是否是高电平
data_data|=0x01;//把读到的数据 或 0X01
//else
//data_data|=0x00;
}
ack();//应答
stop();//停止
return data_data;//返回读到的数据
}
/************************************************************************************************
* *
* *
* *
************************************************************************************************/
void init()//初始化
{
// uchar i;
CP=1;
A_B=1;
Hours=0;
Minutes=0;
Seconds=0;
Year=0;
Month=0;
Date=0;
Weeks=0;
delay_2(15);
write_Directive(0x38);
delay_2(5);
write_Directive(0x38);
delay_2(5);
write_Directive
没有合适的资源?快使用搜索试试~ 我知道了~
DS1307+LCD1602程序(C语言源码系统仿真实例).rar
共25个文件
obj:4个
lst:4个
c:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 52 浏览量
2023-05-02
17:52:09
上传
评论
收藏 52KB RAR 举报
温馨提示
C语言源码系统仿真实例免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
DS1307+LCD1602程序(C语言源码系统仿真实例).rar (25个子文件)
2、DS1307+LCD1602程序
51&DS1307
DS1307_uvproj.bak 13KB
DS1307_uvopt.bak 66KB
DS1307.LST 8KB
DS1307.uvgui.Administrator 86KB
1602.OBJ 11KB
STARTUP.LST 14KB
DS1307.uvopt 7KB
DS1307.plg 188B
DS1307 19KB
main.OBJ 3KB
1307.c 13KB
1602.c 7KB
STARTUP.A51 6KB
DS1307.hex 4KB
main.LST 1KB
DS1307.uvproj 14KB
DS1307.h 464B
DS1307.C 3KB
DS1307.OBJ 8KB
STARTUP.OBJ 749B
DS1307.lnp 86B
DS1307.M51 21KB
1602.LST 11KB
1602.h 520B
main.c 214B
共 25 条
- 1
资源评论
荣华富贵8
- 粉丝: 217
- 资源: 7653
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功