LCD1602读取DS12C887A的数据

DS12C887是一个内置电池并行接口日历时钟模块,它由内部控制的寄存器,日期时间寄存器 。具有时分秒,年月日星期等计数。DS_CS 片选端,低电平有效

DS_AS 地址输入端

DS_RW 读写输入端

DS_DS数据选通端

读取DS12C887数据函数

unsigned char DS12C887read(unsigned char add)
{
unsigned char z;
DS_CS = 0; //片选拉低,片选在低电平有效
DS_DS = 1; //读信号无效,将DS拉高
DS_RW = 1; //写信号有效,将RW拉高
DS_AS = 1; //写地址,先将AS拉高

DSbus = add; //将地址送到总线
DS_AS = 0; //AS拉低,将地址信息锁存到芯片中
DS_DS = 0; //拉低DS,使读有效
DSbus = 0xff; //数据要输到单片机,首先要给单片机写1,
z = DSbus; //再从IO口中读取数据

DS_DS = 1; //将DS拉高,使读操作失效
DS_AS = 1; //拉高AS,清除地址信息
DS_CS = 1; //片选拉高
return z;
}

往DS12C887里写内容

void DS12C887write(unsigned char add,unsigned char Date)
{
DS_CS = 0; //片选拉低,低电平有效
DS_DS = 1; //读信号失效,拉高DS
DS_RW = 1; //写信号有效,拉高RW
DS_AS = 1; //写地址,拉高AS
DSbus = add; //将地址送到总线

DS_AS = 0; //将地址信息锁存到芯片中
DS_RW = 0; //数据写入要在RW的上跳沿,先拉低RW

DSbus = Date; //写入数据
DS_RW = 1; //在拉高RW,完成写入
DS_AS = 1; //拉高AS,清除地址信息
DS_CS = 1; //拉高片选

}

DS12C887初始化函数

void DS12C887LCDinit()
{
DS_AS = 0;
DS_DS = 0;
DS_RW = 0;

DS12C887write(0x0a,0x20); //寄存器A功能设置,开启时钟振荡
DS12C887write(0x0b,0x06); //寄存器B功能设置,不开启闹钟中断功能,数据模式为二进制,24h

//给DS12C887赋值
DS12C887write(0x04,0x09); //08时
DS12C887write(0x02,0x00); //00分
DS12C887write(0x00,0x00); //00秒
DS12C887write(0x09,18); //18年
DS12C887write(0x08,1); //1月
DS12C887write(0x07,22); //22日
DS12C887write(0X06,1); //星期一
}

往液晶屏填写”分钟

LCD_Writecom(0x80+0x40);
Min = DS12C887read(2);
LCD_WriteDat(Min/10+0x30);   //二进制转成ASII码
LCD_WriteDat(Min%10+0x30);

地址对应设置
0 秒
1 秒闹钟
2 分钟
3 分闹钟
4 时钟
5 时闹钟
6 星期
7 日
8 月
9 年
10 寄存器A 常用DS12C887write(0x0a,0x20) 开启晶振计时
11 寄存器B DS12C887write(0x0b,0x06) 关闭闹钟中断,数据模式为二进制,24h
12 寄存器C
13 寄存器D

标签: 单片机