历史上的今天
返回首页

历史上的今天

今天是:2025年06月29日(星期日)

2020年06月29日 | 使用C8051F驱动PCF8563时钟芯片

2020-06-29 来源:eefocus

系统功能

利用C8051F驱动PCF8563时钟芯片,显示时钟。


硬件设计

LCD12864液晶电路原理图

使用C8051F驱动PCF8563时钟芯片电路原理图


软件设计


下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!

I2C(SMBus)详细程序请查看C8051F I2C(SMBus)程序。 

LCD12864液晶详细程序请查看C8051F LCD12864程序。 


//目标系统: 基于C8051F单片机

//应用软件: Silicon IDE / Keil

/*01010101010101010101010101010101010101010101010101010101010101010101

----------------------------------------------------------------------

实验内容:

使用C8051F驱动PCF8563时钟芯片,把读取到的时间在LCD12864上显示

----------------------------------------------------------------------

硬件连接:

DVK501(PCF8563PrlPort)    F320 EX

                           VCC    ---------   VCC

                           GND   ---------   GND

                           SDA    ---------   P1.0  

                           SCL    ---------   P1.1


DVK501(LCD12864PrlPort)  F320 EX

                           VCC    ---------   VCC

                           GND   ---------   GND

                           CS      ---------    P0.7  

                           SID     ---------    P0.6  

                           SCK   ---------    P0.0

----------------------------------------------------------------------

注意事项:

(1)若有加载库程序,请将光盘根目录下的“library”下的“C8051F”文件夹拷到D盘

(2)请详细阅读:光盘根目录下的“说明书首页.htm”里的相应产品说明

----------------------------------------------------------------------

10101010101010101010101010101010101010101010101010101010101010101010*/


#define _DVK501_F320_EX_


#include

#include <../../../../library/C8051F/ws_clock.h>

#include <../../../../library/C8051F/ws_delay.h>

#include <../../../../library/C8051F/ws_iic_port.h>

#include <../../../../library/C8051F/ws_pcf8563_port.h>

#include <../../../../library/C8051F/ws_lcd_st7920_port.h>


void main(void)

uchar time[3],tmp=0;

PCA0MD &= ~0x40; // Clear watchdog timer enable

clock_external(); // Set oscillator in external,the clock is 12M

delay_ms(100);

Check_SDA(); 

XBR1 = 0x40; // Enable crossbar and weak pull-ups

SPI_Init();

st7920LcdInit();

showLine(0,0,lcd_buffer,"PCF8563 Example");

showLine(0,1,lcd_buffer,"Set Time: OK");

showLine(0,2,lcd_buffer,"Read Time:");

refreshLCD(lcd_buffer);


SMBus_Init();

Enb_Interrupt(); 

PCF8563_init(); 

PCF8563_setTime(12,0,0); 

delay_ms(10);


while(1)

PCF8563_getTime(time);

if(time[0]!=tmp)

{

showLine(8,3,lcd_buffer,"%d2:%d2:%d2",time[2],time[1],time[0]);

refreshLCD(lcd_buffer);

}

tmp=time[0];

}

}


/*--------------------------------------------------------------------

函数全称:十进制强制转换为十六进制

函数功能:

注意事项:

提示说明:调用changeIntToHex(33),return 0x33

输 入:

返 回:

--------------------------------------------------------------------*/

#define changeIntToHex(dec) ( (((dec)/10) <<4) + ((dec)%10) )

/*--------------------------------------------------------------------

函数全称:十进制化为十六进制,并以十进制格式返回

函数功能:

注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳

提示说明:调用converseIntToHex(33),return 21

输 入:

返 回:

--------------------------------------------------------------------*/

#define converseIntToHex(dec) ( (((dec)>>4) *10) + ((dec)%16) )

/*--------------------------------------------------------------------

函数全称:十六进制强制转换为十进制

函数功能:

注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳

提示说明:调用changeHexToInt(0x33),return 33

输 入:

返 回:

--------------------------------------------------------------------*/

#define changeHexToInt(hex) ( (((hex)>>4) *10 ) + ((hex)%16) )

/*--------------------------------------------------------------------

函数全称:十六进制化为十进制,,并以十六进制格式返回

函数功能:

注意事项:

提示说明:调用converseHexToInt(0x33),return 0x51

输 入:

返 回:

--------------------------------------------------------------------*/

#define converseHexToInt(hex) ( (((hex)/10) <<4 ) + ((hex)%10) )


void WriteAByte(uchar wordAdr,uchar dat);

void ReadNByte(uchar wordAdr,uchar *pRdDat);

void PCF8563_getTime(uchar *buf);

void PCF8563_setTime(uchar hour,uchar minute,uchar second);

void PCF8563_init(void);


#define CTRL_BUF1 0x00

#define CTRL_BUF2 0x01


#define SECOND_DATA_BUF 0x02

#define MINUTE_DATA_BUF 0x03

#define HOUR_DATA_BUF 0x04


#define DAY_DATA_BUF 0x05

#define WEEK_DATA_BUF 0x06

#define MONTH_DATA_BUF 0x07

#define YEAR_DATA_BUF 0x08


#define MINUTE_AE_BUF 0x09

#define HOUR_AE_BUF 0x0A

#define DAY_AE_BUF 0x0B

#define WEEK_AE_BUF 0x0C


#define CLK_FRQ_BUF 0x0D

#define TIMER_CTRL_BUF 0x0E

#define COUNT_VAL_BUF 0x0F


void WriteAByte(uchar wordAdr,uchar dat)

{

SMBus_Write(0xA2,wordAdr,dat,2);

}


void ReadNByte(uchar wordAdr,uchar *pRdDat)

SMBus_Write(0xA2,wordAdr,0,1);

SMBus_Read(0xA3,pRdDat,3);

}


void PCF8563_getTime(uchar *buf)

{

ReadNByte(SECOND_DATA_BUF,buf);

buf[0] = buf[0] & 0x7f; //get second data

buf[1] = buf[1] & 0x7f; //get minute data

buf[2] = buf[2] & 0x3f; //get hour data


buf[0] = changeHexToInt(buf[0]);

buf[1] = changeHexToInt(buf[1]);

buf[2] = changeHexToInt(buf[2]);

}


void PCF8563_setTime(uchar hour,uchar minute,uchar second)

{

hour = changeIntToHex(hour); //将数据的Dex格式转换为Hex格式

minute = changeIntToHex(minute);

second = changeIntToHex(second);


WriteAByte(HOUR_DATA_BUF,hour);

WriteAByte(MINUTE_DATA_BUF,minute);

WriteAByte(SECOND_DATA_BUF,second);

}


void PCF8563_init(void)

{

WriteAByte(CTRL_BUF1,0x00); //basic setting

WriteAByte(CTRL_BUF2,0x12); //alarm enable

}


系统调试

改变初始化时间,将语句“PCF8563_setTime(12,0,0);”改成 “PCF8563_setTime(1,2,3);”,断电重启后查看现象。


推荐阅读

史海拾趣

EOREX公司的发展小趣事

在电子行业竞争日益激烈的背景下,EOREX公司敏锐地洞察到智能家居市场的巨大潜力。他们及时调整战略方向,将研发重心转向智能家居领域,推出了一系列具有创新性和实用性的智能家居产品。同时,EOREX还积极布局全球市场,通过与海外企业的合作与交流,不断引进先进的技术和设计理念,提升自身的竞争力。这些举措使得EOREX在智能家居领域迅速崛起,成为行业内的佼佼者。

BAND-IT公司的发展小趣事

1937年,在美国的科罗拉多州,BAND-IT公司应运而生。当时,电子行业正处于快速发展的初期,对高质量紧固件的需求日益增长。BAND-IT创始人敏锐地捕捉到了这一机遇,开始设计和制造不锈钢带和扎扣,以及C00169标准绑带机。这些产品迅速在电子行业中获得了认可,成为电缆、电线束等部件紧固的理想选择。初创时期的BAND-IT面临着资金短缺、市场竞争激烈等挑战,但凭借其创新的产品和卓越的品质,逐渐在电子行业中站稳了脚跟。

恒连电子(EVERCOM)公司的发展小趣事

恒连电子成立于XX年代初,当时正值电子行业的快速发展期。创始人张先生凭借对电子技术的敏锐洞察力和对市场趋势的精准把握,决定投身于电子行业。然而,初创时期的公司面临着资金短缺、技术团队匮乏以及市场竞争激烈等多重挑战。张先生带领团队日夜兼程,通过自主研发和不断创新,逐渐在市场中站稳脚跟。他们首先推出了几款性能稳定、价格合理的电子产品,赢得了客户的信赖。随着产品的逐步推广,恒连电子逐渐在市场中打开了局面。

