ds1302时钟lcd1602显示(可以按键设置时钟)代码
时间: 2023-05-16 12:01:20 浏览: 224
DS1302时钟LCD1602显示(可以按键设置时钟).rar_DS1302时钟lcd1602显示_lcd1602显示时钟_可以
5星 · 资源好评率100%
DS1302是一种实时时钟芯片,常用于单片机的时钟系统。结合LCD1602显示屏,可以实现显示时间的功能。下面提供一个基于Keil环境下的51单片机的DS1302时钟LCD1602显示代码,同时可以利用按键设置时钟。
代码中使用了DS1302和LCD1602的驱动程序,需要预先调用相关的库文件。同时,通过定义多个函数分别实现初始化、显示、设置时间等功能。
代码如下:
#include<reg52.h>
#include<intrins.h>
#include<DS1302.h>
#include<LCD1602.h>
sbit Key1=P3^2; //定义按键
sbit Key2=P3^3;
sbit write=P0^0; //定义DS1302写控制信号
sbit read=P0^1; //定义DS1302读控制信号
sbit ck=P0^2; //定义DS1302时钟控制信号
void Delay(unsigned int n) //延时函数
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < 120; j++)
;
}
void Main() //主函数
{
DS1302_Init(); //DS1302初始化
LCD1602_Init(); //LCD1602初始化
Set_K(); //设置K值
while (1)
{
unsigned char key=i; //按键变量
if (Key1==0) //判断按键
{
Delay(10);
if (Key1==0)
{
key=1; //设置按键值
}
while(!Key1); //等待按键释放
}
if (Key2==0)
{
Delay(10);
if (Key2==0)
{
key=2;
}
while(!Key2);
}
switch(key) //判断按键值
{
case 1:Set_Time();break; //设置时间
case 2:LCD_ShowTime();break; //显示时间
}
}
}
void Set_Time() //设置时间函数
{
unsigned char key; //按键变量
LCD_Clear(); //清屏
LCD_WriteString("Please set time:"); //显示提示信息
LCD_SetPosition(2, 0);
while (1) //等待按键
{
if (Key1==0)
{
Delay(10);
if (Key1==0)
{
key=1; //设置按键值
}
while(!Key1);
}
if (Key2==0)
{
Delay(10);
if (Key2==0)
{
key=2;
}
while(!Key2);
}
switch(key) //根据按键值设置时间
{
case 1: //设置时钟值
LCD_Clear();
LCD_WriteString("Please set hour:");
DS1302_Set(0x80); //打开写保护
DS1302_Set(0x82,10); //设置地址,初始值为10
while (key!=3)
{
if (Key1==0)
{
Delay(10);
if (Key1==0)
{
if (DS1302_Get(0x82)>=23) //判断最大值
{
DS1302_Set(0x82,0); //超过最大值则归零
}
else
{
DS1302_Set(0x82,DS1302_Get(0x82)+1); //递增1
}
key=3;
}
while(!Key1);
}
if (Key2==0)
{
Delay(10);
if (Key2==0)
{
DS1302_Set(0x82, 0); //重置
key=3;
}
while(!Key2);
}
}
DS1302_Set(0x80); //关闭写保护
break;
case 2: //设置分钟值,代码与设置小时值类似,略
case 3: //设置秒值,代码与设置小时值类似,略
case 4: //设置日期,代码略
case 5: //设置月份,代码略
case 6: //设置星期几,代码略,注意星期几的取值范围
case 7: //设置年份,代码略
}
if (key>=7) //设置完毕
{
break;
}
}
}
void LCD_ShowTime() //显示时间函数
{
DS1302_GetTime(); //获取时间
LCD_WriteString("Now time is:");
LCD_SetPosition(2, 0);
LCD_WriteNum(DS1302_Get(0x82));
LCD_WriteString(":");
LCD_WriteNum(DS1302_Get(0x84));
LCD_WriteString(":");
LCD_WriteNum(DS1302_Get(0x86));
LCD_WriteString(" ");
LCD_WriteNum(DS1302_Get(0x88));
LCD_WriteString("/");
LCD_WriteNum(DS1302_Get(0x8A));
LCD_WriteString("/");
LCD_WriteNum(DS1302_Get(0x8C));
}
以上是一个基于Keil环境下的51单片机的DS1302时钟LCD1602显示代码,同时可以利用按键设置时钟。需要注意的是,此代码仅供参考,需要根据实际连接情况和要求进行相应调整。
阅读全文