1302芯片
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit SCL = P3^6; //定义时钟信号接口
sbit IO = P3^4; //定义数据信号接口
sbit RST = P3^5; //定义复位信号接口
sbit ACC0 = ACC^0; //ACC寄存器的最低位
sbit ACC7 = ACC^7; //ACC寄存器的最高位
uchar ds1,ds2,time;
uchar curttime[7];
//数码管显示字符表
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
//初始化时间表
uchar code InitTime[] = {0x01,0x20,0x02,0x16,0x10,0x06,0x10, };
//段选表
uchar code tabwcon[] ={0x07,0x06,0x05,0x04,
0x03,0x02,0x01,0x00};
//读取时间的地址表
uchar code read_time_address[7]={
0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//写入时间的地址表
code uchar write_rtc_address[7]={
0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
//数码管显示延时函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=190;y>0;y--);
{
}
}
}
//发送一个字节
void SendByte(uchar date)
{
uchar i;
ACC = date; //将date变量存入ACC中
for (i = 8; i >0; i--)
{
IO = ACC0;
SCL = 1; //时钟信号线拉高发送一位数据
SCL = 0; //发送完一位数据后拉低时钟线
ACC = ACC>>1; //将ACC的D1位移到D0位准备发送
}
}
//接收一个字节
uchar AccByte(void)
{
uchar i;
for (i = 8; i >0; i--)
{
ACC = ACC>>1; //向右一位准备接受总线上的数据
ACC7 = IO; //从总线上接收数据并存到ACC7中
SCL = 1; //从总线上接收到一位数据
SCL = 0; //接收完一位数据后拉低时钟线
}
return (ACC); //返回接收到的数据 ACC
}
//写一个字节注意与读一个字节的区别
void WriteByte(uchar add, uchar date)
{
RST = 0; SCL = 0; RST = 1; //初始化开启丛机内部定时器电路SendByte(add); //发送将写入数据的地址
SendByte(date); //向预定地址写入数据 //拉高时钟线为下一次读取的初始化
SCL = 1; RST = 0; //屏蔽任何输入输出释放总线
}
//读一个字节注意与发一个字节的区别
uchar ReadByte(uchar add)
{
uchar date;
RST = 0; SCL = 0; RST = 1; //初始化开启丛机内部定时器电路
SendByte(add); //发送将读数据的地址
date = AccByte(); //将接收到的数据赋予rdate //拉高时钟线为下一次读取的初始化
SCL = 1; RST = 0; //屏蔽任何输入输出
return (date); //返回读到的数据
}
//时钟寄存器多字节写
/*void BurstW1302T(uchar *p) //P寄存器地址指针
{
uint i;
WriteByte(0X8e,0x00); //写保护控制命令 WP = 0(开启写命令)写操作
RST = 0; SCL = 0; RST = 1; //初始化
SendByte(0xbe); //时钟多字节写命令(时钟突发访问)
// 向地址逐一发送数据
for (i = 0; i < 8; i++)
{
SendByte(*p);
p++;
}
SCL = 1; //拉高时钟线为下一次读取的初始化
RST = 0; //主机释放总线
}
//时钟寄存器多字节读读数据的时候不用写保护控制命令
void BurstR1302T(uchar *p)
{
uint i;
RST = 0; SCL = 0; RST = 1; //初始化
SendByte(0xbf); //时钟多字节读命令(时钟突发访问)
for (i = 0; i < 8; i++)
{
*p = AccByte(); //接收数据并将其存到P指针所指向的地址
p++;
}
SCL = 1; RST = 0; //同上
}
//RAM寄存器多字节写(道理同时钟数据多字节读写一样)
void BurstW1302R(uchar *p)
{
uint i;
WriteByte(0X8e,0x00);
RST = 0; SCL = 0; RST = 1;