Hitachi (Renesas )公司的发展小趣事

恒连电子成立于XX年代初,当时正值电子行业的快速发展期。创始人张先生凭借对电子技术的敏锐洞察力和对市场趋势的精准把握,决定投身于电子行业。然而,初创时期的公司面临着资金短缺、技术团队匮乏以及市场竞争激烈等多重挑战。张先生带领团队日夜兼程,通过自主研发和不断创新,逐渐在市场中站稳脚跟。他们首先推出了几款性能稳定、价格合理的电子产品,赢得了客户的信赖。随着产品的逐步推广,恒连电子逐渐在市场中打开了局面。

CT [ Central Technologies ]公司的发展小趣事

经过数年的努力,CT公司终于研发出了一款具有颠覆性的新型芯片技术。这款芯片在性能上大幅超越了当时的同类产品,引起了市场的广泛关注。多家知名企业纷纷与CT公司展开合作,将这款芯片应用于他们的产品中。随着合作伙伴的增加和市场份额的扩大,CT公司的知名度逐渐提升,成为了电子行业的一匹黑马。

Belkin公司的发展小趣事

随着电子行业的快速发展,贝尔金也紧跟时代步伐,不断进行技术革新和产品线拓展。2002年,贝尔金为苹果Dock连接器研发了一系列产品,包括汽车套件、电池组、读卡器等,这标志着它与苹果公司的深度合作开始。此后,贝尔金逐渐成为苹果官方合作配件制造商,其产品在苹果用户中享有很高的声誉。

问答坊 | AI 解惑

工程师调查表

尊敬的工程师会员,您好! 请您帮助我们网站建设技术频道,我们需要您最最权威的数据。请您按照自己的想法填写附件表格并反馈给我们,对于您提供的信息,我们一定是慎重参考!非常感谢你们!你们的回复是我们网站发展的动力。…

查看全部问答>

s3c2410触摸屏程序中对外接晶体管控制的问题

《ARM Linux入门与实践》一书当中,关于触摸屏的那一节有几个地方不理解。 该程序的说明是:“代码并没有使用S3C2410A中的触摸屏控制器,而是通过直接控制FPIO的4个晶体管的导通和截止” P220: void Wait_Touch(void) {     XMON_O ...…

查看全部问答>

怎么没有这样的主板?

1、支持wince5.0可使用 .net + sqlce2.0 开发应用程序; 2、必须的外部接口包括:usb、以太网接口、打印串口 3、能控制按键音、报警音 4、能控制屏幕背光 5、需支持对5v左右电压的电池或电板充电 6、128X128支持汉显屏幕 7、主板长宽…

查看全部问答>

8259a 是否只支持硬件中断

如题?所支持哪些类型中断 谢谢…

查看全部问答>

dll库加载的问题

自己写了一个实现tapi的库 怎么加载到windows ce中呢? 用的编译环境是EVC…

查看全部问答>

关于工业以太网问题请教

组建一个简单的工业以太网,一台x86工控机当服务器,用网线联一台工业以太网交换机,交换机再连一台PLC,PLC 连接底层设备。 假设服务器上我装的就是普通的windows XP操作系统,上面运行我的工控软件。 请问我这个算是工业以太网吗?工业以太网不 ...…

查看全部问答>

<50元的FPGA核心板,会否有朋友顶啊?

    近来忙着家事,有一段时间没有上来了,今天顺着2011-1-11,这么多棍棍的日子,上来溜达一下。     看到自从夏老师到网站上来座镇解答FPGA的相关问题,网站上FPGA的热情洋溢,很有气氛,觉得这里有蛮多朋友 ...…

查看全部问答>

有没申请过Cosmic公司免费的ST16K代码限制的编译器的?

一般申请要多久才能批呀还有申请时要注意什么我都申请快一天了这么还没呀…

查看全部问答>

高分拜请高手扔掉main函数?

main函数,我想大家都了解,只要你会C编程,你就会知道main?我想它是比你第一个 "hello world!"还早的程序。可是它的作用呢?我想不是每个会C编程的人都知道?如果 当你有一天可以对main说拜拜时,那你就算是入门了!这里高手如云,望 ...…

查看全部问答>