完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 huhaomcu 于 2012-9-7 11:51 编辑
/************************************************************************************************* 程序功能:DS1302组成的万年历 **************************************************************************************************/ #include #include<1602.h> #define uint unsigned int #define uchar unsigned char ***it sclk=P1^0; ***it IO=P1^1; ***it rst=P2^0; uchar code table[]={15,25,35}; //初始时间值,秒,分 时 uchar code array[]={'0','1','2','3','4','5','6','7','8','9'}; uchar sheet[3]; /***it ACC0 = ACC^0; ***it ACC7 = ACC^7; /************************************************************************************************* * 名称:write_byte * 说明 * 功能:往DS1302中写入1BYTE的数据 * 调用: * 输入:写入的数据 * 返回值:无 *************************************************************************************************/ void wriet_byte(uchar temp) { uchar i; ACC=temp; for(i=8;i>0;i--) { IO=ACC0; sclk=1; sclk=0; ACC=ACC>>1; } } /************************************************************************************************ * * 名称:read_byte * 说明: * 功能:从DS1302中读出1BYTE的数据 * 调用: * 输入: * 返回值: ACC *************************************************************************************************/ uchar read_byte() { uchar i; for(i=8;i>0;i--) { ACC=ACC>>1; ACC7=IO; sclk=1; sclk=0; } return (ACC); } /************************************************************************************************* * * 名称:w_ds1302 * 功能:先写地址,再写数据 * *************************************************************************************************/ void w_ds1302(uchar addr,uchar date) { rst=0; sclk=0; sclk=1; wriet_byte(addr); //写地址 wriet_byte(date); //写数据 sclk=1; rst=0; } /*********************************************************************************************** * 名称:r_ds1302 * 功能:先写地址,在读数据 ***********************************************************************************************/ uchar r_ds1302(uchar addr) { uchar sum; rst=0; sclk=0; rst=1; wriet_byte(addr); //写地址 sum=read_byte(); //读数据 sclk=1; rst=0; sum=((sum&0x70)>>4)*10+(sum&0x0f); //BCD码转16进制 return (sum); } /*********************************************************************************************** * 名称:w_init * 功能:将初始值写入到ds1302中 ************************************************************************************************/ void w_init() //ds1302初始化操作 { uchar i; uchar addr=0x80; w_ds1302(0x8e,0x00); for(i=0;i<3;i++) { w_ds1302(addr,table); addr=addr+2; } w_ds1302(0x8e,0x80); } /************************************************************************************************ * 名称:r_end * 功能:读ds1302当前的值 *************************************************************************************************/ void r_end() { uchar i; uchar add=0x81; for(i=0;i<3;i++) { sheet= r_ds1302(add); add=add+2; } } /********************ds1302的操作结束*************************************************************/ void main() { init1602(); w_init(); while(1) { r_end(); write_com(0x80+0x0a); write_data(array[(sheet[0]%10)]); write_data(array[(sheet[0]/10)]); write_data(':'); write_data(array[(sheet[1]%10)]); write_data(array[(sheet[1]/10)]); write_data(':'); write_data(array[(sheet[2]%10)]); write_data(array[(sheet[2]/10)]); } } |
|
相关推荐
5个回答
|
|
void w_ds1302(uchar addr,uchar date)
{ rst=0; sclk=0; sclk=1; wriet_byte(addr); //写地址 wriet_byte(date); //写数据 sclk=1; rst=0; } 里面的slk=1;改为rst=1; 另外在初始化函数里再加个slk=0;试试看 |
|
|
|
|
|
|
|
还是不行,之前自己写了一个ds1302操作的程序,但也没反应,所以 这个程序关于ds1302的操作是我照书上写的,只有主程序是我自己写的,关于好个table是我复制掉了,原程序是写的table,我想是不是主程序的逻辑有问题啊!!!!!! |
|
|
|
我没用过DS1302,但是写芯片驱动,我还是有点小心得的。
1,您的时钟电平宽度是否足够。 2,MCU向DS1302发送数据时,改变数据是在时钟高电平还是低电平期间? 您的代码里既有时钟高电平时改变数据,又有时钟低电平是改变数据。 3,当您启动发送时,您是否考虑到应先让所有信号线无效这一情况?看您的代码,似乎没有处理啊。 4,DS1302的CS变高到时钟变高或变低的延时您是否考虑到了。 5,说一下代码风格的问题,每个函数有注释,很好的习惯,但是没说明白入口参数的意义,合法值; 出口参数的意义哦。 |
|
|
|
谢谢您!我一直对写一些有时序问题的程序时总是喜欢出错,看其它写的程序,感觉一个人一个样,有时甚至发现他们写的和时序图上的还对不上,可就能操作,而我自己写时,对着时序图一点一点的写,可就是没反应,您有一些关于看时序图的经验吗? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
180 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
587 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
549 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
548 浏览 0 评论
1051 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 18:57 , Processed in 0.609928 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号