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

📄 main.c

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

uint8 MESSAGE[]="RTC Time is:";

uint8 send_buf[16];           		// 数据缓冲区 

extern void ChkBusy();				// 检查总线是否忙 
extern void WrOp(uint8 dat);		// 写操作数函数  
extern void WrDat(uint8 dat);		// 写数据函数 
extern 	void lcd_init(void);		// lcd初始化函数 
extern 	void DisText(uint8 addr,uint8 *p); 	// 显示文本函数 

extern uint8 UART0_Ini(uint32 baud,UARTMODE set);	// 初始化串口0. 设置其工作模式及波特率 
extern void  IRQ_UART0(void);		// 串口UART0接收中断 
extern void ISendBuf(void);			// 将缓冲区的数据发送回主机,并等待发送完毕
extern uint8 rcv_new;              // 接收新数据标志 

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

  DisText(0xC0,send_buf);	// 第二行字符地址为:C0~CF。 

}

/****************************************************************************
* 名称: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
}

/****************************************************************************
* 名称:main()
* 功能: 读取实时时钟的值,并发送到 LCD
****************************************************************************/

int  main(void)
{	
	/* 设置UART0 */ 
	UARTMODE  uart0_set;
    PINSEL0=0x00000005;              //设置I/O连接到UART0
    PINSEL1=0x00000000;
    rcv_new=0;
    uart0_set.datab=8;               //8位数据位
    uart0_set.stopb=1;               //1位停止位
    uart0_set.parity=0;              //无奇偶校验位
    UART0_Ini(9600,uart0_set);       //初始化串口模式
    U0FCR=0x01;                      //使能FIFO,并设置触发点为1字节
    U0IER=0x01;                      //允许RBR中断,即接收中断
    /* 设置中断允许 */
    VICIntSelect=0x00000000;         //设置所有通道为IRQ中断
    VICVectCntl0=0x26;               //UART0中断通道分配到IRQ Slot0,即优先级最高
    VICVectAddr0=(int)IRQ_UART0;     //设置UART0向量地址
    VICIntEnable=0x00000040;         //使能UART0中断
      
    lcd_init();
	IO0DIR=0x1ffc;		// 将 P0.2~P0.12 设置为输出  0001  1111 1111 1100 
	IO0CLR=0x1ffc;		// 将 P0.2~P0.12 设置为低电平 
	DisText(0x80,MESSAGE);	// 第一行字符地址为:80~8F。 

	RTCIni();                 //初始化RTC
  while(1)
  { if(1==rcv_new)
    { ISendBuf();                    //将接收到的数据发送回主机
      rcv_new=0;
    }
  
    while(0==(ILR&0x01));  //等待RTC增量中断标志位
    ILR=0x01;               //清除中断标志位
    SendTimeRtc();          //读取时钟值,并向LCD发送
    while(0==(ILR&0x01));
    ILR=0x01;
    SendTimeRtc();
  }
  //return(0);
}





⌨️ 快捷键说明

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