📄 getdata.h
字号:
void dmsec(unsigned int count)//
{
unsigned char i;
while(count--)
{for(i=0;i<115;i++);}
}
void tmreset(void)//
{
unsigned char i;
TMDAT=0;
for(i=0;i<103;i++);
TMDAT=1;
for(i=0;i<4;i++);
}
bit tmrbit(void)////
{
unsigned int i;
bit dat;
TMDAT=0;
i++;
TMDAT=1;
i++;
i++;
dat=TMDAT;
for(i=0;i<8;i++);
return(dat);
}
unsigned char tmrbyte(void)//
{
unsigned char i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmrbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void tmwbyte(unsigned char dat)//
{
unsigned char j,i;
bit testb;
for(j=1;j<=8;j++)
{ testb=dat&0x01;
dat=dat>>1;
if(testb)
{ TMDAT=0;//0
i++;i++;
TMDAT=1;
for(i=0;i<8;i++); }
else
{TMDAT=0;//0
for(i=0;i<8;i++);
TMDAT=1;
i++;i++;}
}
}
void tmstart(void)//ds1820
{ tmreset();//
dmsec(1);//
tmwbyte(0xcc);//
tmwbyte(0x44);// 44H,
}
void tmrtemp(void)//
{
unsigned char a,b;
tmreset();//
dmsec(1);//
tmwbyte(0xcc);//
tmwbyte(0xbe);//
a=tmrbyte();//
b=tmrbyte();//
if(b>0x7f)//1
{a=~a; b=~b+1; //
fg=0; //fg=0
}
else fg=1;
sdata=a/16+b*16;//
xiaoshu1=(a&0x0f)*10/16;//
xiaoshu2=(a&0x0f)*100/16%10;//
xiaoshu=xiaoshu1*10+xiaoshu2;//
}
void DS18B20PRO(void)
{ tmstart();
tmrtemp();
}
/*****************************************************************************/
//定义DS1302时钟接口
sbit clock_clk = P2^5;//ds1302_clk(时钟线)
sbit clock_dat = P2^6;//ds1302_dat(数据线)
sbit clock_Rst = P2^4;//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;
/*****************************************************************************/
//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);
}
/*****************************************************************************/
//常用时钟数据读取
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);//年
read_clock(0x81);//读取秒数据
mm = read_clock(0x83);//读取分钟数据
read_clock(0x85);//小时
dd = read_clock(0x87);//日
read_clock(0x89);//月
xq = read_clock(0x8b);//星期
read_clock(0x8d);//年
}
/*****************************************************************************/
//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 Init_1302(void){//(2007年1月1日00时00分00秒星期一)
write_clock(0x8e,0x00);//允许写操作
/* write_clock(0x8c,0x08);//年
write_clock(0x8a,0x04);//星期
write_clock(0x88,0x01);//月
write_clock(0x86,0x10);//日
write_clock(0x84,0x12);//小时
write_clock(0x82,0x36);//分钟
write_clock(0x80,0x00);//秒*/
write_clock(0x90,0xa5);//充电
write_clock(0x8e,0x80);//禁止写操作
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -