使用C8051F驱动PCF8563时钟芯片

2020-06-29来源: eefocus关键字:C8051F  驱动PCF8563  时钟芯片

系统功能

利用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);”,断电重启后查看现象。


关键字:C8051F  驱动PCF8563  时钟芯片 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501478.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:C8051F SPI程序
下一篇:使用PCF8591对C8051F进行AD转换

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

高速SOC单片机C8051F
的生命力,其运行速度高达每秒25M PS。现已设计并为市场提供了29个品种的08051 F系列的片上系统单片机,预计今年年内还将完成20多个新的片上系统单片机的设计,经过3年的稳步发展已成长为半导体业界一颗耀眼的新星。 Cygnal C8051F系列单片机由沈阳新华龙电子有限公司于2001年引进中国大陆,并于11月“2001嵌入式系统及单片机国际学术交流会暨产品展示会”上首次亮相,受到与会者的极大关注。 Cygnal C8051F系列单片机是集成的混合信号片上系统SOC(System on chip),具有与MCS-51内核及指令集完全兼容的微控制器,除了具有标准8051的数字外设部件之外,片内还集成了数据采集
发表于 2020-07-02
高速SOC单片机<font color='red'>C8051F</font>
为何使用C而不使用汇编进行开发C8051F
好些年之前,我为自己写了几万行汇编代码而骄傲。 然而,做过多年软件开发的我,看到以前写的汇编代码也是很多不懂的,这可是自己亲手写的呀。汇编代码由于其可读性比较差,给后期的维护造成很大的困难。因此建议单片机的学习者们一定要学习C。 这句话要是我在读书的时候听到,只是会嗤之以鼻。“用汇编就足够了,为什么用C呢?如果您用汇编做不了,说明水平还不够”,这是我的典型想法,当时我的汇编水平甚至成为我的骄傲。然而几年之后的今天,我要劝说后来学习者一定要舍弃汇编而学习C语言,是否很好笑。首先说说C的优点。1、直观,可读性强:这点很重要。对于一个产品,周期是很长的,即使出第一台产品之后,还有很长的维护时间。这中间维护
发表于 2020-07-02
C8051F软件新建工程流程(Silicon IDE)
注:建立Silicon IDE工程必须首先安装Silicon IDE软件·Silicon IDE的安装  请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/SoftwareDownloads.aspx?cm_sp=-_--_-下载安装。1、如下图所示,点击"Project -> New Project"后会弹出新建工程窗口 2、如下图所示,在Select Device项目栏中选择相应的单片机型号(这里以"C8051F320"为例),在Project name项目栏中填写项目名称(这里以"
发表于 2020-07-01
<font color='red'>C8051F</font>软件新建工程流程(Silicon IDE)
开发C8051F单片机,需要哪些开发工具?
使用C8051F单片机开发自己的系统,在硬件开发工具方面,一般需要:仿真器/编程器以及目标板,对于新手来说可能还需要开发板/学习板进行学习。C8051F仿真器/编程器的介绍网址,C8051F开发板/学习板的介绍网址。下面介绍一些C8051F开发工具相关的述语,在后面的使用中,您将可能会接触到。问:C8051F的仿真方式有哪些?答:一般来说,C8051F系列的单片机都是通过JTAG/C2接口进行仿真。如需了解各型号详细的仿真/编程方式,请查看C8051F仿真器/编程器的详细信息。问:C8051F的编程方式有哪些?答:一般来说,C8051F系列的单片机都是通过JTAG/C2接口进行编程。问:什么是JTAG/C2接口?答:JTAG/C
发表于 2020-07-01
C8051F使用软件简介
一、C8051F开发软件简介:软件名称类型简介官方网站Silicon IDEIDE、C、汇编编译器免费软件,Silicon集成开发环境(IDE),可使用C语言或汇编语言进行开发(使用语言需第三方软件协助),集软硬件仿真、调试、下载编程于一体,是一款专门为C8051F 芯片设计的软件。www.silabs.comSDCCC编译器免费软件,SDCC是Sandeep Dutta为8位微控制器设计的一个开放源代码、可编译产生不同CPU的目标代码、优化的ANSI-C编译器。www.sourceforge.netKeilC、汇编编译器收费软件,可使用C语言或汇编语言进行开发,可使用软件仿真,硬件仿真、调试及下载编程需要第三方软件驱动,是一款
发表于 2020-07-01
<font color='red'>C8051F</font>使用软件简介
C8051F烧写程序快速入门(Silicon IDE)
注:下载程序必须首先安装Silicon IDE以及Keil软件·Keil的安装  请到 Keil 官方网站: https://www.keil.com/c51/demo/eval/c51.htm下载安装。·Silicon IDE的安装  请到 Silabs 官方网站: http://www.silabs.com/products/mcu/Pages/SoftwareDownloads.aspx?cm_sp=<WebParts>-_-<MCUSupport>-_-<SWDownloads>下载安装。1、在Silicon IDE中集成Keil软件(点击查看)2、如下图所示,点击
发表于 2020-07-01
<font color='red'>C8051F</font>烧写程序快速入门(Silicon IDE)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved