📄 万年历.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="clock ME-400-A";
uchar code table1[]=" 00:00:00 ";
uchar clk_time[7]; //秒,分,时寄存器数组
sbit T_RST=P2^2;//ds1302-5
sbit T_IO=P2^3;//ds1302-6
sbit T_CLK=P2^4;//ds1302-7
sbit en=P2^5;
sbit rw=P2^6;
sbit rs=P2^7;
sbit led=P1^0;
sbit dula=P1^1;
sbit wela=P1^2;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
uchar num,clock_ss,clock_sg,clock_fs,clock_fg,
clock_ms,clock_mg,
taday_s,taday_g,
yue_s,yue_g,
xq,
year_s,year_g;
/******************DS1302:写入操作(上升沿)*********************/
void write_byte(uchar da)
{
uchar i;
ACC=da;
led=0;
for(i=8;i>0;i--)
{
T_IO=ACC0;
T_CLK=0;
T_CLK=1;
ACC=ACC>>1;
}
}
/******************DS1302:读取操作(下降沿)*****************/
uchar read_byte(void)
{
uchar i;led=0;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
T_CLK = 1;
T_CLK = 0;
ACC7 = T_IO;
}
return(ACC);
}
/******************DS1302:写入数据(先送地址,再写数据)***************************/
void write_1302(uchar addr,uchar da)
{
T_RST=0; //停止工作
T_CLK=0;
T_RST=1; //重新工作
write_byte(addr); //写入地址
write_byte(da);
T_RST=0;
T_CLK=1;
}
/******************DS1302:读取数据(先送地址,再读数据)**************************/
uchar read_1302(uchar addr)
{
uchar temp;
T_RST=0; //停止工作
T_CLK=0;
T_RST=1; //重新工作
write_byte(addr); //写入地址
temp=read_byte();
T_RST=0;
T_CLK=1; //停止工作
return(temp);
}
/***********************延时程序=a*1ms**************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{ led=0;
rs=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
void write_data(uchar date)
{ led=0;
rs=1;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
void init()
{ P0=0xff;
delay(5);
led=1;
P0=0xff;
led=0;
dula=0;
wela=1;
delay(5);
wela=0;//关ME-400开发板数码管
rw=0;
en=0;
write_com(0x38);//设置液晶
write_com(0x0c);//设光标等
write_com(0x06);//写一个字符地址指针加1且光标加1
write_com(0x01);//清屏
write_com(0x80);//设置地址指针
}
void display()
{ clock_ms=clk_time[0]/ 16; clock_mg=clk_time[0]%16;
clock_fs=clk_time[1]/ 16; clock_fg=clk_time[1]%16;
clock_ss=clk_time[2]/ 16; clock_sg=clk_time[2]%16;
taday_s=clk_time[3]/ 16; taday_g=clk_time[3]%16;
yue_s=clk_time[4]/ 16; yue_g=clk_time[4]%16;
xq=clk_time[5]%16;
year_s=clk_time[6]/ 16; year_g=clk_time[6]%16;
write_com(0x80);
write_data(0x30+year_s);
write_data(0x30+year_g);
write_data('/');
write_data(0x30+yue_s);
write_data(0x30+yue_g);
write_data('/');
write_data(0x30+taday_s);
write_data(0x30+taday_g);
write_data('/');
write_data(0x30+xq);
write_com(0x80+0x44);
write_data(0x30+clock_ss);
write_com(0x80+0x45);
write_data(0x30+clock_sg);
write_com(0x80+0x47);
write_data(0x30+clock_fs);
write_com(0x80+0x48);
write_data(0x30+clock_fg);
write_com(0x80+0x4a);
write_data(0x30+clock_ms);
write_com(0x80+0x4b);
write_data(0x30+clock_mg);
}
void main()
{
uchar temp=0x80;
uchar i;
init();
/* for(num=0;num<14;num++)
{
write_data(table[num]);
delay(20);
}*/
write_com(0x80+0x40);
for(num=0;num<15;num++)
{
write_data(table1[num]);
delay(20);
}
/*for(num=0;num<16;num++)
{
write_com(0x18);
delay(20);
}*/
while(1)
{
display();
temp=0x81;
for(i=0;i<7;i++)
{
clk_time[i]=read_1302(temp);
temp+=2;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -