📄 main.c
字号:
/****************************************Copyright (c)***************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: Li Baihua
** Modified date: 2008-04-07
** Version: 1.1
** Descriptions: 串口发送数据,万年历显示RTC时间
**
*********************************************************************************************************/
#include "config.h"
/*
* 定义串口模式设置的数据结构
*/
typedef struct UartMode{
uint8 datab; /* 字长度 5/6/7/8 */
uint8 stopb; /* 停止位 1/2 */
uint8 parity; /* 奇偶校验 */
}UARTMODE;
# define UART_BPS 9600 /* 串口通信波特率 */
/*********************************************************************************************************
** Function name: UARTInit
** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
** input parameters: uiDly 值越大,延时时间越长
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void UARTInit (void)
{
uint16 uiFdiv;
PINSEL0 = (PINSEL0 & 0xFFFFFFF0) | 0x00000005; /* 串口引脚设置 */
U0LCR = 0x83; /* 允许设置波特率 */
uiFdiv = (Fpclk / 16) / UART_BPS; /* 设置波特率 */
U0DLM = uiFdiv / 256;
U0DLL = uiFdiv % 256;
U0LCR = 0x03; /* 锁定波特率 */
U0FCR = 0x01; /* FIFO使能 */
}
/*********************************************************************************************************
** Function name: UART0SendByte
** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式
** input parameters: uiDat 要发送的数据
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void UART0SendByte (uint8 uiDat)
{
U0THR = uiDat; /* 写入数据 */
while ((U0LSR & 0x40) == 0); /* 等待数据发送完毕 */
}
/*********************************************************************************************************
** Function name: PC_DispChar
** Descriptions: 向PC机发送显示字符
** input parameters: x 显示字符的横坐标
** y 显示字符的纵坐标
** chr 显示的字符,不能为ff
** color 显示的状态,包括前景色、背景色、闪烁位。
** 与DOS字符显示一样:0~3,前景色,4~6,背景色,7,闪烁位
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void PCDispChar (uint8 uiX, uint8 uiChr)
{
UART0SendByte(0xFF); /* 起始字符 */
UART0SendByte(0x81);
UART0SendByte(uiX);
UART0SendByte(uiChr);
UART0SendByte(0x00);
}
uint8 const uiSHOWTABLE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*********************************************************************************************************
** Function name: SendTimeRtc
** Descriptions: 将RTC时间值发送到串口显示
** input parameters: uiDat 要发送的数据
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void SendTimeRtc (void)
{
uint32 uiDatas;
uint32 uiTimes;
uint32 bak;
uiTimes = CTIME0; /* 读取完整的时钟寄存器 */
uiDatas = CTIME1;
bak = (uiDatas >> 16) & 0xfff; /* 获取 年 */
PCDispChar (0, uiSHOWTABLE [bak / 1000]);
bak = bak % 1000;
PCDispChar(1, uiSHOWTABLE [bak / 100]);
bak = bak % 100;
PCDispChar (2, uiSHOWTABLE [bak / 10]);
PCDispChar (3, uiSHOWTABLE [bak % 10]);
bak = (uiDatas >> 8) & 0x0f; /* 获取 月 */
PCDispChar (4, uiSHOWTABLE [bak / 10]);
PCDispChar (5, uiSHOWTABLE [bak % 10]);
bak = uiDatas & 0x1f; /* 获取 日 */
PCDispChar (6, uiSHOWTABLE [bak / 10]);
PCDispChar (7, uiSHOWTABLE [bak % 10]);
bak = (uiTimes >> 24) & 0x07; /* 获取 星期 */
PCDispChar(8, uiSHOWTABLE [bak]);
bak = (uiTimes >> 16) & 0x1f; /* 获取 小时 */
PCDispChar (9, uiSHOWTABLE [bak / 10]);
PCDispChar (10,uiSHOWTABLE [bak % 10]);
bak = (uiTimes >> 8) & 0x3f; /* 获取 分钟 */
PCDispChar (11, uiSHOWTABLE [bak / 10]);
PCDispChar (12, uiSHOWTABLE [bak % 10]);
bak = uiTimes & 0x3f; /* 获取 秒钟 */
PCDispChar (13, uiSHOWTABLE [bak / 10]);
PCDispChar (14, uiSHOWTABLE [bak % 10]);
}
/*********************************************************************************************************
** Function name: RTCInit
** Descriptions: 初始化实时时钟
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void RTCInit (void)
{
PREINT = Fpclk / 32768 - 1; /* 设置基准时钟分频器 */
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
CCR = 0x00; /* 禁止时间计数器 */
YEAR = 2008;
MONTH = 04;
DOM = 07;
DOW = 4;
HOUR = 15;
MIN = 52;
SEC = 59;
CIIR = 0x01; /* 设置秒值的增量产生1次中断 */
CCR = 0x01; /* 启动RTC */
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 主函数,通过串口发送到PC机显示当前RTC时间
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main (void)
{
UARTMODE uart0_set;
uart0_set.datab = 8;
uart0_set.stopb = 1;
uart0_set.parity = 0;
UARTInit(); /* 串口初始化 */
RTCInit(); /* RTC初始化 */
while (1){
while (0 == (ILR & 0x01)); /* 等待RTC增量中断 */
ILR = 0x01; /* 清除中断标志 */
SendTimeRtc(); /* 发送到串口显示 */
}
return 0;
}
/*********************************************************************************************************
** End Of File
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -