📄 main.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 + -