找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3045|回复: 13
收起左侧

为什么我的1302万年历不走时间

[复制链接]
ID:537608 发表于 2019-5-16 10:47 来自手机 | 显示全部楼层 |阅读模式
30黑币
我用的是ds1302+stc15+1602,单片机运行后,1602只显示一个初始的时间,静止不动,我把rst的引线拔掉后,1602显示??,再把1602插上后时间刷新,并且增加了拔掉的这一段时间,求大神指教

回复

使用道具 举报

ID:512205 发表于 2019-5-16 11:38 | 显示全部楼层
如果要帮你查看问题,你就要吧程序贴出来,如果是要程序,你搜一下,论坛有一堆可参考
回复

使用道具 举报

ID:96682 发表于 2019-5-16 12:05 | 显示全部楼层
首先得确定程序是以 STC 15 编写的么
回复

使用道具 举报

ID:537608 发表于 2019-5-16 12:30 | 显示全部楼层
这是我的程序
回复

使用道具 举报

ID:537608 发表于 2019-5-16 12:31 | 显示全部楼层
#include        "15W4KxxS4.H"
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit io=P1^6;
sbit sck=P1^5;
sbit rst=P2^5;
sbit rs=P2^4;      
sbit rw=P2^3;     
sbit en=P2^1;        
uchar writetime[]={19,1,5, 15, 9, 15, 0};
uchar writeadd[7]={0x8c, 0x8a, 0x88,0x86, 0x84,0x82, 0x80};//ds1302D′μ?μ??·
uchar readadd[7]={0x8d,0x8b, 0x89, 0x87,0x85,0x83, 0x81};


//************************************************//
void delay(uchar ms)
{
        uchar x,y;
for(x=ms; x>0; x--)
for(y=110;y>0;y--);
}

//************************************************//

       
void ds1302_write_byte(uchar date)//
{
        uchar i;
for(i=0;i<8;i++)
        {
sck=0;
io=date&0x01;//
date=date>>1;
sck=1;}
}
//*********************************************//
void ds1302_write(uchar add,uchar date)/
{
rst=0;_nop_();//????3ì
sck=0;_nop_();
rst=1;_nop_();
ds1302_write_byte(add);
ds1302_write_byte(date);
rst=0;_nop_();
sck=0;_nop_();
io=1; sck=1;
}
//*****************************************//
uchar ds1302_read(uchar add)
{
uchar i,date;
rst=0;_nop_();
sck=0;_nop_();
rst=1;_nop_();
ds1302_write_byte(add);
for(i=0;i<8;i++)
        {
date=date>>1;
sck=0;
if(io)
date=date|0x80;
sck=1;}
rst=0;_nop_();
sck=0;_nop_();
io=1;sck=1;
return date;
}
//**********************************************//
void write_time()//
{
uchar i,j,k;
for(i=0;i<7;i++){
j=writetime[i]/10;
k=writetime[i]%10;
writetime[i]=j*16+k;
}
ds1302_write(0x8e, 0x00);/
for(i=0; i<7;i++)
{
ds1302_write(writeadd[i], writetime[i]);
}
ds1302_write(0x8e,0x80);/
}
//*************************************************//
void readtime()/
{
        uchar i;
for(i=0;i<7;i++)
{writetime[i]=ds1302_read(readadd[i]);//***
}
}
//**********************************************//
void yj1602_write_com(uchar com)//
{

en=0; delay(1);
en=1; delay(1);
rs=0; delay(1);
rw=0;delay(1);
P0=com;
en=0; delay(1);}


        void yj1602_write_date(uchar date)/
en=0; delay(1);
en=1;delay(1);
rs=1; delay(1);
rw=0; delay(1);
                P0=date;
en=0;delay(1);
        }


void yj1602_init()//1
{
yj1602_write_com(0x38);//  
yj1602_write_com(0x0c);//
yj1602_write_com(0x06);//
yj1602_write_com(0x01);//
}
void write_1602(uchar add, uchar date)//
{
uchar shi,ge;
shi=date/16;
        ge=date%16;
yj1602_write_com(0x80+add);//
yj1602_write_date(0x30+shi);
yj1602_write_date(0x30+ge);
}
void deal_with()//
{
yj1602_write_com(0x80+0);
yj1602_write_date('d');
delay(5);
yj1602_write_com(0x80+1);
yj1602_write_date('a');
delay(5);
yj1602_write_com(0x80+2);
yj1602_write_date('t');
delay(5);
yj1602_write_com(0x80+3);
yj1602_write_date('a');
delay(5);
yj1602_write_com(0x80+4);
yj1602_write_date(':');
delay(5);
        write_1602(5,writetime[0]);
        delay(5);
yj1602_write_com(0x80+7);
yj1602_write_date('-');
delay(5);
write_1602(8,writetime[2]);
        delay(5);
yj1602_write_com(0x80+10);
yj1602_write_date('-');
delay(5);
write_1602(11,writetime[3]);
        delay(5);
yj1602_write_com(0x80+0x40);
yj1602_write_date('t');
delay(5);
yj1602_write_com(0x80+0x40+1);
yj1602_write_date('i');
delay(5);
yj1602_write_com(0x80+0x40+2);
yj1602_write_date('m');
delay(5);
yj1602_write_com(0x80+0x40+3);
yj1602_write_date('e');
delay(5);
yj1602_write_com(0x80+0x40+4);
yj1602_write_date(':');
delay(5);
write_1602(0x40+5,writetime[4]);
        delay(5);
        yj1602_write_com(0x80+0x40+7);
yj1602_write_date(':');
delay(5);
write_1602(0x40+8,writetime[5]);
        delay(5);
        yj1602_write_com(0x80+0x40+10);
yj1602_write_date(':');
delay(5);
write_1602(0x40+11,writetime[6]);
yj1602_write_com(0x80+0x40+11);
        delay(5);
}

//**************************************************//
void main(){
P2M1 = 0;        P2M0 = 0;       
P0M1 = 0;        P0M0 = 0;       
P1M1 = 0;        P1M0 = 0;
        P5M1 = 0x00;        P5M0 = 0x18;         

       
yj1602_init();
write_time();
while(1){
readtime();
deal_with();
}
}

回复

使用道具 举报

ID:52944 发表于 2019-5-16 12:32 | 显示全部楼层
没有程序,大神也给你回答不了
回复

使用道具 举报

ID:52944 发表于 2019-5-16 12:33 | 显示全部楼层
网上的例程很多,可以参考对照一下
回复

使用道具 举报

ID:537608 发表于 2019-5-16 12:35 | 显示全部楼层
这是原本的程序
#include        "15W4KxxS4.H"
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit io=P1^6;
sbit sck=P1^5;
sbit rst=P2^5;
sbit rs=P2^4;      
sbit rw=P2^3;     
sbit en=P2^1;        
uchar writetime[]={19,1,5, 15, 9, 15, 0};
uchar writeadd[7]={0x8c, 0x8a, 0x88,0x86, 0x84,0x82, 0x80};//ds1302D′μ?μ??·
uchar readadd[7]={0x8d,0x8b, 0x89, 0x87,0x85,0x83, 0x81};


//************************************************//
void delay(uchar ms)
{
        uchar x,y;
for(x=ms; x>0; x--)
for(y=110;y>0;y--);
}

//************************************************//

       
void ds1302_write_byte(uchar date)//
{
        uchar i;
for(i=0;i<8;i++)
        {
sck=0;
io=date&0x01;//
date=date>>1;
sck=1;}
}
//*********************************************//
void ds1302_write(uchar add,uchar date)/
{
rst=0;_nop_();//????3ì
sck=0;_nop_();
rst=1;_nop_();
ds1302_write_byte(add);
ds1302_write_byte(date);
rst=0;_nop_();
sck=0;_nop_();
io=1; sck=1;
}
//*****************************************//
uchar ds1302_read(uchar add)
{
uchar i,date;
rst=0;_nop_();
sck=0;_nop_();
rst=1;_nop_();
ds1302_write_byte(add);
for(i=0;i<8;i++)
        {
date=date>>1;
sck=0;
if(io)
date=date|0x80;
sck=1;}
rst=0;_nop_();
sck=0;_nop_();
io=1;sck=1;
return date;
}
//**********************************************//
void write_time()//
{
uchar i,j,k;
for(i=0;i<7;i++){
j=writetime[i]/10;
k=writetime[i]%10;
writetime[i]=j*16+k;
}
ds1302_write(0x8e, 0x00);/
for(i=0; i<7;i++)
{
ds1302_write(writeadd[i], writetime[i]);
}
ds1302_write(0x8e,0x80);/
}
//*************************************************//
void readtime()/
{
        uchar i;
for(i=0;i<7;i++)
{writetime[i]=ds1302_read(readadd[i]);//***
}
}
//**********************************************//
void yj1602_write_com(uchar com)//
{

en=0; delay(1);
en=1; delay(1);
rs=0; delay(1);
rw=0;delay(1);
P0=com;
en=0; delay(1);}


        void yj1602_write_date(uchar date)/
en=0; delay(1);
en=1;delay(1);
rs=1; delay(1);
rw=0; delay(1);
                P0=date;
en=0;delay(1);
        }


void yj1602_init()//1
{
yj1602_write_com(0x38);//  
yj1602_write_com(0x0c);//
yj1602_write_com(0x06);//
yj1602_write_com(0x01);//
}
void write_1602(uchar add, uchar date)//
{
uchar shi,ge;
shi=date/16;
        ge=date%16;
yj1602_write_com(0x80+add);//
yj1602_write_date(0x30+shi);
yj1602_write_date(0x30+ge);
}
void deal_with()//
{
yj1602_write_com(0x80+0);
yj1602_write_date('d');
delay(5);
yj1602_write_com(0x80+1);
yj1602_write_date('a');
delay(5);
yj1602_write_com(0x80+2);
yj1602_write_date('t');
delay(5);
yj1602_write_com(0x80+3);
yj1602_write_date('a');
delay(5);
yj1602_write_com(0x80+4);
yj1602_write_date(':');
delay(5);
        write_1602(5,writetime[0]);
        delay(5);
yj1602_write_com(0x80+7);
yj1602_write_date('-');
delay(5);
write_1602(8,writetime[2]);
        delay(5);
yj1602_write_com(0x80+10);
yj1602_write_date('-');
delay(5);
write_1602(11,writetime[3]);
        delay(5);
yj1602_write_com(0x80+0x40);
yj1602_write_date('t');
delay(5);
yj1602_write_com(0x80+0x40+1);
yj1602_write_date('i');
delay(5);
yj1602_write_com(0x80+0x40+2);
yj1602_write_date('m');
delay(5);
yj1602_write_com(0x80+0x40+3);
yj1602_write_date('e');
delay(5);
yj1602_write_com(0x80+0x40+4);
yj1602_write_date(':');
delay(5);
write_1602(0x40+5,writetime[4]);
        delay(5);
        yj1602_write_com(0x80+0x40+7);
yj1602_write_date(':');
delay(5);
write_1602(0x40+8,writetime[5]);
        delay(5);
        yj1602_write_com(0x80+0x40+10);
yj1602_write_date(':');
delay(5);
write_1602(0x40+11,writetime[6]);
yj1602_write_com(0x80+0x40+11);
        delay(5);
}

//**************************************************//
void main(){
P2M1 = 0;        P2M0 = 0;       
P0M1 = 0;        P0M0 = 0;       
P1M1 = 0;        P1M0 = 0;
        P5M1 = 0x00;        P5M0 = 0x18;         

       
yj1602_init();
write_time();
while(1){
readtime();
deal_with();
}
}

回复

使用道具 举报

ID:343391 发表于 2019-5-16 14:43 | 显示全部楼层
据楼主描述,1302读取应该没有问题,问题可能在1602的rs引脚上,写数据或写命令时输出的电平不对或延时不够,建议把rs引脚拉高拉低后的延时时间改大试试。
回复

使用道具 举报

ID:343391 发表于 2019-5-16 14:48 | 显示全部楼层
根据问题描述,1302应该没有问题,问题可能在1602的rs数据/命令写入选择脚上,拉高拉低不对或延时时间不够,建议把拉高拉低后的延时时间改大试试。
回复

使用道具 举报

ID:537018 发表于 2019-5-16 15:19 | 显示全部楼层
需要程序哦
回复

使用道具 举报

ID:537608 发表于 2019-5-16 16:46 来自手机 | 显示全部楼层
酸葡萄 发表于 2019-5-16 15:19
需要程序哦

已经贴上去了,有什么问题吗
回复

使用道具 举报

ID:539977 发表于 2019-5-16 16:52 | 显示全部楼层
可能没按照时序图编写,把延时加大1MS试试
回复

使用道具 举报

ID:93224 发表于 2019-5-16 17:46 | 显示全部楼层
你可以问问单片机啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表