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

📄 timer.c

📁 收集到的一些常用功能模块
💻 C
字号:
#include<reg52.h>
#include"Retype.h"
#include"YM12864R.h"
#include"mac_52.h"
#include"timer.h"

#define MAC_SetEvent(event) event = 1
#define MAC_ClrEvent(event) event = 0
#define MAC_GetEvent(event) event

//--------------------------------------------------------
#define cnComCount   4
#define cnTimeIndex  0
#define cnDataIndex  1
#define cnWeekIndex  2
TTime CurrTime;
TDate CurrDate;
TWeek CurrWeek;
int8u TimeCount;
bit TimeSecEv;
bit TimeMinEv;
bit TimeHouEv;
bit TimeDayEv;
TLcd code Common[cnComCount]={{(int8u)emCXTime,(int8u)emTime,(int8u)emCountTime,"时间:",&CurrTime},
                     {(int8u)emCXData,(int8u)emData,(int8u)emCountData,"日期:",&CurrDate},
                     {(int8u)enCXDataCount,(int8u)emWeek,(int8u)emCountWeek,"星期",&CurrWeek},
		     {0,0,0,""}};
int8u code WeekChina[7][3]={"天","一","二","三","四","五","六"};

//-------------------------------------------------
void DelayMs(int16u time)
{
  int16u i;
  while(--time)
  {
    for(i=0;i<200;i++)
    {
       continue;
    }	
  }
}

/**
***函数名称:DisIntToChar
***说明:仅用于100范围内的显示
**/
void DisIntToChar(int8u Datas)  
{
  int8u dat;
  dat = Datas/10 + 0x30;
  LcdWriteData(dat);
  dat = Datas%10 + 0x30;
  LcdWriteData(dat);
}

void DisCommon(void)
{
  int8u i;
  LcdInit();
  for(i=0;i<cnComCount;i++)
  {
    LcdWriteString(Common[i].Lcdx,Common[i].Lcdy,Common[i].Com);
  }
}
void FlashTime(void)
{
  LcdSetXY(Common[cnTimeIndex].Lcdx+Common[cnTimeIndex].Count,Common[cnTimeIndex].Lcdy);
  DisIntToChar(Common[cnTimeIndex].Dat.TTim->Hou);
  LcdWriteData(':');
  DisIntToChar(Common[cnTimeIndex].Dat.TTim->Min);
}
void FlashData(void)
{
  LcdSetXY(Common[cnDataIndex].Lcdx+Common[cnDataIndex].Count,Common[cnDataIndex].Lcdy);
  DisIntToChar(Common[cnDataIndex].Dat.TDat->Yea);
  LcdWriteData('-');
  DisIntToChar(Common[cnDataIndex].Dat.TDat->Mon);
  LcdWriteData('-');
  DisIntToChar(Common[cnDataIndex].Dat.TDat->Day);
}
void FlashWeek(void)
{
  LcdSetXY(Common[cnWeekIndex].Lcdx+Common[cnWeekIndex].Count,Common[cnWeekIndex].Lcdy);
  LcdWriteStr(WeekChina[*Common[cnWeekIndex].Dat.TWee]);
}

void TimeInit(void)
{
  TMOD = 0x01;  //定时器1不设置,定时器0为16位时方式,不受外边引脚控制
  TH0 = cnTH0;
  TL0 = cnTL0;
  TimeCount = 0;
  TimeSecEv = 0;
  TimeSecEv = 0;
  TimeMinEv = 0;
  TimeHouEv = 0;
  TimeDayEv = 0;
  CurrTime.Hou = 23;
  CurrTime.Min = 59;
  CurrTime.Sec = 0;
  CurrDate.Yea = 06;
  CurrDate.Mon = 12;
  CurrDate.Day = 15;
  CurrWeek = emTue;
  MAX_SET0Int();   //开定时器0中断 
  MAC_SEI();       //开全局中断
  MAC_SetUseT0();  //启动定时器0
}
uchar code Welcome[4][10]={"欢迎使用","好好学习","努力奋斗","积极向上"};

void main(void)
{
  int8u i;
  LcdInit();
  //DelayMs(10);
  for(i=0;i<4;i++) 
  {
    LcdWriteString(1,i,Welcome[i]);
  }  
  DelayMs(1000);
  TimeInit();
  DisCommon();
  FlashTime();
  FlashData();
  FlashWeek();
  while(1)
  {
    if(MAC_GetEvent(TimeMinEv)) 
    {
      FlashTime(); 
      MAC_ClrEvent(TimeMinEv);
      if(MAC_GetEvent(TimeDayEv))
      {
        if(CurrWeek==emSat)
          CurrWeek = emSun;
        else
          CurrWeek++;
        FlashData();
        FlashWeek();
        MAC_ClrEvent(TimeDayEv);
      } 
    }
  }
}

void Int_T0(void)  interrupt VECT_T0
{
  TH0 = cnTH0;
  TL0 = cnTL0;
  TimeCount++;
  if(TimeCount>=cnOneSec)
  {
    TimeCount = 0;
    MAC_SetEvent(TimeSecEv);
    CurrTime.Sec++;
    if(CurrTime.Sec>=cnOneMin)  //=60 second
    {
      CurrTime.Sec = 0;
      MAC_SetEvent(TimeMinEv);  //set time of mintime
      CurrTime.Min++;
      if(CurrTime.Min>=cnOneHour)
      {
        CurrTime.Min = 0;
        MAC_SetEvent(TimeHouEv);
        CurrTime.Hou++;  
        if(CurrTime.Hou>=cnOneDate)
        {
          CurrTime.Hou = 0;
          MAC_SetEvent(TimeDayEv);
        }
      }      
    }
  }
}

int8u code MonDates[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int8u JudgeWeekDay(TDate curdate)
{
  
}



⌨️ 快捷键说明

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