📄 1602-
字号:
#include<reg52.h>
#include<intrins.h>
#include<string.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar datetime[7];
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
sbit rst=P3^5;
sbit sclk=P3^6;
sbit io=P3^7;
uchar *week[]={"SUN","***","MON","TUS","WEN","THU","FRI","SAT"};
uchar tab1[]={"date 00-00-00 "};
uchar tab2[]={"time 00:00:00 "};
uchar datetime[7];
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=112;y>0;y--);
}
void delay_us()
{_nop_();_nop_();}
void DS_write_byte(uchar dat) //向DS1302写一个字节
{
uchar i;
sclk=0;
delay(2);
for(i=0;i<8;i++)
{
io=dat&0x01;
delay_us();
sclk=1;
delay_us();
sclk=0;
dat>>=1;
}
}
uchar DS_read_byte() //从DS1302读一个字节
{
uchar i,dat;
sclk=0;
delay(2);
for(i=0;i<8;i++)
{
dat>>=1;
if(io==1)
dat|=0x80;
sclk=1;
delay_us();
sclk=0;
delay_us();
}
return dat;
}
/*void DS_write_add(uchar add,uchar dat)
{
rst=0;
sclk=0;
rst=1;
DS_write_byte(add);
DS_write_byte((dat/10<<4)|(dat%10));
sclk=1;
rst=0;
}*/
uchar DS_read_add(uchar add)
{
uchar dat0,dat1,dat2;
rst=0;
sclk=0;
rst=1;
DS_write_byte(add);
dat0=DS_read_byte();
sclk=1;
rst=0;
dat1=dat0/16;
dat2=dat0%16;
dat0=dat1*10+dat2;
return dat0;
}
void gettime() //读取当前日期时间
{
uchar i,add=0x81;
for(i=0;i<7;i++)
{
datetime[i]=DS_read_add(add);
add+=2;
}
}
uchar LCD_read_state() //读LCD当前状态
{
uchar state;
rs=0;
rw=1;
delay(5);
en=1;
state=P0;
delay(5);
en=0;
delay(5);
return state;
}
void LCD_write_com(uchar com) //向LCD写命令
{
while( (LCD_read_state()&0x80)==0x80);
rs=0;
rw=0;
delay(5);
en=1;
P0=com;
delay(5);
en=0;
delay(5);
}
void LCD_write_data(uchar dat) //向LCD写数据
{
while( (LCD_read_state()&0x80)==0x80);
rs=1;
rw=0;
delay(5);
en=1;
P0=dat;
delay(5);
en=0;
delay(5);
}
void LCD_position(uchar pos)
{
LCD_write_com(0x80+pos);
}
void display(uchar pos,uchar *s)
{
uchar i;
LCD_position(pos);
for(i=0;i<16;i++)
{
LCD_write_data(s[i]);
delay(1);
}
}
void date(uchar d,uchar *a) //日期时间转换为数字字符
{
a[0]=d/10+'0';
a[1]=d%10+'0';
}
void init() //LCD初始化
{
LCD_write_com(0x38);
LCD_write_com(0x0c);
LCD_write_com(0x06);
LCD_write_com(0x01);
}
void main() //主函数
{
init();
while(1)
{
gettime();
date(datetime[6],tab1+5);
date(datetime[4],tab1+8);
date(datetime[3],tab1+11);
strcpy(tab1+13,week[datetime[5]]);
date(datetime[2],tab2+5);
date(datetime[1],tab2+8);
date(datetime[0],tab2+11);
display(0x00,tab1);
display(0x40,tab2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -