完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
`#include #include #define uint unsigned int #define uchar unsigned char #define LCD1602_IO P0 ***it rst=P3^4;//是由T0非控制当为1的时候没被选中,当为0的时候选中。 ***it sclk=P3^3; ***it io=P3^2; ***it E=P3^5;//1602的EA ***it 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(); init(); 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=dat; E=1; delay_ms(2); E=0;delay_ms(2); } void wr_dat(uchar dat)//1602写数据函数; { E=0; RS=1; LCD1602_IO=dat; 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个字节函数; { uchar i; 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< } sclk=0; } return(date); } void write_date(uchar address,uchar date)//针对某个字节写; { rst=1;//是由T0非控制当为1的时候没被选中,当为0的时候选中 _nop_(); sclk=0; _nop_(); rst=0; _nop_(); write_byte(address); write_byte(date); rst=1; _nop_(); sclk=1; io=1; } uchar read_date(uchar address)//针对某个字节读; { uchar date; rst=1;//是由T0非控制当为1的时候没被选中,当为0的时候选中 _nop_(); sclk=0; _nop_(); rst=0; _nop_(); write_byte(address); date=read_byte(); rst=1; _nop_(); sclk=1; io=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()//时钟初始化 { uchar i; _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() { uchar i; for(i=0;i<7;i++) { init_time[i]=read_date(read_address[i]); } } 我的液晶上面显示独到的数据总是??,那就是读到的都是0xff,我觉得我的程序不会错啊!那么简单了,会不会是电路错了啊!` |
|
相关推荐
11个回答
|
|
是不是你的1302都还在写保护。给1302 0x8e写一个解除写保护的命令;
|
|
|
|
还有可能是根本没有读到东西
|
|
|
|
|
|
求问下,就是在读数据的时候对他写地址的话,写保护开了,是不是地址也写不进去啊!所以就读不出来
|
|
|
|
可能根本就没有读到数据,怀疑是电路问题把电路贴上来看一下
|
|
|
|
按你的程序1602的RW引脚应该接地,不知道电路图怎么样?
|
|
|
|
我的情况变了我换了个ds1302,以后就有数字了!我是怀疑我之前USB封装画错了!导致电源接反!烧掉过芯片所以就换了个!但是不是我初始化后的时间,就算我把初始化里面的时间改掉了以后!读出的数据还是不变!而且也不会变化!而且我测量了晶振的两个管脚!一个是2.5V一个就是0V,会不会是晶振没有起振啊!
|
|
|
|
|
|
|
|
楼主你的问题解决了吗,我也碰到同一个问题
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
727 浏览 0 评论
815 浏览 0 评论
850 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
823 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1274 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11816 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 00:26 , Processed in 0.619476 second(s), Total 64, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号