📄 1602and1302.c
字号:
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P3^2;
sbit lcdrw=P3^3;
sbit lcden=P3^4;
sbit ds1302_clk=P1^0;
sbit ds1302_dat=P1^1;
sbit ds1302_rst=P1^2;
sbit ACC_0 = ACC^0;
sbit ACC_1 = ACC^1;
sbit ACC_2 = ACC^2;
sbit ACC_3 = ACC^3;
sbit ACC_4 = ACC^4;
sbit ACC_5 = ACC^5;
sbit ACC_6 = ACC^6;
sbit ACC_7 = ACC^7;
uchar Read(void); //写DS1302操作
void Write(void); //读DS1302操作
uchar ReadRam_Byte(uchar address); //从Ram中读出一个字节
uchar ReadRTC_Byte(uchar address); //从DS1302中读出一个字节
uchar WriteRam_Byte(uchar address,uchar number); //向Ram中写入一个字节
uchar WriteRTC_Byte(uchar address,uchar number); //向DS1302中写入一个字节
uchar ReadSec(void); //从DS1302中读出秒字节
uchar ReadMin(void); //从DS1302中读出分字节
uchar ReadHr(void); //从DS1302中读出时字节
uchar ReadDay(void); //从DS1302中读出日字节
uchar ReadMonth(void); //从DS1302中读出月字节
uchar ReadWeek(void); //从DS1302中读出星期字节
uchar ReadYear(void); //从DS1302中读出年字节
void WriteSec(uchar number); //向DS1302中写入秒字节
void WriteMin(uchar number); //向DS1302中写入分字节
void WriteHr(uchar number); //向DS1302中写入时字节
void WriteDay(uchar number); //向DS1302中写入日字节
void WriteMonth(uchar number); //向DS1302中写入月字节
void WriteWeek(uchar number); //向DS1302中写入星期字节
void WriteYear(uchar number); //向DS1302中写入年字节*/
void WriteControl(uchar number); //向慢速充电控制寄存器写入控制字节
void EnableWP(void); //禁止写保护
void DisableWP(void); //允许写保护
void key(void); //键盘程序
void key_delay(void); //延时程序
void dis_mon_day(void); //显示日 月程序
void dis_hr_min(void); //显示时,分程序
//函数名:Write
//入口参数:
//返回值:
//函数功能:写DS1302操作
//******************************************************
void Write(void) //写DS1302操作
{
ds1302_dat = ACC_0; //写DS1302
ds1302_clk = 1; //时钟上升沿,发送数据有效
ds1302_clk = 0; //清零时钟总线
ds1302_dat = ACC_1;
ds1302_clk = 1; ds1302_clk = 0;
ds1302_dat = ACC_2;
ds1302_clk = 1; ds1302_clk = 0;
ds1302_dat = ACC_3;
ds1302_clk = 1; ds1302_clk = 0;
ds1302_dat = ACC_4;
ds1302_clk = 1; ds1302_clk = 0;
ds1302_dat = ACC_5;
ds1302_clk = 1; ds1302_clk = 0;
ds1302_dat = ACC_6;
ds1302_clk = 1; ds1302_clk = 0;
ds1302_dat = ACC_7;
ds1302_clk = 1; ds1302_clk = 0;
}
//函数名:Read
//入口参数:
//返回:ACC
//函数功能:读DS1302操
//******************************************************
uchar Read(void) //读DS1302操作
{
ACC_0 = ds1302_dat; //读取DS1302数据
ds1302_clk = 1; //时钟下降沿,发送数据有效
ds1302_clk = 0; //清零时钟总线
ACC_1 = ds1302_dat;
ds1302_clk = 1; ds1302_clk = 0;
ACC_2 = ds1302_dat;
ds1302_clk = 1; ds1302_clk = 0;
ACC_3 = ds1302_dat;
ds1302_clk = 1; ds1302_clk = 0;
ACC_4 = ds1302_dat;
ds1302_clk = 1;ds1302_clk = 0;
ACC_5 = ds1302_dat;
ds1302_clk = 1; ds1302_clk = 0;
ACC_6 = ds1302_dat;
ds1302_clk = 1; ds1302_clk = 0;
ACC_7 = ds1302_dat;
ds1302_rst = 0; ds1302_clk = 1;
return ACC;
}
//函数名:ReadRam_Byte
//入口参数:address
//返回:ACC
//函数功能:从RAM中读出一字节
//******************************************************
uchar ReadRam_Byte(uchar address) //从RAM中读出一个字节
{
ds1302_rst = 0; //复位引脚为低电平,所有数据传送中止
ds1302_clk = 0; //清零时钟总线
ds1302_rst = 1; //复位引脚为高电平,逻辑控制有效
ACC = address;
Write(); //写DS1302操作
ds1302_dat = 1;
Read(); //读DS1302操作
ds1302_rst = 0;
return ACC;
}
//函数名:ReadRTC_Byte
//入口参数:address
//返回:ACC
//函数功能:从时钟寄存器中读一字节
//******************************************************
uchar ReadRTC_Byte(uchar address) //从DS1302中读出一个字节
{
ds1302_rst = 0; //复位引脚为低电平,所有数据传送中止
ds1302_clk = 0; //清零时钟总线
ds1302_rst = 1; //复位引脚为高电平,逻辑控制有效
ACC = address;
Write(); //对DS1302写命令字和地址
ds1302_dat = 1;
Read(); //读DS1302操作
return ACC; //返回读取的数据
}
//函数名:WriteRam_Byte
//入口参数:address,number
//返回:ACC
//函数功能:向RAM中写入一个字节
//******************************************************
uchar WriteRam_Byte(uchar address,uchar number) //向RAM中写入一个字节
{
ds1302_rst = 0;ds1302_clk = 0; ds1302_rst = 1;
ACC = address;
Write(); //对DS1302写命令字和地址
ACC = number;
Write(); //对DS1302写命令字和数据
ds1302_rst = 0;
ds1302_clk = 1;
return ACC;
}
//函数名:WriteRTC_Byte
//入口参数:address,number
//返回:ACC
//函数功能:向DS1302中写入一个字节
//******************************************************
uchar WriteRTC_Byte(uchar address,uchar number) //向DS1302中写入一个字节
{
ds1302_clk = 0;
ds1302_rst = 0;ds1302_rst = 1;
ACC = address;
ACC |= 0x80;
Write(); //对DS1302写命令字和地址
ACC = number;
Write(); //对DS1302写命令字和数据
ds1302_rst = 0; ds1302_clk = 1;
return ACC;
}
//函数名:ReadSec
//入口参数:
//返回:ReadRTC_Byte(0x81);
//函数功能:从DS1302中读出秒字节
//******************************************************
uchar ReadSec(void) //从DS1302中读出秒字节
{
return ReadRTC_Byte(0x81);
}
//函数名:ReadSMin
//入口参数:
//返回:ReadRTC_Byte(0x83);
//函数功能:从DS1302中读出分字节
//******************************************************
uchar ReadMin(void) //从DS1302中读出分字节
{
return ReadRTC_Byte(0x83);
}
void delay(uint z)
{uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{ lcdrw=0;
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{IE=0X00;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
}
void main()
{ uchar num;
init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -