搜索
bottom↓
回复: 0

周立功LPC11U14例程中的PCF8565用Easyarm显示万年历问题

[复制链接]

出0入0汤圆

发表于 2013-4-16 15:10:26 | 显示全部楼层 |阅读模式
为什么我用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碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 01:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表