永发信息网

DS1302读出来数据在12864显示00

答案:2  悬赏:80  手机版
解决时间 2021-12-21 22:16
  • 提问者网友:嗝是迷路的屁
  • 2021-12-21 03:35
#define uint unsigned int
#define uchar unsigned char
uchar time[8];
uchar table1[]={" 今天是20 年"};
uchar table2[]={" 9月 1日 星期六"};
uchar table3[]={" 00-00-00 "};
sbit sda = P3^4;
sbit ce =P3^5;
sbit sclk =P3^6;
void write_byte(uchar dat) //写数据
{
uchar i;
for(i=0;i<8;i++)
{
sclk=1;
sda=dat&0x01;
dat=dat>>1;
sclk=0;
}
}
uchar read_byte() //读数据
{
uchar i,date;
for(i=0;i<8;i++)
{
sclk=1;
date=sda|0x80;
sclk=0;
date>>=1;
}
return date/16*10+date%16; //返回BCD码
}
void write_1302(uchar addr,uchar dat) //指定地址写数据
{
ce=0;
ce=1;
write_byte(addr);
write_byte(dat);
ce=0;
}
uchar read_1302(uchar addr) //指定地址读数据
{
uchar temp;
ce=0;
ce=1;
write_byte(addr);
temp=read_byte();
ce=0;
return temp;
}
void init1302() // 初始化
{
write_1302(0x8e,0x00);
write_1302(0x80,0x00);
write_1302(0x82,0x00);
write_1302(0x84,0x00);
write_1302(0x86,0x01);
write_1302(0x88,0x09);
write_1302(0x8a,0x06);
write_1302(0x8c,0x12);
write_1302(0x8e,0x10);
}
void get_time()
{
time[0]=read_1302(0x81); //秒
time[1]=read_1302(0x83); // 分
time[2]=read_1302(0x85); // 时
time[3]=read_1302(0x87); // 日
time[4]=read_1302(0x89); // 星期
time[5]=read_1302(0x8b); //月
time[6]=read_1302(0x8d); //年
}
void gettime()
{
uchar shi,ge,shiri,geri,shishi,geshi,shifen,gefen,shimiao,gemiao;
table3[10]=time[0]%10+'0';
table3[11]=time[0]/10+'0';
table3[7]=time[1]%10+'0';
table3[8]=time[1]/10+'0';
table3[4]=time[2]%10+'0';
table3[5]=time[2]/10+'0';
table2[5]=time[3]%10+'0';
table2[4]=time[3]/10+'0';
table2[14]=time[4]%10+'0';
table2[1]=time[5]%10+'0';
table2[0]=time[5]/10+'0';
table1[11]=time[6]%10+'0';
table1[10]=time[6]/10+'0';
}
最佳答案
  • 五星知识达人网友:笑迎怀羞
  • 2021-12-21 04:10
这个问题分两个层次:可能是读出错误,也可能是写入错误。

用一系列的已知数据,如:2012年、10月、...,写入液晶,看看显示正确否?
全部回答
  • 1楼网友:逃夭
  • 2021-12-21 05:13
读出来的是BCD码,转成10进制步是怎么转的吧?检查你的显示函数是否有问题
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