📄 ww.c
字号:
/* 本程序所使用CPU为51单片机,时钟为24MHZ,程序主体网上所得,稍加修,念在下初学,还请原作者见谅。特此声明*/
#include <reg51.h>
#include <intrins.h>
#include "LCM1602.h"
#include "DS1302.h"
struct TimerStruct //定义时钟的数据结构
{
unsigned char Year;
unsigned char Month;
unsigned char Day;
unsigned char Week;
unsigned char Hour;
unsigned char Minute;
unsigned char Second;
};
unsigned char DateBuffer[] ={"2007/10/19"}; // 随便设置,不表示显示的初始值,只为方便子程序调用
unsigned char TimeBuffer[] = {"12:30:00"}; //初始值在主程序中设置
unsigned int SecondCounter;//秒计数器(无符号整型)
void timer0(void) interrupt 1 //定时T0溢出中断,每25mS产生一次中断 方式1 9E58
{ unsigned char Temp;
struct TimerStruct RealClock;
TH0=0x9e;//(65536-46080)/256; //重新装入定时25mS的初值到TH0,TL0
TL0=0x58;//(65536-46080)%256;
SecondCounter++; //秒计数器加1
if(SecondCounter==40) //到40,表示1S时间到
{
SecondCounter=0;
/****--以下是读取DS1302的时钟信息,并将结果存储到显示缓冲区中****/
Temp=Read_DS1302_RTC(0x81); //读秒信息
RealClock.Second=Temp;
TimeBuffer[7]=(Temp%16)|0x30;
TimeBuffer[6]=(Temp>>4)|0x30;
Temp=Read_DS1302_RTC(0x83); //读分信息
RealClock.Minute=Temp;
TimeBuffer[4]=(Temp%16)|0x30;
TimeBuffer[3]=(Temp>>4)|0x30;
Temp=Read_DS1302_RTC(0x85); //读时信息
RealClock.Hour=Temp;
TimeBuffer[1]=(Temp%16)|0x30;
TimeBuffer[0]=(Temp>>4)|0x30;
Temp=Read_DS1302_RTC(0x87); //读日信息
RealClock.Day=Temp;
DateBuffer[9]=(Temp%16)|0x30;
DateBuffer[8]=(Temp>>4)|0x30;
Temp=Read_DS1302_RTC(0x89); //读月信息
RealClock.Month=Temp;
DateBuffer[6]=(Temp%16)|0x30;
DateBuffer[5]=(Temp>>4)|0x30;
Temp=Read_DS1302_RTC(0x8d); //读年信息
RealClock.Year=Temp;
DateBuffer[3]=(Temp%16)|0x30;
DateBuffer[2]=(Temp>>4)|0x30;
/*****************---送到LCD上显示出来***********************/
DisplayListChar(0,0,DateBuffer);//刷新LCD上的日期信息
DisplayListChar(0,1,TimeBuffer);//刷新LCD上的时间显示信息
}
}
void main(void){
TMOD=0x01; //T0工作于16位定时功能
TH0=(65536-46080)/256; //T0定时25mS的初值装入TH0,TL0
TL0=(65536-46080)%256;
EA=1; //CPU开中断
ET0=1; //允许T0溢出中断
Delay400Ms();
LCMInit(); //初始化LCD
TR0=1; //启动T0开始工作
while(1){ ; }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -