标题:
51单片机控制ds1302和dht11显示到oled屏问题求指导
[打印本页]
作者:
xy1010
时间:
2020-12-2 01:08
标题:
51单片机控制ds1302和dht11显示到oled屏问题求指导
51单片机控制ds1302和dht11显示到oled屏上,但是刚开始的时候显示正常,后面oled上的时间就停止,不刷新了。
作者:
minileo5
时间:
2020-12-4 15:30
大概率是程序有bug吧,能正常显示说明硬件和电路没有走错
作者:
suncat0504
时间:
2020-12-5 11:37
开始能显示一段时间,说明显示以及驱动都没有问题。后面显示停止,说明:
1、时间的现实,不是以中断方式显示的。
2、后面的什么处理,进入了某个循环。导致没有退出去执行显示处理。
你检查程序的重点在于,在执行显示处理以后,是不是又有什么处理进入了循环,导致显示处理部分不能被调用。如果没有死循环,那是不是程序跑偏了,需不需要加个看门狗。
我个人怀疑,你后面有键盘处理部分,在这个部分有循环,没有退出。后者因为有其他中断处理导致显示处理被干扰。
作者:
xy1010
时间:
2020-12-6 13:17
解决了,就是要把定时函数放入主函数while循环里面,就不会停止了
作者:
oplink
时间:
2020-12-7 16:28
/*****************************************************************************/
//定义DS1302时钟接口
sbit clock_clk = P1 ^ 4;//ds1302_clk(时钟线)
sbit clock_dat = P1 ^ 3;//ds1302_dat(数据线)
sbit clock_Rst = P1 ^ 2;//ds1302_Rst(复位线)
/*****************************************************************************/
//定义累加器A中的各位
sbit a0 = ACC ^ 0;
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
//常用时钟数据读取
void read_clockS(void)
{
ss = read_clock(0x81);//读取秒数据
mm = read_clock(0x83);//读取分钟数据
hh = read_clock(0x85);//小时
dd = read_clock(0x87);//日
mo = read_clock(0x89);//月
xq = read_clock(0x8b);//星期
yy = read_clock(0x8d);//年
}
/*****************************************************************************/
//设置1302的初始时间
void Init_1302(void)//(2010年1月1日00时00分00秒星期一)
{
write_clock(0x8e,0x00);//允许写操作
write_clock(0x8c,0x10);//年
write_clock(0x8a,0x01);//星期
write_clock(0x88,0x01);//月
write_clock(0x86,0x01);//日
write_clock(0x84,0x00);//小时
write_clock(0x82,0x00);//分钟
write_clock(0x80,0x00);//秒
write_clock(0x90,0xa5);//充电
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);
}
//DS1302驱动程序
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1