DS1302实时时钟---液晶显示
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while(ms--)
{
for(i = 0;i
//向DS1302写入一字节,根据时序图写函数
//上升沿锁存数据,先发送最低位
void Write_A_Byte_TO_DS1302(uchar x)
{
uchar i;
for(i = 0;i >= 1;
}
}
//从DS1302读取一字节,看时序图写函数
//下降沿锁存数据,先发送最低位
DelayMS(1);
Write_LCD_Command(0x06);
///DS1302中的数据是BCD码存放的,所以将寄存器中的数据转换成十六
进制返回
uchar Get_A_Byte_FROM_DS1302()
{
uchar i,b = 0x00;
for(i = 0;i
//从指定地址读取一个数据
uchar Read_Data(uchar addr)
{
uchar dat;
{
LCD_Busy_Wait();
RS = 0;RW = 0;EN = 0;datport = cmd;EN = 1;DelayMS(1);EN = 0;
}
//初始
Write_LCD_Command(0x38);
DelayMS(1);
Write_LCD_Command(0x01);
EN = 0;DelayMS(1);
return state; //返回状态值
}
*/
//LCD忙检测
void LCD_Busy_Wait()
{
// // while((Read_LCD_State()&0x80) == 0x80); //忙,则等待
//当P0口最高位为1则说明忙
DelayMS(5);
RST = 0;SCLK = 0;RST = 1;
Write_A_Byte_TO_DS1302(addr); //写入地址
dat = Get_A_Byte_FROM_DS1302();//读取数据
SCLK = 1;RST = 0;
return dat;
}
//向指定地址写入数据
void Write_DS1302(uchar addr,uchar dat)
for(i = 0;i
/*
//液晶模块的忙碌状态
uchar Read_LCD_State()
{
uchar state;
RS = 0;RW = 1;EN = 1;DelayMS(1); //根据规定,RS为低电平
//RW为高电平时,可以读状态
//EN使能后,才能进行读写
//延时一会,给硬件反应时间
state = datport; //读P0口的值
{
Write_DS1302(0x8e,0x00); //关闭写保护
Write_DS1302(0x80,0x58); //设置秒
Write_DS1302(0x82,0x59); //设置分
Write_DS1302(0x84,0x23); //设置时
Write_DS1302(0x86,0x31); //设置日
Write_DS1302(0x88,0x12); //设置月
Write_DS1302(0x8a,0x07); //设置星期
Write_DS1302(0x8c,0x05); //设置年
Write_DS1302(0x8e,0x80); //开启写保护
}
//获取当前时间
void GetTime()
{
uchar i,addr = 0x81;
{
SCLK = 0;RST = 1; //高电平使能,SCLK信号线在闲置时为0
Write_A_Byte_TO_DS1302(addr);
Write_A_Byte_TO_DS1302(dat);
SCLK = 0;RST = 0; //低电平关使能
}
//设置初始时间
void Set_InitTime()
sbit f1 = P3;
sbit f2 = P3;
sbit f3 = P3 ;
sbit f4 = P3;
uchar temp1,temp2;
uchar key();
uchar hour_flag,min_flag,second_flag,flag_key=0;
uchar year_flag,month_flag,day_flag,day_up,day_down;
DS1302实时时钟---液晶显示
/*名称:DS1302实时时钟---液晶显示
说明:向DS1302中写入初始时间,再从DS1302中读取时钟数据,时间
可以调节,并在LCD上显示出来。
*/
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
}
//向LCD写入一个字节数据
void Write_LCD_Data(uchar dat)
{
LCD_Busy_Wait();
RS = 1;RW = 0;EN = 0;datport = dat;EN = 1;DelayMS(1);EN = 0;
}
//向LCD写入一个字节命令
void Write_LCD_Command(uchar cmd)
uchar week_flag;
uchar timecount = 0;
uchar month_table[] = {0,32,29,32,31,32,31,32,32,31,32,31,32};
bit flag;
//1、2、3、4、5、6、7分别对应周一至周日
uchar *WEEK[]=
{
***,MON,TUS,WEN,THU,FRI,SAT,SUN
};
//LCD显示缓冲
uchar LCD_DSY_BUFFER1[]={DATE 00-00-00 };
uchar LCD_DSY_BUFFER2[]={TIME 00:00:00 };
//存放日期和时间
uchar DateTime[7];
//延时函数
void DelayMS(uint ms)
{
uchar i;
#define datport P0
sbit IO = P1; //DS1302数据线
sbit SCLK = P1; //DS1302时钟线
sbit RST = P1 ; //DS1302复位线
sbit RS = P2 ; //LCD寄存器选择
sbit RW = P2; //LCD读写控制
sbit EN = P2; //LCD启用
{
for(i = 0;i
//向DS1302写入一字节,根据时序图写函数
//上升沿锁存数据,先发送最低位
void Write_A_Byte_TO_DS1302(uchar x)
{
uchar i;
for(i = 0;i >= 1;
}
}
//从DS1302读取一字节,看时序图写函数
//下降沿锁存数据,先发送最低位
DelayMS(1);
Write_LCD_Command(0x06);
///DS1302中的数据是BCD码存放的,所以将寄存器中的数据转换成十六
进制返回
uchar Get_A_Byte_FROM_DS1302()
{
uchar i,b = 0x00;
for(i = 0;i
//从指定地址读取一个数据
uchar Read_Data(uchar addr)
{
uchar dat;
{
LCD_Busy_Wait();
RS = 0;RW = 0;EN = 0;datport = cmd;EN = 1;DelayMS(1);EN = 0;
}
//初始
Write_LCD_Command(0x38);
DelayMS(1);
Write_LCD_Command(0x01);
EN = 0;DelayMS(1);
return state; //返回状态值
}
*/
//LCD忙检测
void LCD_Busy_Wait()
{
// // while((Read_LCD_State()&0x80) == 0x80); //忙,则等待
//当P0口最高位为1则说明忙
DelayMS(5);
RST = 0;SCLK = 0;RST = 1;
Write_A_Byte_TO_DS1302(addr); //写入地址
dat = Get_A_Byte_FROM_DS1302();//读取数据
SCLK = 1;RST = 0;
return dat;
}
//向指定地址写入数据
void Write_DS1302(uchar addr,uchar dat)
for(i = 0;i
/*
//液晶模块的忙碌状态
uchar Read_LCD_State()
{
uchar state;
RS = 0;RW = 1;EN = 1;DelayMS(1); //根据规定,RS为低电平
//RW为高电平时,可以读状态
//EN使能后,才能进行读写
//延时一会,给硬件反应时间
state = datport; //读P0口的值
{
Write_DS1302(0x8e,0x00); //关闭写保护
Write_DS1302(0x80,0x58); //设置秒
Write_DS1302(0x82,0x59); //设置分
Write_DS1302(0x84,0x23); //设置时
Write_DS1302(0x86,0x31); //设置日
Write_DS1302(0x88,0x12); //设置月
Write_DS1302(0x8a,0x07); //设置星期
Write_DS1302(0x8c,0x05); //设置年
Write_DS1302(0x8e,0x80); //开启写保护
}
//获取当前时间
void GetTime()
{
uchar i,addr = 0x81;
{
SCLK = 0;RST = 1; //高电平使能,SCLK信号线在闲置时为0
Write_A_Byte_TO_DS1302(addr);
Write_A_Byte_TO_DS1302(dat);
SCLK = 0;RST = 0; //低电平关使能
}
//设置初始时间
void Set_InitTime()
sbit f1 = P3;
sbit f2 = P3;
sbit f3 = P3 ;
sbit f4 = P3;
uchar temp1,temp2;
uchar key();
uchar hour_flag,min_flag,second_flag,flag_key=0;
uchar year_flag,month_flag,day_flag,day_up,day_down;
DS1302实时时钟---液晶显示
/*名称:DS1302实时时钟---液晶显示
说明:向DS1302中写入初始时间,再从DS1302中读取时钟数据,时间
可以调节,并在LCD上显示出来。
*/
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
}
//向LCD写入一个字节数据
void Write_LCD_Data(uchar dat)
{
LCD_Busy_Wait();
RS = 1;RW = 0;EN = 0;datport = dat;EN = 1;DelayMS(1);EN = 0;
}
//向LCD写入一个字节命令
void Write_LCD_Command(uchar cmd)
uchar week_flag;
uchar timecount = 0;
uchar month_table[] = {0,32,29,32,31,32,31,32,32,31,32,31,32};
bit flag;
//1、2、3、4、5、6、7分别对应周一至周日
uchar *WEEK[]=
{
***,MON,TUS,WEN,THU,FRI,SAT,SUN
};
//LCD显示缓冲
uchar LCD_DSY_BUFFER1[]={DATE 00-00-00 };
uchar LCD_DSY_BUFFER2[]={TIME 00:00:00 };
//存放日期和时间
uchar DateTime[7];
//延时函数
void DelayMS(uint ms)
{
uchar i;
#define datport P0
sbit IO = P1; //DS1302数据线
sbit SCLK = P1; //DS1302时钟线
sbit RST = P1 ; //DS1302复位线
sbit RS = P2 ; //LCD寄存器选择
sbit RW = P2; //LCD读写控制
sbit EN = P2; //LCD启用