void write_com(uchar com)
{
rs=0;
wr=0;
P0=com;
en=1;
delay(5);
en=0;
}
void write_data(uchar date)
{
rs=1;
wr=0;
P0=date;
en=1;
delay(5);
en=0;
}
void write_string(uchar x,uchar y,uchar *s)
{
if(y==0)
write_com(0x80+x);
else
write_com(0xc0+x);
while(*s)
{
write_data(*s);
s++;
}
}
void write_sfm(uchar x,uchar d)
{
uchar shi,ge;
shi=d/10;
ge=d%10;
write_com(0xc0+x);
write_data(tab[shi]);
write_data(tab[ge]);
}
上面的是1602的显示程序,包括读写。
下面的是从DS1302读写数据:
void set_ds(uchar add,uchar date)//设置1302的时间
{
write_ds(0x8e,0x00);
write_ds(add,date);
write_ds(0x8e,0x80);
}
void inputbyte(uchar add)//写字节
{
uchar i;
ACC=add;
for(i=8;i>0;i--)
{
dsio=ACC0;
dsclk=1;
dsclk=0;
ACC=ACC>>1;
}
}
uchar outputbyte(void)//读字节
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=dsio;
dsclk=1;
dsclk=0;
}
return ACC;
}
void write_ds(uchar add,uchar date)//将数据写入指定的地址中
{
dsrst=0;
dsclk=0;
dsrst=1;
inputbyte(add);
inputbyte(date);
dsclk=1;
dsrst=0;
}
uchar read_ds(uchar add)//从指定的地址读取1302的数据
{
uchar date;
dsrst=0;
dsclk=0;
dsrst=1;
inputbyte(add);
date=outputbyte();
dsclk=1;
dsrst=0;
return (date);
}