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

📄 clock.c

📁 这是一个关于ARM7的实时时钟的C源代码
💻 C
字号:
/****************************************************************************
* File: clock.c 
* 功能: 运行RTC进行计时,并将所计时间值向 6 数码管输出 
****************************************************************************/
#include  "config.h"

extern void  HC595_Init (void);
extern void  HC595_SendDat (uint8 dat);

extern uint8 UART0_Ini(uint32 baud);
extern void  IRQ_UART0(void);

extern void Disp_CopyRight(void);


//uint8 send_buf[16];           		// 数据缓冲区 
const uint8  DISP_TAB[10] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };

void IRQ_ILR(void) __attribute__ ((interrupt));    // Generate Interrupt 

/****************************************************************************
* 名称:DisText() 
* 功能:显示文本函数 
****************************************************************************/
void DisText(uint8 *p)
{
  while(*p !='\n')
	HC595_SendDat(DISP_TAB[*(p++)]);	// 输出LED显示数据 
}

/*******************************************************************************
*名称: SendTimeRtc() 
*功能: 读取RTC的时间值,并将读出的时分秒值由串口发送到上位机显示 
*******************************************************************************/
void GetTime(void)
{ 
  uint32 times;
  uint8 bak;
  times=CTIME0;                  //读取完整时钟寄存器0
  bak=(times>>16)&0x1F;          //取得时的值 
  send_buf[0]=bak/10;
  send_buf[1]=bak%10;
  bak=(times>>8)&0x3F;           //取得分的值
  send_buf[2]=bak/10;
  send_buf[3]=bak%10;
  bak=times&0x3F;                //取得秒的值
  send_buf[4]=bak/10;
  send_buf[5]=bak%10;
  send_buf[6]='\n';
}

/****************************************************************************
* 名称:RTCIni() 
* 功能:初始化实时时钟。 
* 入口参数:无 
* 出口参数:无 
****************************************************************************/
void  RTCIni(void)
{  PREINT = Fpclk / 32768 - 1;			// 设置基准时钟分频器 
   PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
   
   YEAR = 2004;				   		 	// 初始化年 
   MONTH = 2;				    		// 初始化月 
   DOM = 19;				    		// 初始化日 
   HOUR = 8;
   MIN = 30;
   SEC = 0;
      
   CIIR = 0x01;				    		// 设置秒值的增量产生一次中断 
   CCR = 0x01;				    		// 启动RTC 
}

/*******************************************************************************
*名称: IRQ_ILR(void) 
*功能: 接收秒中断 
*******************************************************************************/
void  IRQ_ILR(void)
{
//    while(0==(ILR&0x01));  // 等待RTC增量中断标志位
	  GetTime();       				//寥∈敝又

⌨️ 快捷键说明

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