我用DS1302+LCD1602+单片机制作的的电子钟,可以显示,但是时间不会走,而且显示出来的是乱的

我用DS1302+LCD1602+单片机制作的的电子钟,可以显示,但是时间不会走,而且显示出来的是乱的,第1张

DS1302的数据显示存在16进制转换的问题,这个要特别注意。

另外不要随便抄别人的程序,用之前一定要读懂,就是抄也要抄那种有正规注释的程序,这样查找问题比较容易。。

建议你去杜洋的网站去下载一段标准的代码使用。。

下面只是一部分。。

/ DS1302 /

//设置1302的初始时间

void Init_1302(void){//(2008年9月11日23时59分35秒星期四)/

write_clock(0x8e,0x00);//允许写 *** 作

write_clock(0x8c,0x08);//08年

write_clock(0x8a,0x04);//星期

write_clock(0x88,0x09);//月

write_clock(0x86,0x11);//日

write_clock(0x84,0x23);//小时

write_clock(0x82,0x59);//分钟

write_clock(0x80,0x35);//秒

write_clock(0x90,0xa5);//充电

write_clock(0x8c,0x08);//重启

write_clock(0x8e,0x80);//禁止写 *** 作

}

//

//DS1302写数据(底层协议)

void write_clock(unsigned char ord, unsigned char dd){

clock_clk=0;

clock_Rst=0;

clock_Rst=1;

clock_out(ord);

clock_out(dd);

clock_Rst=0;

clock_clk=1;

}

//

//1302驱动程序(底层协议)

void clock_out(unsigned char dd){

ACC=dd;

clock_dat=a0; clock_clk=1; clock_clk=0;

clock_dat=a1; clock_clk=1; clock_clk=0;

clock_dat=a2; clock_clk=1; clock_clk=0;

clock_dat=a3; clock_clk=1; clock_clk=0;

clock_dat=a4; clock_clk=1; clock_clk=0;

clock_dat=a5; clock_clk=1; clock_clk=0;

clock_dat=a6; clock_clk=1; clock_clk=0;

clock_dat=a7; clock_clk=1; clock_clk=0;

}

//

//DS1302写入字节(底层协议)

unsigned char clock_in(void){

clock_dat=1;

a0=clock_dat;

clock_clk=1; clock_clk=0; a1=clock_dat;

clock_clk=1; clock_clk=0; a2=clock_dat;

clock_clk=1; clock_clk=0; a3=clock_dat;

clock_clk=1; clock_clk=0; a4=clock_dat;

clock_clk=1; clock_clk=0; a5=clock_dat;

clock_clk=1; clock_clk=0; a6=clock_dat;

clock_clk=1; clock_clk=0; a7=clock_dat;

return(ACC);

}

//

//DS1302读数据(底层协议)

unsigned char read_clock(unsigned char ord){

unsigned char dd=0;

clock_clk=0;

clock_Rst=0;

clock_Rst=1;

clock_out(ord);

dd=clock_in();

clock_Rst=0;

clock_clk=1;

return(dd);

}

//

//向LCM中填写 年 数据

void lcm_w_yy(void){

if(read_clock(0x8d) != yy){

yy = read_clock(0x8d);

write_com(0x90);

hzkdis("20");

write_com(0x91);

write_data((yy/16)+0x30);

write_data(yy%16+0x30);

write_com(0x92);

hzkdis("年");

} }

//

//向LCM中填写 月 数据

void lcm_w_mo(void){

if(read_clock(0x89) != mo){

mo = read_clock(0x89);

write_com(0x93);

write_data((mo/16)+0x30);

write_data(mo%16+0x30);

write_com(0x94);

hzkdis("月");

lcm_w_yy();//刷新 日

} }

//

//向LCM中填写 日 数据

void lcm_w_dd(void){

if(read_clock(0x87) != dd){

dd = read_clock(0x87);

write_com(0x95);

write_data((dd/16)+0x30);

write_data(dd%16+0x30);

write_com(0x96);

hzkdis("日");

lcm_w_mo();//刷新 小时

} }

//

//星期处理并送入LCM的指定区域

void lcm_w_xq(void){

unsigned char sel;

if(read_clock(0x8b) != xq){

write_com(0x88);

hzkdis("星期");

xq = read_clock(0x8b);

sel = xq%16; //字节低4位的BCD码放入sel

write_com(0x8a);//写入指定区域

if(sel==7) {hzkdis("日");} //

if(sel==6) {hzkdis("六");} //

if(sel==5) {hzkdis("五");} //

if(sel==4) {hzkdis("四");} //

if(sel==3) {hzkdis("三");} //

if(sel==2) {hzkdis("二");} //

if(sel==1) {hzkdis("一");} //星期一

} }

//

//向LCM中填写 小时 数据

void lcm_w_hh(void){

if(read_clock(0x85)!=hh){

hh = read_clock(0x85);

write_com(0x8c);

write_data((hh/16)+0x30);

write_data(hh%16+0x30);

lcm_w_dd();//刷新 分钟

lcm_w_xq();//刷新 分钟

} }

//

//向LCM中填写 分钟 数据

void lcm_w_mm(void){

if(read_clock(0x83)!=mm){

mm = read_clock(0x83);

write_com(0x8d);

write_data(0x3a); //":"

write_data((mm/16)+0x30);

write_data(mm%16+0x30);

write_data(0x3a); //":"

lcm_w_hh();//刷新 秒

} }

//

//向LCM中填写 秒 数据

void lcm_w_ss(void){

if(read_clock(0x81)!=ss){

ss = read_clock(0x81); //更新数据

write_com(0x8f); //秒值在LCM上的写入位置

write_data((ss/16)+0x30); //写十位

write_data(ss%16+0x30); //写个位

lcm_w_mm();//刷新 秒

LED=~LED;

/DS18B20/

Read_18B20();

write_com(0x30); //选择8bit数据流

i=ResultTemperatureH/10;

j=ResultTemperatureH-(i10);

b=ResultTemperatureLH/10;

write_com(0x9D);

write_data(i|0x30);

write_data(j|0x30);

write_data(0x2E);

write_data(b|0x30);

} }

不知道你对硬件是否熟悉,一般即使不写程序,直接给其供电LCD1602也可以显示(背光点亮,第一行全部显示)。你这个连背光都不亮,肯定是硬件有问题用万用表测试一2315脚下5V供电是否正常116脚是否可靠接地

应该延时不够精确引起,不知道你用的是什么型号单片机,DS18B20延时要求很严格,不同单片机执行后延时不同的,而DS18B20要求的延时差一点点就会出现各种奇怪问题,慢慢调整延时试试吧

以上就是关于我用DS1302+LCD1602+单片机制作的的电子钟,可以显示,但是时间不会走,而且显示出来的是乱的全部的内容,包括:我用DS1302+LCD1602+单片机制作的的电子钟,可以显示,但是时间不会走,而且显示出来的是乱的、LCD1602液晶显示问题(数字钟。DS1302时钟芯片)、用lcd1602显示DS18B20的 温度,为什么温度值一直是25.5度,然而改了定义类型,就变成15.9度,急求解答。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9316561.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存