完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
程序如下:
#include #define uchar unsigned char #define uint unsigned int uchar time[7]={13,6,4,17,11,15,30};//初值年周月日时分秒 uchar write[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //1302写的地址 uchar read[7]={0x8d,0x8b,0x89,0x87,0x85,0x81,0x81}; //1302读的地址 ***it io =P1^5; ***it sck=P1^6; ***it rst=P1^7; ***it LED_RS=P2^5; ***it LED_RW=P2^6; ***it LED_EN=P2^7; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*******************1602部分*****************************************/ void LED1602_com(uint com) { LED_RS=0; LED_RW=0; LED_EN=0; P0=com; delay(5); LED_EN=1; delay(5); LED_EN=0; } void LED1602_date(uint date) { LED_RS=1; LED_RW=0; LED_EN=0; P0=date; delay(5); LED_EN=1; delay(5); LED_EN=0; } void LED1602_start() //1602初始化 { LED1602_com(0x38); LED1602_com(0x0c); LED1602_com(0x06); LED1602_com(0x01); } /**************************1302部分******************************/ void write_ds1302s(uchar dat) //传数据(读写) { uchar i; for(i=0;i<8;i++) { sck=0; io=dat&0x01; //低字节开始传 dat=dat>>1; sck=1; } } void write_ds1302(uchar add,uchar dat) { rst=0; delay(2); sck=0; rst=1; write_ds1302s(add); write_ds1302s(dat); rst=0; delay(2); sck=1; io=1; } uchar read_ds1302(uchar add) { uchar i,value; rst=0; delay(2); sck=0; rst=1; write_ds1302s(add); for(i=0;i<8;i++) { value=value>>1; sck=0; if(io) value=value|0x80; sck=1; } rst=0; delay(2); sck=0; io=1; sck=1; return value; } void write_rtc() { uchar i,j; for(i=0;i<7;i++) //转换BCD码 { j=time[i]/10; time[i]=time[i]%10; time[i]=time[i]+j*16; } write_ds1302(0x8e,0x00); //去除写保护 for(i=0;i<7;i++) { write_ds1302(write[i],time[i]); } write_ds1302(0x8e,0x80); //加写保护 } void read_rtc() //读出1302 { uchar i; for(i=0;i<7;i++) { time[i]=((read_ds1302(read[i])&0xf0)>>4))*10+(read[i]&0x0f); } } void main() { uchar i; LED1602_start(); write_rtc(); while(1) { read_rtc(); LED1602_com(0x80+0x00); LED1602_date(time[4]/10+0x30); LED1602_date(time[4]%10+0x30); LED1602_date(':'); LED1602_date(time[5]/10+0x30); LED1602_date(time[5]%10+0x30); LED1602_date(':'); LED1602_date(time[6]/10+0x30); LED1602_date(time[6]%10+0x30); LED1602_date(' '); LED1602_date(' '); } } 显示时分秒都显示I5,这什么问题阿?帮忙看下哪里错了。谢谢各位 |
|
相关推荐
2个回答
|
|
void read_rtc() //读出1302
{ uchar i; for(i=0;i<7;i++) { time[i]=((read_ds1302(read[i])&0xf0)>>4))*10+(read_ds1302(read[i])&0x0f); } } 这里我打错了,但还是显示I5 |
|
|
|
怎么没人阿??
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
510 浏览 0 评论
792 浏览 0 评论
833 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
797 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1244 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11814 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 14:18 , Processed in 0.624397 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号