此程序时多个子程序构成,包括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下载服务。
相关推荐: