第一范文网 - 专业文章范例文档资料分享平台

1602液晶显示DS1302实时时间程序

来源:用户分享 时间:2021-04-05 本文由任江南江北 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

此程序时多个子程序构成,包括main.c,///lcd.c////lcd.h//ds1302.c////ds1302.h/时使用1602液晶显示屏,将DS1302的时间显示出来,并且可使用串口将时间更新,格式位2016052108250006,即年月日时分秒周

/////////////////////////
///////////main.c///////
////////////////////////
#include <reg52.h>
#include<intrins.h>
#include <stdio.h>
#include "ds1302.h"
#include "lcd.h"

#define Key_Port P1^0 //定义按键端口
#define Duan_Port P0 //定义数码管数据端口
#define Wei_Port P2 //定义数码管位选端口


bit Read_TimeFlag;//定义读时间标志
bit SetFlag; //更新时间标志位
unsigned char time_buf2[16];


void Delay_2Us (uchar t); // 微秒级延时函数
void Delay_Ms (uchar t); // 毫秒级延时函数

void Init_Timer0 (); // 定时器初始化
void UART_Init(void); //串口初始化
/*------------------------------------------------
主函数
------------------------------------------------*/

void main()
{
uchar i;
LCD_Init();
Delay_Ms(20);
LCD_Clear();
Init_Timer0();
Ds1302_Init();
UART_Init();
Ds1302_Read_Time() ;
if((Time_Data[2]+Time_Data[7])==0)
Ds1302_Write_Time();
while(1) //主循环
{

if(SetFlag) //如果接收到串口信息则更新时钟
{
for(i=0;i<8;i++)
{
Time_Data[i]=time_buf2[2*i]*10+time_buf2[2*i+1];
}//数据整合,如2个数 1和5整合成15
Ds1302_Write_Time();
SetFlag=0; //时钟信息更新后标志位清零
}



if(Read_TimeFlag==1)
{
Read_TimeFlag = 0;
Ds1302_Read_Time();


LCD_Write_Com (0x80+0x40);//在第二行显示
LCD_Write_Data(0x8d);
LCD_Write_Data(0x8d);
LCD_Write_Data(0x8d);
LCD_Write_Data('0'+Time_Data[4]/10); //时
LCD_Write_Data('0'+Time_Data[4]%10);
LCD_Write_Data(':');
LCD_Write_Data('0'+Time_Data[5]/10); //分
LCD_Write_Data('0'+Time_Data[5]%10);
LCD_Write_Data(':');
LCD_Write_Data('0'+Time_Data[6]/10); //秒
LCD_Write_Data('0'+Time_Data[6]%10);


LCD_Write_Com (0x80); //在第一行显示
LCD_Write_Data(0x8d);
LCD_Write_Data(0x8d);//添加空格
LCD_Write_Data('0'+Time_Data[0]/10);
LCD_Write_Data('0'+Time_Data[0]%10); //显示年的前两位。。即 2 0
LCD_Write_Data('0'+Time_Data[1]/10);
LCD_Write_Data('0'+Time_Data[1]%10); //以上四行显示完整年份
LCD_Write_Data('-');
LCD_Write_Data('0'+Time_Data[2]/10); //月
LCD_Write_Data('0'+Time_Data[2]%10);
LCD_Write_Data('-');
LCD_Write_Data('0'+Time_Data[3]/10); //日
LCD_Write_Data('0'+Time_Data[3]%10);
LCD_Write_Data(0x8d);
LCD_Write_Data(0x8d);
LCD_Write_Data('0'+Time_Data[7]%10); //星期
}
}
}
/*------------------------------------------------
延时函数
------------------------------------------------*/
void Delay_2Us(uchar t)
{
while(t--);
}
void Delay_Ms(uchar t)

{
while (t--)
{
Delay_2Us(245);
Delay_2Us(245);
}
}



/*------------------------------------------------
初始化定时器函数
----------------

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新高中教育1602液晶显示DS1302实时时间程序全文阅读和word下载服务。

1602液晶显示DS1302实时时间程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1180661.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top