⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602and1302.c

📁 时钟芯片的操作
💻 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 + -