⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 ds1602汇编程序还带有protues仿真图
💻 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[] ={"2000/12/20"};	  // 随便设置,不表示显示的初始值,只为方便子程序调用													 
  unsigned char  TimeBuffer[] = {"21:49: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
/************ Init_DS1302_RTC();//初始化DS1302*************/
  Write_DS1302_RTC(0x8e,0x00); //Open Write Protect bit
  Write_DS1302_RTC(0x80,0x00);//Write Second   0
  Write_DS1302_RTC(0x82,0x52);//Write Minute   52
  Write_DS1302_RTC(0x84,0x21);//Write Hour	   21
  Write_DS1302_RTC(0x86,0x14);//Write Day	   14
  Write_DS1302_RTC(0x88,0x10);//Write Month	   10
  Write_DS1302_RTC(0x8a,0x05);//Write Week	   Friday
  Write_DS1302_RTC(0x8c,0x06);//Write Year	   06		 
  Write_DS1302_RTC(0x8e,0x80);//Close Write Protect bit  
  TR0=1;                         //启动T0开始工作
  while(1){ ; } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -