完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
ds1302时钟问题 当时间通过按键调到9以后,1602上就开始显示这些字符“:;《 = 》?” 时间走动时但又不会显示这些字符 ,还有就是键盘调试之后时间不能写入ds1302 求高手解决 !本人将感激不尽!!!!
程序如下 : #include #include #define uchar unsigned char #define uint unsigned int ***it dula=P2^6; ***it wela=P2^7; ***it lcden=P3^4; ***it DS1302_CLK = P3^2; ***it DS1302_IO = P2^4; ***it DS1302_RST = P3^3; ***it rs=P3^5; ***it rw=P3^6; ***it s1=P3^0; ***it s2=P3^1; ***it s3=P3^2; ***it rd=P3^7; int shi,fen,miao,week,day,month,year; uchar flag,s1num; uchar data table[]={" 2011-08-17 THU"}; uchar data table1[]={" : : "}; void delayms(uint x) { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } /*********************1602液晶初始化*********************************/ void write_com(uchar com) //写操作 { rs=0; rw=0; P0=com; delayms(5); lcden=1; delayms(5); lcden=0; } void write_date(uchar date) //写数据 { rs=1; rw=0; P0=date; delayms(5); lcden=1; delayms(5); lcden=0; delayms(5); } /***************************************************************************** 函数功能:向DS1302送一字节数据子程序 入口参数: 出口参数: *****************************************************************************/ void InputByte(uchar byte1) { char i; for(i=8;i>0;i--) { DS1302_IO=(bit)(byte1&0x01); DS1302_CLK=1; _nop_(); DS1302_CLK=0; byte1>>=1; } return ; } /***************************************************************************** 函数功能:读DS1302一个字节子程序 入口参数: 出口参数: *****************************************************************************/ unsigned char OutputByte(void) { uchar i; unsigned ucdat=0; for(i=8;i>0;i--) { DS1302_IO=1; ucdat>>=1; if(DS1302_IO)ucdat|=0x80; DS1302_CLK=1; _nop_(); DS1302_CLK=0; } return(ucdat); } /***************************************************************************** 函数功能:向DS1302某地址写一字节数据子程序 入口参数:addr,TDat 出口参数: *****************************************************************************/ void write_ds1302(uchar addr,uchar TDat) { DS1302_RST=0; _nop_(); DS1302_CLK=0; _nop_(); DS1302_RST=1; InputByte(addr); _nop_(); InputByte(TDat); DS1302_CLK=1; _nop_(); DS1302_RST=0; } /***************************************************************************** 函数功能:读DS1302地址子程序 入口参数:add 出口参数:timedata *****************************************************************************/ uchar read_ds1302(uchar addr) { uchar timedata; DS1302_RST=0; _nop_(); DS1302_CLK=0; _nop_(); DS1302_RST=1; InputByte(addr); timedata=OutputByte(); DS1302_CLK=1; _nop_(); DS1302_RST=0; return(timedata); } void initial_ds1302() { write_ds1302(0x8e,0x00); //写保护寄存器,在对时钟或RAM写前WP一定要为0 write_ds1302(0x8c,00); //年 write_ds1302(0x88,00); //月 write_ds1302(0x86,00); //日 write_ds1302(0x8A,00); //星期 write_ds1302(0x84,0x17); //时 write_ds1302(0x82,0x18); //分 write_ds1302(0x80,0x00); //秒 write_ds1302(0x8e,0x80); //写保护寄存器 } /***********************写时分秒************************************/ void write_sfm(uchar add,uchar date) { uchar shi,ge; shi=date/16; ge=date%16; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } /***************************************************************************** 函数功能:读DS1302时间子程序 入口参数: 出口参数:全局变量(second,minute,hour,week,day,month,year) *****************************************************************************/ void read_time() { if(flag==0) { miao=read_ds1302(0x81); //秒寄存器 write_sfm(8,miao); fen=read_ds1302(0x83); //分 write_sfm(5,fen); shi=read_ds1302(0x85); //时 write_sfm(2,shi); week=read_ds1302(0x8B); //星期 day=read_ds1302(0x87); //日 month=read_ds1302(0x89); //月 year=read_ds1302(0x8d); //年 } } /*******************总初始化************************/ void init() { uchar num; dula=0; wela=0; lcden=0; initial_ds1302(); write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<16;num++) { write_date(table[num]); delayms(5); } write_com(0x80+0x40); for(num=0;num<10;num++) { write_date(table1[num]); delayms(5); } } /*************************独立键盘****************************************/ void keyscan() { rd=0; if(s1==0) { delayms(5); if(s1==0) { s1num++; //区分时分秒的功能 while(!s1); if(s1num==1) //对秒操作 { flag=1; write_com(0x0f); write_com(0x80+0x40+9); } if(s1num==2) //对分操作 { write_com(0x80+0x40+6); } if(s1num==3) //对时操作 { write_com(0x80+0x40+3); } if(s1num==4) //停止操作 { s1num=0; write_com(0x0c); write_ds1302(0x84,shi); //时 write_ds1302(0x82,fen); //分 write_ds1302(0x80,miao); //秒 flag=0; } } } if(s1num!=0) { if(s2==0) //增加时间 { delayms(5); if(s2==0) { while(!s2); if(s1num==1) { miao++; if(miao==60) miao=0; write_sfm(8,miao); write_com(0x80+0x40+9); } if(s1num==2) { fen++; if(fen==60) fen=0; write_sfm(5,fen); write_com(0x80+0x40+6); } if(s1num==3) { shi++; if(shi==24) shi=0; write_sfm(2,shi); write_com(0x80+0x40+3); } } } if(s3==0) //减小时间 { delayms(5); if(s3==0) { while(!s3); if(s1num==1) { miao--; if(miao==-1) miao=59; write_sfm(8,miao); write_com(0x80+0x40+9); } if(s1num==2) { fen--; if(fen==-1) fen=59; write_sfm(5,fen); write_com(0x80+0x40+6); } if(s1num==3) { shi--; if(shi==-1) shi=23; write_sfm(2,shi); write_com(0x80+0x40+3); } } } } } /********************主函数************************/ void main() { init(); while(1) { keyscan(); read_time(); } } |
|
相关推荐
1个回答
|
|
不好啊泰伦不清晰
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式-ELFBOARD-RGB LCD屏接口的PCB设计要点
346 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
786 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
756 浏览 0 评论
961 浏览 1 评论
652 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11674 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 10:19 , Processed in 0.371695 second(s), Total 36, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号