📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2007-01-24
** Last Version: v1.0
** Description: MagicARM270实验箱的基础实验---RTC实验。
** 初始化RTC芯片PCF8563,然后每隔1秒钟读取一次RTC的时间,并通过串口发送到PC机显示。
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2007-01-24
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include "config.h"
// PCF8563从机地址定义
#define PCF8563 0xA2
// 定义时间缓冲区
uint8 time_ram[10];
// 定义显示缓冲区
char disp_buf[50];
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
** 延时时间与系统时钟有关。
** Input: dly 延时参数,值越大,延时越久
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
// 定义星期字符串
char *str_day[8] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday", " "};
// PCF8563初始化值 (2007年1月24日星期三8:30分, 前两个0是控制寄存器的命令)
const uint8 INI_DAT[14] =
{ 0x00, 0x00, 0x00, 0x30, 0x08, 0x24, 0x03, 0x01, 0x07,
0x00, 0x00, 0x00, 0x00, 0x80
};
/*********************************************************************************************************
** Function name: InitPCF8563
** Descriptions: 读取PCF8563上的状态字进行判断,若没有初化过,则对其初化....
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2007-01-24
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void InitPCF8563(void)
{
uint8 dat;
uint8 suba_buf[2];
// 判断02H寄存器的VL位
suba_buf[0] = 1;
suba_buf[1] = 0x02;
IRcvStr(PCF8563, suba_buf, &dat, 1);
if((dat&0x80) == 0) return; // 判断是否初化过
// 若没有初化(或芯片掉过电),则进行初化
suba_buf[0] = 1;
suba_buf[1] = 0;
ISendStr(PCF8563, suba_buf, (uint8 *)INI_DAT, 14);
}
/*********************************************************************************************************
** Function name: ReadTime
** Descriptions: 读取PCF8563的时间,保存到time_ram缓冲区中。
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2007-01-24
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ReadTime(void)
{
uint8 suba_buf[2];
suba_buf[0] = 1;
suba_buf[1] = 0x02;
IRcvStr(PCF8563, suba_buf, time_ram, 7);
// 对时间值进行屏蔽操作 (都是BCD码数据)
time_ram[0] = time_ram[0] & 0x7F; // 秒
time_ram[1] = time_ram[1] & 0x7F; // 分
time_ram[2] = time_ram[2] & 0x3F; // 时
time_ram[3] = time_ram[3] & 0x3F; // 日
time_ram[4] = time_ram[4] & 0x07; // 星期
time_ram[5] = time_ram[5] & 0x1F; // 月/世纪
// time_ram[6]是年
}
/*********************************************************************************************************
** Function name: DispRTC
** Descriptions: 显示时间(从串口发送显示数据),即显示g_year、g_month、g_date等变量的值。
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2007-01-24
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void DispRTC(void)
{
sprintf(disp_buf, "%02x:%02x:%02x %10s, %2x/%2x/20%02x \n",
time_ram[2], time_ram[1], time_ram[0], str_day[ time_ram[4] ], time_ram[5], time_ram[3], time_ram[6]);
UART_SendStr(disp_buf);
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 初始化RTC,然后不断地读取时间值,并输出串口。
** Input: 无
** Output: 系统返回值0
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main(void)
{
uint8 sec_bak;
// 初始化UART
UART_Init(115200);
// 初始化PCF8563
InitI2C();
InitPCF8563();
// 读取时间值并输出显示
while(1)
{
ReadTime();
if(time_ram[0] != sec_bak)
{
sec_bak = time_ram[0];
DispRTC();
}
}
return(0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -