📄 ds1302.txt
字号:
#include "reg51.h"
sbit t_clk=P1^0; /*实时时钟时钟线引脚 */
sbit t_io=P1^1; /*实时时钟数据线引脚 */
sbit t_rst=P1^7; /*实时时钟复位线引脚 */
sbit BIT7=ACC^7; /*位寻址寄存器定义 */
sbit BIT0=ACC^0; /*位寻址寄存器定义 */
unsigned data second,mintue,hour,dat,month,week,year;
//unsigned char code str1[]="上"
//unsigned char inittime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};//秒 分钟 小时 日 月 年 星期 初始化后设置为:04年12月2日星期4 0点0分0秒
//unsigned char ctime[7]={0x00,0x00,0x00,0x02,0x12,0x04,0x04};//秒 分钟 小时 日 月 年 星期 初始化后设置为:04年12月2日星期4 0点0分0秒
//unsigned char timeee=20;
main()
{
void wr_1302(unsigned char add,unsigned char ucda);
unsigned char re_1302(unsigned char add);
void set1302(unsigned char *pda);
void get_1302(unsigned char curtime[]);
while(1)
{
Put12864Number(32,0,1,re_1302(0x8d)/10+0x32); //显示年
Put12864Number(33,0,1,re_1302(0x8d)%10+0x32);
Put12864Number(35,0,1,re_1302(0x89)/10+0x32); //显示月
Put12864Number(36,0,1,re_1302(0x89)%10+0x32);
Put12864Number(38,0,1,re_1302(0x87)/10+0x32); //显示日
Put12864Number(39,0,1,re_1302(0x87)%10+0x32);
Put12864Number(41,0,1,re_1302(0x85)/10+0x32); //显示小时
Put12864Number(42,0,1,re_1302(0x85)%10+0x32);
Put12864Number(44,0,1,re_1302(0x83)/10+0x32); //显示分
Put12864Number(45,0,1,re_1302(0x83)%10+0x32);
Put12864Number(47,0,1,re_1302(0x81)/10+0x32); //显示秒
Put12864Number(48,0,1,re_1302(0x81)%10+0x32);
Put12864Number(50,0,1,re_1302(0x8b)%10+0x32); //显示星期
}
}
/************************DS1302读写程序************************/
void inputbyte(unsigned char ucda) //八位数据写入函数
{
unsigned char i;
ACC=ucda; //将要写入的数放入ACC
t_rst=1; //启动数据传送
for(i=8;i>0;i--) //循环八次,写入八位数据,从低位到高位
{
t_io=BIT0; //将ACC^0的值赋给时钟数据线
t_clk=0;
t_clk=1; //在时钟线的上升沿写入一位数据
ACC=ACC>>1; //将高一位数据移至ACC^0
}
}
unsigned char outputbyte(void) //八位数据读出函数
{
unsigned char i;
t_rst=1; //启动数据传送
for(i=8;i>0;i--) //读出八位数据,从低位到高位
{
ACC=ACC>>1; //将前一下降沿读出的数据右移一位,从而该次读出的数放入ACC^7
t_io=1; //P1口输入之前置1
t_clk=1;
t_clk=0; //时钟线下降沿读出一位数据
BIT7=t_io;
}
return(ACC);
}
void wr_1302(unsigned char add,unsigned char ucda) //将指令或数据写入对应寄存器
{
t_rst=0;
t_clk=0;
t_rst=1;
inputbyte(add);
inputbyte(ucda);
t_rst=0;
t_io=1;
}
unsigned char re_1302(unsigned char add) //读出对应寄存器内容
{
unsigned char ucda,dat1,dat2;
t_rst=0;
t_clk=0;
t_rst=1;
inputbyte(add);
ucda=outputbyte();
t_rst=0;
dat1=ucda;
dat2=dat1/16; //数据进制转换
dat1=dat1%16; //十六进制转十进制
dat1=dat1+dat2*10;
return(dat1);
}
/*void set1302(unsigned char *pda) //设置时间初值
{
unsigned char i;
unsigned char add=0x80;
wr_1302(0x8e,0x00); //将控制寄存器值设为零,最高位WP=0允许写
for(i=7;i>0;i--) //将七个时间初值写入对应寄存器
{
wr_1302(add,*pda); //写对应时钟寄存器的值
pda++;
add+=2;
}
wr_1302(0x8e,0x80); //写保护,防止干扰影响时间值
}
void get_1302(unsigned char curtime[]) //读取当前时间值
{
unsigned char i,j;
unsigned char add=0x81;
bdata unsigned char sec;
for(i=0;i<7;i++)
{
curtime[i]=re_1302(add); //读对应时钟寄存器的值
sec=curtime[i];
j=sec>>4; //将BCD码转化为对应十进制数
j*=10;
sec=sec&0x0f;
sec+=j;
curtime[i]=sec;
add+=2;
}
}*/
/*void Init1302(void)
{
wr_1302(0x8e,0x00); //禁止写保护
wr_1302(0x90,0xa5);
wr_1302(0x80,0x00); //秒初始化
wr_1302(0x82,0x40); //分钟初始化
wr_1302(0x84,0x08); //时初始化
wr_1302(0x86,0x09); //日初始化
wr_1302(0x88,0x03); //月初始化
wr_1302(0x8a,0x01); //星期初始化
wr_1302(0x8c,0x09); //年初始化
wr_1302(0x8e,0x80); //允许写保护
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -