DS1302秒位一直为FF

拒绝访问 | product.yellowurl.cn | 百度云加速
请打开cookies.
此网站 (product.yellowurl.cn) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(440c5e-ua98).
重新安装浏览器,或使用别的浏览器广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
北京 海淀区
&2000.00&PCS
北京 海淀区
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 深圳市
广东 广州市
客服咨询热线:400- (免长途费)
投诉热线:010- (工作时间:8:00-19:00)
互联网药品信息服务资格证书:(京)-经营性- 海淀公安局网络备案编号:
版权所有 慧聪网
通用网址:hc360
Copyright& hc360.com. All Rights Reservedds1302读出的数据总是0XFF求助! - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
ds1302读出的数据总是0XFF求助!
<div class=""
#include&reg52.h&
#include&intrins.h&
#define& & & & uint unsigned int
#define uchar unsigned char
#define LCD1602_IO P0
sbit rst=P3^4;//是由T0非控制当为1的时候没被选中,当为0的时候选中。
sbit sclk=P3^3;
sbit io=P3^2;
sbit&&E=P3^5;//1602的EA
sbit&&RS=P3^7;//1602
void delay_ms(uint a);//毫秒级别延时;
void wr_com(uchar dat);//1602写指令函数;
void wr_dat(uchar dat);//1602写数据函数;
void init_1602(void);//1602初始化函数;
void init();//时钟初始化
void _10zhuan16();//将10进制时间转化成16进制的8421BCD;
void write_byte(uchar a);//DS1302写1个字节函数;
uchar read_byte();//DS1302读一个字节函数;
void write_date(uchar address,uchar date);//正对某个字节写;
uchar read_date(uchar address);//针对某个字节读;
void read_time();//连续读取时间
uchar init_time[7]={12,4,9,6,17,50,30};//初始化时间 年 周 月 日 时 分 秒
uchar write_address[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//写地址数组
uchar read_address[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//读地址数组
void main()
&&init_1602();
&&while(1)
& &&&read_time();
& & & &&&wr_dat('2');
& & & &&&wr_dat('0');
& & & &&&wr_dat(init_time[0]/16+0x30);
& & & &&&wr_dat(init_time[0]%16+0x30);
& & & &&&wr_dat('y');
& & & &&&wr_dat(init_time[2]/16+0x30);
& & & &&&wr_dat(init_time[2]%16+0x30);
& & & &&&wr_dat('m');
& & & &&&wr_dat(init_time[3]/16+0x30);
& & & &&&wr_dat(init_time[3]%16+0x30);
& & & &&&wr_dat('d');
& & & &&&wr_dat(init_time[4]/16+0x30);
& & & &&&wr_dat(init_time[4]%16+0x30);
& & & &&&wr_dat('t');
& & & &&&wr_dat(init_time[5]/16+0x30);
& & & &&&wr_dat(init_time[5]%16+0x30);
& & & &&&wr_com(0x80+0x40);
& & & &&&wr_dat('m');
& & & &&&wr_dat(init_time[6]/16+0x30);
& & & &&&wr_dat(init_time[6]%16+0x30);
& & & &&&wr_dat('s');
& & & &&&wr_dat(init_time[1]+0x30);
& & & &&&wr_com(0x80);
void delay_ms(uint a)//毫秒级别延时;
uchar x,y;
for (a;a&0;a--)
& &for(x=0;x&114;x++)
& & for(y=0;y&1;y++);
void wr_com(uchar dat)//1602写指令函数;
& & & & E=0;
& & & & RS=0;;
& & & & LCD1602_IO=
& & & & E=1; delay_ms(2);
& & & & E=0;delay_ms(2);
void wr_dat(uchar dat)//1602写数据函数;
& & & & E=0;
& & & & RS=1;
& & & & LCD1602_IO=
& & & & E=1;delay_ms(2);
& & & & E=0;delay_ms(2);
void init_1602(void)//1602初始化函数;
& & & & delay_ms(20);
& & & & wr_com(0X38);
& & & & delay_ms(5);
& & & & wr_com(0X38);
& & & & delay_ms(5);
& & & & wr_com(0X01);
& & & & wr_com(0X06);
& & & & wr_com(0X0c);
& & & & wr_com(0X80);
void write_byte(uchar a)//DS1302写1个字节函数;
&&for(i=0;i&8;i++)
& && &sclk=0;
& && &io=(a&&i)&0x01;
& & & && &sclk=1;& & & && &
uchar read_byte()//DS1302读一个字节函数;
&&uchar i,date=0;
&&for(i=0;i&8;i++)
& && &sclk=1;& &
& & & && &if(io==1)
& & & && & {
& & & && && &date|=0x01&&i;
& & & && & }
& & & && &sclk=0;
& &return(date);
void write_date(uchar address,uchar date)//针对某个字节写;
& &rst=1;//是由T0非控制当为1的时候没被选中,当为0的时候选中
& &_nop_();
& &sclk=0;
& &_nop_();
& &_nop_();
& &write_byte(address);
& &write_byte(date);
& &_nop_();
& &sclk=1;
uchar read_date(uchar address)//针对某个字节读;
& &rst=1;//是由T0非控制当为1的时候没被选中,当为0的时候选中
& &_nop_();
& &sclk=0;
& &_nop_();
& &_nop_();
& &write_byte(address);
& &date=read_byte();
& & rst=1;
& &_nop_();
& &sclk=1;
& &return(date);
void _10zhuan16()//将10进制时间转化成16进制的8421BCD
&&uchar i,j=0;
&&for(i=0;i&7;i++)
& & & && &j=init_time[i]/10;
& & & && &init_time[i]=init_time[i]%10+j*16;
void init()//时钟初始化
&&_10zhuan16();
&&write_date(0x8e,0x00);
&&for(i=0;i&7;i++)
&&& & & & {
& && & & && &write_date(write_address[i],init_time[i]);
&&& & & & }
&&write_date(0x8e,0x80);
void read_time()
&&for(i=0;i&7;i++)
& &&&init_time[i]=read_date(read_address[i]);& & & && &
我的液晶上面显示独到的数据总是??,那就是读到的都是0xff,我觉得我的程序不会错啊!那么简单了,会不会是电路错了啊!
14:16:08  
该类别下有 43 个回答。
该类别下有 35 个回答。
该类别下有 27 个回答。
该类别下有 24 个回答。
该类别下有 23 个回答。
该类别下有 23 个回答,其中被选为最佳答案 1 次。
该类别下有 21 个回答。
该类别下有 21 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 18 个回答。
该类别下有 18 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
是不是你的1302都还在写保护。给e写一个解除写保护的命令;
还有可能是根本没有读到东西
求问下,就是在读数据的时候对他写地址的话,写保护开了,是不是地址也写不进去啊!所以就读不出来
可能根本就没有读到数据,怀疑是电路问题把电路贴上来看一下
按你的程序1602的RW引脚应该接地,不知道电路图怎么样?
我的情况变了我换了个ds1302,以后就有数字了!我是怀疑我之前USB封装画错了!导致电源接反!烧掉过芯片所以就换了个!但是不是我初始化后的时间,就算我把初始化里面的时间改掉了以后!读出的数据还是不变!而且也不会变化!而且我测量了晶振的两个管脚!一个是2.5V一个就是0V,会不会是晶振没有起振啊!
(839.69 KB, 下载次数: 1)
我现在想1602上面有数据了!是不是代表能读出了!至于为什么数值不变会不会我根本没有把数值写进去
而且,芯片也没运行!所以就一直不变!
楼主你的问题解决了吗,我也碰到同一个问题& &
楼主你的问题解决了吗,我也碰到同一个问题
同问& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司用ds1302制作一个精密的电子时钟
用ds1302制作一个精密的电子时钟,且实现按键调节时间。
解决方案:
#include&reg52.h&
#include&intrins.h&
#define uchar unsigned char
#define uint unsigned int
#define DEC2BCD(X) ((X/10)&&4 | (X%10))&& //用于将十进制转成BCD码的宏
#define BCD2DEC(X) (((X&0x70)&&4)*10 + (X&0x0F)) //用于将BCD码转成十进制的宏
void write_com(uchar com);
void write_data(uchar dat);
void init();
void write_time(uchar add,uchar dat);
void write_riqi(uchar add,uchar dat);
void write_xingqi(uchar dat);
void write_byte(uchar dat);
uchar read_byte();
void& s_write(uchar add,uchar dat);
void& s_write(uchar add,uchar dat);
uchar s_read(uchar add);
void set_ds1302(uchar *pClock);
void rw_ds1302();
void keyscan();
uchar data table[]=& Mon.&;
uchar data table1[]=&& 00:00:00&;
uchar code xingqi[]=&Mon. Tue. Wed. Thu. Fri. Sat. Sun.&;
uchar code time[]={0x00,0x00,0x00,0x06,0x09,0x07,0x09};//sec,min,hour,date,month,week,year
uchar data time1[]={0x00,0x00,0x00,0x06,0x09,0x07,0x09};//sec,min,hour,date,month,week,year
uchar hour,min,sec,week,day,month,year,num,sfcount,
sbit ds1302_sclk=P1^4;
sbit ds1302_io=P1^5;
sbit ds1302_ce=P2^2;
sbit acc0=ACC^0;
sbit acc7=ACC^7;
sbit lcdrs=P1^7;&&& //端口定义
sbit lcdrw=P1^6;
sbit lcde=P2^4;
sbit le=P3^ 6;
sbit leden=P2^5;
sbit& dkle=P3^7;
sbit beep=P2^7;
sbit sf=P1^0;
sbit sup=P1^1;
void delay(uint a);
void keyscan();
void main()& //main函数
&s_write(0x8e,0x80);
&init();&&&
&& keyscan();
&& if(flag==0){
&&&& rw_ds1302();
void write_byte(uchar dat) //写入一个字节
&for(i=8;i&0;i--)
& ds1302_io=acc0;
& ds1302_sclk=1;
& ds1302_sclk=0;
& ACC=ACC&&1;
uchar read_byte()& //读出一个字节
&for(i=8;i&0;i--)
& ACC=ACC&&1;
& acc7=ds1302_
& ds1302_sclk=1;
& ds1302_sclk=0;
&return(ACC);
void& s_write(uchar add,uchar dat)//单字节写入子函数
&ds1302_ce=0;
&ds1302_sclk=0;
&ds1302_ce=1;
&write_byte(add);
&write_byte(dat);
&ds1302_sclk=1;
&ds1302_ce=0;
uchar s_read(uchar add)&& //单字节读出子函数
&ds1302_ce=0;
&ds1302_sclk=0;
&ds1302_ce=1;
&write_byte(add);
&temp=read_byte();
&ds1302_sclk=1;
&ds1302_ce=0;
&temp=BCD2DEC(temp);
&return(temp);
void set_ds1302(uchar *pClock) //设置ds1302的时间
&uchar add=0x80;
&s_write(0x8e,0x00);
&for(i=7;i&0;i--)
& s_write(add,*pClock);
& pClock++;
&s_write(0x8e,0x80);
void rw_ds1302()& //读写ds1302
& sec=s_read(0x81);
& write_time(8,sec);
& write_com(0x80+0x40+9);
& min=s_read(0x83);
& write_time(5,min);
& write_com(0x80+0x40+6);
& hour=s_read(0x85);
& write_time(2,hour);
& write_com(0x80+0x40+3);
& week=s_read(0x8b);
& write_xingqi(week);
& write_com(0x80+0x0d);
& day=s_read(0x87);
& write_riqi(8,day);
& write_com(0x80+9);
& month=s_read(0x89);
& write_riqi(5,month);
& write_com(0x80+6);
& year=s_read(0x8d);
& write_riqi(2,year);
& write_com(0x80+3);
void write_com(uchar com)&& //写命令子函数
&delay(1);
&delay(1);
&delay(1);
void write_data(uchar dat) //写数据子函数
&delay(1);
&delay(1);
&delay(1);
void init()
&s_write(0x90,0xa5);
&set_ds1302(time);
&delay(5);&&&
&lcde=0;&&&&& //LCD1602初始化
&write_com(0x38);
&delay(100);
&write_com(0x38);
&delay(50);
&write_com(0x38);
&delay(10);
&write_com(0x08);
&write_com(0x01);
&write_com(0x0c);
&write_com(0x80);
&for(num=0;num&15;num++)&& //在第一行显示& & Mon.&
& write_data(table[num]);
&write_com(0x80+0x40);
&for(num=0;num&10;num++)& //在第二行末尾显示&&& 00:00:00&
& write_data(table1[num]);
void write_time(uchar add,uchar dat)& //写入时间子函数
&uchar shi,
&shi=dat/10;
&ge=dat%10;
&write_com(0x80+0x40+add);
&write_data(0x30+shi);
&write_data(0x30+ge);
void write_riqi(uchar add,uchar dat)& //写入日期子函数
&uchar shi,
&shi=dat/10;
&ge=dat%10;
&write_com(0x80+add);
&write_data(0x30+shi);
&write_data(0x30+ge);
void write_xingqi(uchar dat)& //写入星期子函数
&write_com(0x80+0x0b);
&switch(dat)
& case 1: for(num=0;num&4;num++)
&&&& write_data(xingqi[num]);
& case 2: for(num=5;num&9;num++)
&&&& write_data(xingqi[num]);
& case 3: for(num=10;num&14;num++)
&&&& write_data(xingqi[num]);
& case 4: for(num=15;num&19;num++)
&&&& write_data(xingqi[num]);
& case 5: for(num=20;num&24;num++)
&&&& write_data(xingqi[num]);
& case 6: for(num=25;num&29;num++)
&&&& write_data(xingqi[num]);
& case 7: for(num=30;num&34;num++)
&&&& write_data(xingqi[num]);
void keyscan()& //按键扫描子函数
& if(sf==0) //功能键
&& delay(2);
&& if(sf==0)
&&& while(!sf);
&&& sfcount++;
&&& if(sfcount==1)&&& //秒针闪烁
&&&& flag=1;
&&&& s_write(0x80,0x80);//使时钟暂停
&&&& write_com(0x80+0x40+9);
&&&& write_com(0x0f);
&&& if(sfcount==2)& //分针闪烁
&&&& write_com(0x80+0x40+6);
&&& if(sfcount==3)& //时针闪烁
&&&& write_com(0x80+0x40+3);
&&& if(sfcount==4)& //星期闪烁
&&&& write_com(0x80+0x0d);
&&& if(sfcount==5) //天闪烁
&&&& write_com(0x80+9);
&&& if(sfcount==6) //月闪烁
&&&& write_com(0x80+6);
&&& if(sfcount==7) //年闪烁
&&&& write_com(0x80+3);
&&& if(sfcount==8) //取消闪烁
&&&& sfcount=0;
&&&& flag=0;
&&&& set_ds1302(time1);
&&&& delay(5);
&&&& write_com(0x0c);
&&&& s_write(0x80,0x00);//使时钟启动
& if(sup==0)&&& //调节时间(上升键)
&& delay(5);
&& if(sup==0)
&&& while(!sup);
&&& if(sfcount==1) //调节秒
&&&& sec++;
&&&& if(sec==60)
&&&&& sec=0;
&&&& time1[0]=DEC2BCD(sec);
&&&& write_time(8,sec);
&&&& write_com(0x80+0x40+9);
&&& if(sfcount==2)& //调节分钟
&&&& min++;
&&&& if(min==60)
&&&&& min=0;
&&&& time1[1]=DEC2BCD(min);
&&&& write_time(5,min);
&&&& write_com(0x80+0x40+6);
&&& if(sfcount==3)& //调节小时
&&&& hour++;
&&&& if(hour==24)
&&&&& hour=0;
&&&& time1[2]=DEC2BCD(hour);
&&&& write_time(2,hour);
&&&& write_com(0x80+0x40+3);
&&& if(sfcount==4)& //调节星期
&&&& week++;
&&&& if(week==8)
&&&&& week=1;
&&&& time1[5]=
&&&& write_xingqi(week);
&&&& write_com(0x80+0x0d);
&&& if(sfcount==5)& //调节日
&&&& day++;
&&&& if(day==32)
&&&&& day=1;
&&&& time1[3]=DEC2BCD(day);
&&&& write_riqi(8,day);
&&&& write_com(0x80+9);
&&& if(sfcount==6)& //调节月
&&&& month++;
&&&& if(month==13)
&&&&& month=1;
&&&& time1[4]=DEC2BCD(month);
&&&& write_riqi(5,month);
&&&& write_com(0x80+6);
&&& if(sfcount==7)& //调节年
&&&& year++;
&&&& if(year==100)
&&&&& year=9;
&&&& time1[6]=DEC2BCD(year);
&&&& write_riqi(2,year);
&&&& write_com(0x80+3);
void delay(uint a) {&& //1ms延时子函数
&uint i,j;
&for(j=a;j&0;j--)
&&&& for(i=250;i&0;i--) ;

我要回帖

更多关于 空调显示FF 的文章

 

随机推荐