📄 ds1302.c
字号:
#include<reg51.h>
#include<uint.h>
#include<delay.h>
uchar ds_time[]={"Time:"};
uchar ds_date[]={"Date:"};
uchar week[]={"Week:"};
uchar heng[]={"-"};
uchar td[]={"0123456789"};
uchar ten=0;
sbit ds1302_rs=P2^0;
sbit ds1302_clk=P2^1;
sbit ds1302_dat=P2^2;
sbit lcd_rs=P3^5;
sbit lcd_rw=P3^6;
sbit lcd_ep=P3^7;
void write_ds1302_dat(uchar cmd) //写入时钟一个字节
{
uchar i;
for(i=0;i<8;i++)
{
cmd=cmd>>1;
ds1302_dat=CY;
ds1302_clk=1;
ds1302_clk=0;
}
}
uchar read_ds1302_dat(void) //读时钟一个字节
{
uchar i;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
if(ds1302_dat)ACC=ACC|0x80;
ds1302_clk = 1;
ds1302_clk= 0;
}
ds1302_rs = 0;
return(ACC);
}
uchar read_ds1302(uchar ord1) //读时钟
{
uchar dd=0;
ds1302_rs=0;
ds1302_clk=0;
ds1302_rs=1;
write_ds1302_dat(ord1);
dd=read_ds1302_dat();
ds1302_rs=0;
return(dd);
}
void write_ds1302(uchar ord2,uchar dd) //写时钟
{
ds1302_rs=0;
ds1302_clk=0;
ds1302_rs=1;
write_ds1302_dat(ord2);
write_ds1302_dat(dd);
ds1302_rs=0;
}
void inti_ds1302()
{
ds1302_rs=0;
ds1302_clk=0;
ds1302_dat=0;
/* write_ds1302(0x8e,0x00); //打开写保护
write_ds1302(0x80,0x23); //启动时钟,并设置秒
write_ds1302(0x82,0x43); //分
write_ds1302(0x84,0x15); //时
write_ds1302(0x86,0x03); //日
write_ds1302(0x88,0x03); //月
write_ds1302(0x8a,0x02); //星期
write_ds1302(0x8c,0x10); //年
write_ds1302(0x90,0xa5); //启动充电器
write_ds1302(0x8e,0x80); //关写保护 */
}
void lcd_enable()
{
lcd_rs=0;
lcd_rw=0;
lcd_ep=0;
delay(4);
lcd_ep=1;
}
void lcd_inti()
{
P1=0x3c; //显示 模式设置
lcd_enable();
P1=0x08; //显示关闭(光标返回00地址)
lcd_enable();
P1=0x01; //清显示
lcd_enable();
P1=0x06; //显示光标移动设置
lcd_enable();
P1=0x0c; //开显示及光标设置
lcd_enable();
}
write_lcd(uchar x)
{
P1=x;
lcd_rs=1;
lcd_rw=0;
lcd_ep=0;
delay(4);
lcd_ep=1;
}
void c_a_dp(uchar asd)
{
ten=0;ten=asd&0xf0;ten=ten>>4;asd=asd&0x0f;
write_lcd(td[ten]);
write_lcd(td[asd]);
}
void main()
{
uchar s=0,cou;
P1=0x00;
inti_ds1302();
lcd_inti();
do{P1=0x80;
lcd_enable();
s=read_ds1302(0x89);
for(cou=0;cou<5;cou++)
{write_lcd(ds_time[cou]);}
s=read_ds1302(0x85); //时
c_a_dp(s);
write_lcd(heng[0]);
s=read_ds1302(0x83); //分
c_a_dp(s);
write_lcd(heng[0]);
s=read_ds1302(0x81); //秒
c_a_dp(s);
P1=0xc0;
lcd_enable();
for(cou=0;cou<5;cou++)
{write_lcd(week[cou]);}
s=read_ds1302(0x8b); //星期
write_lcd(td[s-1]);
P1=0x90;
lcd_enable();
for(cou=0;cou<5;cou++)
{write_lcd(ds_date[cou]);}
s=read_ds1302(0x87); //日
c_a_dp(s);
write_lcd(heng[0]);
s=read_ds1302(0x89); //月
c_a_dp(s);
write_lcd(heng[0]);
s=read_ds1302(0x8d); //年
c_a_dp(s);
} while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -