完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
为什么我程序下载后,1602液晶显示的不是我输进去的数值,而且关掉电源再开还有存储功能,还从刚才断电的地方继续走。
如图所示: 程序如下: #include #include"LCD1602.h" #define uchar unsigned char #define uint unsigned int ***it TSCLK=P1^0; ***it tiO=P1^1; ***it TEN=P1^2; uchar Year,Month,Day,Hour,Min,Sec; void delayms(uint z) //延时函数ms { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } void Write_1302date(uchar com,uchar dat) //DS1302写数据 { uchar i; TEN=0; TSCLK=0; TEN=1; for(i=0;i<8;i--) { TSCLK=0; TIO=com&0x01; TSCLK=1; com>>=1; } for(i=0;i<8;i--) { TSCLK=0; TIO=dat&0x01; TSCLK=1; dat>>=1; } } uchar Read_1302date(uchar com) //DS1302读数据 { uchar i,dat; TEN=0; TSCLK=0; TEN=1; for(i=0;i<8;i++) { TSCLK=0; TIO=com&0x01; TSCLK=1; com>>=1; } for(i=0;i<8;i++) { TSCLK=0; dat>>=1; if(TIO) dat|=0x80; //如果TIO为高电平写1 否则写0 TSCLK=1; } return dat; } uchar date_BCD(uchar dat) //数据转BCD { uchar dat1,dat2; dat1=dat/10; dat2=dat%10; dat2=dat2+dat1*16; return dat2; } uchar BCD_date(uchar dat) //BCD转数据 { uchar dat1,dat2; dat1=dat/16; dat2=dat%16; dat2=dat2+dat1*10; return dat2; } void main() { init(); Write_1302date(0x8e,0);//关闭写保护 Write_1302date(0x80,date_BCD(30)); //秒 Write_1302date(0x82,date_BCD(15)); //分 Write_1302date(0x84,date_BCD(5)); //时 Write_1302date(0x86,date_BCD(30)); //日 Write_1302date(0x88,date_BCD(9)); //月 Write_1302date(0x8c,date_BCD(17));;//年 Write_1302date(0x8e,0x80);//开启写保护 while(1) { Write_1302date(0x8e,0);//关闭写保护 Sec=BCD_date(Read_1302date(0x81)); Min=BCD_date(Read_1302date(0x83)); Hour=BCD_date(Read_1302date(0x85)); Day=BCD_date(Read_1302date(0x87)); Month=BCD_date(Read_1302date(0x89)); Year=BCD_date(Read_1302date(0x8d)); Write_1302date(0x8e,0x80);//开启写保护 ONE_Write_sfm(7,Year); ONE_Write_sfm(10,Month); ONE_Write_sfm(13,Day); TWO_Write_sfm(6,Hour); TWO_Write_sfm(9,Min); TWO_Write_sfm(12,Sec); } } 1602.h程序如下: #define uchar unsigned char #define uint unsigned int ***it lcden=P3^4; //使能端 ***it lcdrs=P3^5; //数据命令选择端 ***it lcdrw=P3^6; //读写控制端 ***it dula=P2^6; ***it wela=P2^7; uchar code table3[]="Date:20 - - "; uchar code table4[]="Time: - - "; void delay(uint z) //延时函数ms { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } void Write_1602com(uchar com) //1602写命令 { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } void Write_1602date(uchar dat) { lcdrs=1; P0=dat; delay(5); lcden=1; delay(5); lcden=0; } void ONE_Write_sfm(uchar add,uchar date) { uchar shi,ge; shi=date/10; ge=date%10; Write_1602com(0x80+add); Write_1602date(0x30+shi); Write_1602date(0x30+ge); } void TWO_Write_sfm(uchar add,uchar date) { uchar shi,ge; shi=date/10; ge=date%10; Write_1602com(0x80+0x40+add); Write_1602date(0x30+shi); Write_1602date(0x30+ge); } void init() { uchar num; dula=0; wela=0; lcden=0; lcdrw=0; Write_1602com(0x38); Write_1602com(0x01); Write_1602com(0x0c); Write_1602com(0x06); Write_1602com(0x80); for(num=0;num<15;num++) { Write_1602date(table3[num]); delay(5); } Write_1602com(0x80+0x40); for(num=0;num<15;num++) { Write_1602date(table4[num]); delay(5); } }
|
|
相关推荐
10个回答
|
|
哈哈哈 我是新手 程序写的不好 莫见怪
|
|
|
|
是不是因为你1302没有断电,所以继续走
|
|
|
|
是否采用后备电池的问题
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
数据与期望值不一致应该是BCD和十进制没有正确转换或写入的格式不对造成的。
|
|
|
|
写入格式是什么意思?不会吖 我跟我教程做的 BCD好像也是 我看看 |
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
632 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
671 浏览 0 评论
772 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1340 浏览 0 评论
1166 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12057 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 17:55 , Processed in 0.799267 second(s), Total 92, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号