|
为什么我用easyarm显示万年历时,时间总是显示如下: 请大神指教,说明晶振应该是没有问题的,因为可以发生1S的中断
程序如下:#include "LPC11Uxx.h" /* LPC11Uxx外设寄存器 */
#include "usart.h"
#include "..\I2C\I2CINT.h"
#include "..\PCF8563\PCF8563.h"
/*********************************************************************************************************
变量与宏定义
*********************************************************************************************************/
volatile INT32U GulTick = 1; /* 秒跳标示 */
/*********************************************************************************************************
** Function name: pcCharDisp
** Descriptions: 向PC机发送显示字符。
** input parameters: no 显示位置
** char 显示的字符,不能为0xff
** Output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void pcCharDisp (uint8_t ucNo, uint8_t ucChr)
{
usartSendByte(0xff); /* 发送起始位 */
usartSendByte(0x81);
usartSendByte(ucNo); /* 发送显示位置 */
usartSendByte(ucChr); /* 发送显示字符 */
usartSendByte(0x00);
}
/*********************************************************************************************************
** Function name: timeDisp
** Descriptions: 时间更新时,读取RTC的时间值,并将读出的时分秒值通过串口0送到上位机的EasyARM.exe显示
** input parameters: PCF8563_DATE *tp
** Output parameters: 无
** Returned value: 无
**********************************************************************************************************/
void timeDisp (PCF8563_DATE *tp)
{
uint32_t ulTemp = 0;
uint8_t const SHOWTABLE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
ulTemp = tp->year; /* 发送年 */
pcCharDisp(0, SHOWTABLE[ulTemp / 1000]);
ulTemp = ulTemp % 1000;
pcCharDisp(1, SHOWTABLE[ulTemp / 100]);
ulTemp = ulTemp % 100;
pcCharDisp(2, SHOWTABLE[ulTemp / 10]);
pcCharDisp(3, SHOWTABLE[ulTemp % 10]);
ulTemp = tp->month; /* 发送月 */
pcCharDisp(4, SHOWTABLE[ulTemp / 10]);
pcCharDisp(5, SHOWTABLE[ulTemp % 10]);
ulTemp = tp->day; /* 发送日 */
pcCharDisp(6, SHOWTABLE[ulTemp / 10]);
pcCharDisp(7, SHOWTABLE[ulTemp % 10]);
ulTemp = tp->week; /* 发送星期 */
pcCharDisp(8, SHOWTABLE[ulTemp]);
ulTemp = tp->hour; /* 发送小时 */
pcCharDisp(9, SHOWTABLE[ulTemp / 10]);
pcCharDisp(10, SHOWTABLE[ulTemp % 10]);
ulTemp = tp->minute; /* 发送分钟 */
pcCharDisp(11, SHOWTABLE[ulTemp / 10]);
pcCharDisp(12, SHOWTABLE[ulTemp % 10]);
ulTemp = tp->second; /* 发送秒钟 */
pcCharDisp(13, SHOWTABLE[ulTemp / 10]);
pcCharDisp(14, SHOWTABLE[ulTemp % 10]);
}
/*********************************************************************************************************
** Function name: GPIOInit
** Descriptions: GPIO0_6中断初始化,下降沿触发
** input parameters: 无
** Output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void GPIOInit (void)
{
LPC_SYSCON->SYSAHBCLKCTRL |= ((1UL << 6) | (1UL << 19)); /* 初始化GPIO AHB时钟 */
LPC_IOCON->PIO0_6 &= ~0x07; /* 将P0.6初始化为GPIO功能 */
LPC_SYSCON->PINTSEL[0] = 0X06; /* 设置P0.6为中断 */
LPC_GPIO->DIR[0] &= ~(1UL << 6); /* 设置P0.6为输入 */
LPC_GPIO_PIN_INT->ISEL &= ~(1UL << 0); /* 设置P0.6为边沿中断 */
LPC_GPIO_PIN_INT->SIENF |= (1UL << 0); /* 下降沿中断 */
NVIC_EnableIRQ(FLEX_INT0_IRQn); /* 使能P0.6输入中断 */
}
/*********************************************************************************************************
** Function name: FLEX_INT0_IRQHandler
** Descriptions: GPIO0中断服务函数(P0.6)
** input parameters: 无
** Output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void FLEX_INT0_IRQHandler(void)
{
GulTick = 1;
LPC_GPIO_PIN_INT->IST |= (1UL << 0);
}
/*********************************************************************************************************
** Function name: Main
** Descriptions: PCF8563万年历例程。
** 引脚连接:短接P0.4与PCF8563 SCL,P0.5和PCF8563 SDA,INT与P3.0;(若有电池可短接
** bATTERY与VBAT,若没有电池就只能短接VBAT与VDD3.3v供电),短接串口P0.18
** 与RXD、P0.19与TXD连接,打开EasyARM.exe串口调试软件;
** 操作方法:设置波特率115200,点击“功能”选择“万年历”,观察屏幕显示时钟情况。
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main (void)
{
PCF8563_DATE TimeAndDate;
SystemInit(); /* 系统时钟初始化 */
usartInit(); /* 初始化UART1 */
I2CInit(100000); /* 初始化I2C1 */
GPIOInit();
PCF8563_SS(Stop); /* 停止PCF8563 */
TimeAndDate.year = 2011; /* 初始化年 */
TimeAndDate.month = 7; /* 初始化月 */
TimeAndDate.day = 11; /* 初始化日 */
TimeAndDate.week = 1; /* 初始化周 */
TimeAndDate.hour = 15; /* 初始化时 */
TimeAndDate.minute = 30; /* 初始化分 */
TimeAndDate.second = 30; /* 初始化秒 */
PCF8563_Set(&TimeAndDate); /* 初始化日期 */
PCF8563_Set_Timer(TimerOn|TimerClk64Hz, 64); /* 设置定时器每秒钟溢出一次 */
PCF8563_INT_State(SetINT|TIE|TITP); /* 使能定时器中断 */
PCF8563_SS(Start); /* 开启PCF8563 */
while (1) {
if (GulTick) {
GulTick = 0; /* 清零秒标志 */
PCF8563_Read(&TimeAndDate); /* 读取新的时间 */
timeDisp(&TimeAndDate); /* 刷新EasyARM显示 */
}
}
}
/*********************************************************************************************************
End Of File
*********************************************************************************************************/
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|