完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
电子万年历,屏蔽掉1302时钟函数12864就可以显示初始时间,温度显示正常,但是加入1302读时间函数之后12864直接没显示了...怎么回事,求大神解决!谢谢...
#include #include #include "DS1302.h" #include "DS18b20.h" #include "Delay.h" #include "Display.h" #define uchar unsigned char #define uint unsigned int uchar code codetable[]="0123456789"; uchar code weektable[]="一二三四五六日"; uchar str1[16]="2014/01/12 27℃"; uchar str2[16]="00:30:10 星期五"; uchar str3[16]="四月初五 闹钟开"; uchar str4[16]="下 午 00点03分"; struct time time; uchar temp; bit ReadRTC_Flag;//定义读DS1302标志 void main(){ time.year=11; time.month=5; time.week=6; time.day=14; time.hour=10; time.minute=59; time.second=45; set_rtc(); delay_50ms(4); lcd12864initinal(); lcd12864display(str1,1); delay_50ms(40); while(1){ read_rtc();//问题所在,屏蔽掉显示正常,函数应该是正常,网上找的程序也有同样问题 delay_50ms(1); str1[2]=codetable[time.year/10]; str1[3]=codetable[time.year%10]; str1[5]=codetable[time.month/10]; str1[6]=codetable[time.month%10]; str1[8]=codetable[time.day/10]; str1[9]=codetable[time.day%10]; str2[0]=codetable[time.hour/10]; str2[1]=codetable[time.hour%10]; str2[3]=codetable[time.minute/10]; str2[4]=codetable[time.minute%10]; str2[6]=codetable[time.second/10]; str2[7]=codetable[time.second%10]; str2[14]=weektable[(time.week-1)*2-1]; str2[15]=weektable[(time.week-1)*2]; str4[8]=codetable[time.hour/10]; str4[9]=codetable[time.hour%10]; str4[12]=codetable[time.minute/10]; str4[13]=codetable[time.minute%10]; temp=readtemperature(); str1[12]=codetable[temp/10]; str1[13]=codetable[temp%10]; lcd12864display(str1,1); lcd12864display(str2,2); lcd12864display(str3,3); lcd12864display(str4,4);} } 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 #include #include "DS1302.h" #include #include ***it sck=P3^6; ***it io=P3^4; ***it ce=P3^5; uchar time_data[7]={10,6,4,17,11,58,30}; code uchar write_add[7]={0x8c, 0x8a,0x88, 0x86, 0x84, 0x82,0x80};//年周月日时分秒 code uchar read_add[7]={0x8d, 0x8b,0x89, 0x87, 0x85, 0x83,0x81};//年周月日时分秒 /*按位写一字节8位*/ void write_ds1302_byte(uchar dat){ uchar i; for(i=0;i<8;i++){ sck=0; _nop_(); io=dat&0x01; dat>>=1; sck=1; } } /*写某个数据dat到某个地址add*/ void write_ds1302(uchar add,uchar dat){ ce=0; _nop_(); sck=0; _nop_(); ce=1; write_ds1302_byte(add); write_ds1302_byte(dat); _nop_(); ce=0; _nop_(); io=1; sck=1; } /*读取某一个地址(年/周/月/日/时/分/秒)的数据*/ /*uchar read_ds1302(uchar add){ uchar i,value=0; ce=0; _nop_();_nop_(); sck=0; _nop_();_nop_(); ce=1; _nop_();_nop_(); write_ds1302_byte(add); _nop_(); for(i=0;i<8;i++){ if(io); value=value|=0x80; sck=0; value>>=1; //右移一位 _nop_(); _nop_(); _nop_(); sck=1; } ce=0; _nop_();_nop_(); ce=0; sck=0; _nop_();_nop_(); _nop_();_nop_(); sck=1; _nop_();_nop_(); io=0; _nop_();_nop_(); io=1; _nop_();_nop_(); return value; }*/ uchar read_ds1302(uchar addr) { uchar i,value; ce=0; _nop_(); _nop_(); sck=0; _nop_(); _nop_(); ce=1; _nop_(); _nop_(); write_ds1302_byte(addr); for(i=0;i<8;i++) { value=value>>1; _nop_(); sck=0; if(io) value=value|0x80; _nop_(); sck=1; } ce=0; _nop_(); _nop_(); sck=0; _nop_(); _nop_(); sck=1; io=1; return value; } /*初始化时间为2014年周1一月一日12点00分*/ void set_rtc(void){ uchar i,j; /*for(i=0;i<7;i++){ j=time/10; time=time%10; time=time+j*16; }//10进制转为16进制*/ j=time.year/10; time_data[0]=time.year%10; time_data[0]=time_data[0]+j*16; j=time.week/10; time_data[1]=time.week%10; time_data[1]=time_data[1]+j*16; j=time.month/10; time_data[2]=time.month%10; time_data[2]=time_data[2]+j*16; j=time.day/10; time_data[3]=time.day%10; time_data[3]=time_data[3]+j*16; j=time.hour/10; time_data[4]=time.hour%10; time_data[4]=time_data[4]+j*16; j=time.minute/10; time_data[5]=time.minute%10; time_data[5]=time_data[5]+j*16; j=time.second/10; time_data[6]=time.second%10; time_data[6]=time_data[6]+j*16; write_ds1302(0x8e,0x00);//去除写保护 for(i=0;i<7;i++){ write_ds1302(write_add,time_data); } write_ds1302(0x8e,0x80);//加写保护*/ } /*读时间数据到数组disp[]存放,为完成BCD码转换*/ void read_rtc(void){ uchar i,j=0; //write_ds1302(0x8e,0x00);//去除写保护 for(i=0;i<7;i++){ time_data=read_ds1302(read_add); }//读出 年周月日时分秒 // write_ds1302(0x8e,0x00);//加写保护 time.year=time_data[0]%16+(time_data[0]/16)*10; time.week=time_data[1]%16; time.month=time_data[2]%16+(time_data[2]/16)*10; time.day=time_data[3]%16+(time_data[3]/16)*10; time.hour=time_data[4]%16+(time_data[4]/16)*10; time.minute=time_data[5]%16+(time_data[5]/16)*10; time.second=time_data[6]%16+(time_data[6]/16)*10; } |
|
相关推荐
7个回答
|
|
|
|
|
|
这段代码错误,改为
数组书写不对。 |
|
|
|
|
|
这是我之前用430f149做的一个万年历的程序。不过时间有点久不知道哪一个是最终稿了,供你参考吧,
|
|
|
|
“依然落叶飘零实名认证”回答的也是错的
应该改为
至于你说的加上read_rtc之后没显示,从程序中也看不出问题。给个建议,把那个函数暂时改成
也就是把下面的那些计算替换成常数,这样再吧read_rtc函数加进去,看看lcd还有没有显示 |
|
|
|
|
|
|
|
能发一下12864的代码么?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
串口发送中断中对发送I/O口定义为GPIO输出,出现发送数据不完整,缺少2个字节,求解答
1054 浏览 3 评论
720 浏览 0 评论
【xG24 Matter开发套件试用体验】10-Bluetooth示例1
821 浏览 0 评论
905 浏览 0 评论
【xG24 Matter开发套件试用体验】power specification电源规格参数配置
728 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10853 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-25 12:19 , Processed in 0.630734 second(s), Total 59, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191