STM8 PCF8563时钟芯片子程序

发布者:RadiantSerenity最新更新时间:2020-06-28 来源: eefocus关键字:STM8  PCF8563  时钟芯片  子程序 手机看文章 扫描二维码
随时随地手机看文章

软件设计

/*********************************************************************

目 的: 建立PCF8563操作库

目标系统: 基于STM8单片机 

应用软件: Cosmic CxSTM8 

*********************************************************************/


#include


//器件地址:

#ifndef WD_DADR 

      #define WD_DADR 0xA2 //write device-address 

#endif

#ifndef RD_DADR 

      #define RD_DADR 0xA3 //read device-address

#endif


#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


//changeIntToHex(33),return 0x33

//传参必须为 unsigned 类型

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


//调用changeHexToInt(0x33),return 33

//传参必须为 unsigned 类型

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


void WriteAByte(u8 wordAdr,u8 dat)

{

      I2C_Start();

      I2C_SendDAdr(WD_DADR);

      I2C_SendDat(wordAdr);

      I2C_SendDat(dat);

      I2C_stop();

}


void PCF8563_getTime(u8 *buf)

      u8 i;

      I2C_Start();

      I2C_SendDAdr(WD_DADR);

      I2C_SendDat(SECOND_DATA_BUF);

      I2C_Start();

      I2C_SendDAdr(RD_DADR);

      for(i=0;i<2;i++)

      {

             buf[i]=I2C_RcvDat();

      }

      I2C_NAck();

      buf[i]=I2C_RcvDat();

      I2C_stop();

      I2C_Ack();


      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(u8 hour,u8 minute,u8 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(u8 hour,u8 mintue,u8 second)

{

      I2C_Init();

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

      WriteAByte(CTRL_BUF2,0x00);

      PCF8563_setTime(hour,mintue,second);

}

关键字:STM8  PCF8563  时钟芯片  子程序 引用地址:STM8 PCF8563时钟芯片子程序

上一篇:STM8 PCF8591 AD/DA转换子程序
下一篇:STM8 PS2接口应用子程序

推荐阅读最新更新时间:2024-11-19 16:42

IAR for STM8问题1
IAR for STM8弹窗:Fatal error while generating source browse infomation.See the Source Browse Log window for more infomation 这种情况是因为.c或者.h文件的包含路径中有中文,将中文改成英文之后重新设置路径,会如下正常运行。 正常运行如下:
[单片机]
IAR for <font color='red'>STM8</font>问题1
51单片机十进制整数与二进制整数转换汇编语言子程序
==================================== 【4位十进制整数转换为二进制整数子程序】 入口:十进制整数千位数RAM址存于R0,百位数、十位数、个位数RAM址依次加1; 返回值:转换所得二进制整数存于R3(高字节)R4(低字节)。 DtoB: MOV R2, #4 ;;R2←递减的循环次数初值 MOV A, @R0 MOV R4, A ;;R4←千位数 LP1 : MOV A, R4 ;;R3R4←(R3)(R4)*10 MOV B, #10 MUL AB MOV R4, A MOV B, #10 XCH A
[单片机]
STM8单片机外部晶振不起振解决方法
部分型号的STM8单片机可以支持最高24MHz的外部晶振,在配置外部晶振时需要按照如下的步骤进行: 1 定义外部晶振宏定义 宏定义的写法如下: #define HSE_VALUE ((uint32_t)24000000) 外部晶振是多少的就写多少,如果是24M的外部晶振就写成24000000。 如果不用宏定义的话,就在单片机的头文件中找到宏定义部分,头文件的宏定义默认16M外部晶振,将其修改为实际晶振值就可以。 2 配置外部晶振 配置外部晶振时需要使能外部时钟,并且要等到晶振稳定。使用库函数配置的语句如下所示: void CLK_Init() { CLK_HSECmd(ENABLE); //外部时钟开 whil
[单片机]
基于STM8的IAR 配置实现
  以STM8为例:   将项目使用的MCU型号的icf文件拷贝到项目里面,icf一般放在   C:Program FilesIAR SystemsEmbedded Workbench 6.5stm8config   这个目录下。   1、拷贝lnkstm8s207rb.icf   例如,我用的是STM8S207RB,则我会将lnkstm8s207rb.icf这个文件拷贝到我项目里面。   2、设置项目属性   打开项目的OpTIon属性,然后修改linker--》Linker configuraTIon file这项里面的内容为:   $PROJ_DIR$lnkstm8s207rb.icf   如图,      点确
[单片机]
基于<font color='red'>STM8</font>的IAR 配置实现
STM8 读同时写(RWW)
RWW特性允许用户在执行程序和读程序存储器时对DATA EEPROM区域进行写操作,因此执行的时间被优化了。相反的操作是不允许的:即你不可以在写程序存储器时对DATA EEPROM进行读操作。 RWW特性是一直有效的而且可以在任意时刻使用。注意:并不是所有STM8都拥有RWW特性,请参考相应的数据手册来了解更多信息。 字节编程 可以对主程序存储器和DATA区域逐字节地编程。要对一个字节编程,应用程序可直接向目标地址写入数据。 在主程序存储器中 当字节编程操作执行时,应用程序停止运行。 在DATA区域中 有RWW功能的器件:在IAP模式下,应用程序不停止运行,字节编程利用RWW功能进行操作。 无RWW功能的器
[单片机]
<font color='red'>STM8</font> 读同时写(RWW)
STM8的ADC多种采集模式详解及应用
一,STM8S 的 ADC 支持 5 种转换模式:单次模式、连续模式、带缓冲的连续模式、单次扫描模式、连续扫描模式。 1单次模式 单次模式,STM8S 的 ADC 只在选定的通道上进行一次 ADC 转换,转换的结果存储在 ADC_DR 寄存器中。 void ADC_Init(void) { ADC1_DeInit();//ADC 相关寄存器恢复默认值 //初始化 ADC:单次转换/通道 8/时钟分频/关闭事件/数据右对齐/使能施密特触发器 ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_8, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM,
[单片机]
<font color='red'>STM8</font>的ADC多种采集模式详解及应用
STM8单片机ADC、Timer、USART实用例程
简介:这是一个我花了较长时间摸索出来的STM8L-051的例程,它控制LED灯,Timer2定时100us进入中断,软件启动ADC,采样10 次后取平均,将结果通过UASART发送至PC机,在超级终端上显示的实用程序,因其内存极小,不能用printf等函数,因此对于想用这款资源极少的MCU的开发者来说,读这篇文章会大大节约你的研发时间。 #include #include stm8l15x.h #include iostm8l051f3.h #define LED_GPIO_PORT GPIOA #define LED_GPIO_PINS GPIO_Pin_2 | GPIO_Pin_3 #define AD
[单片机]
stm8 16M晶振下精确软件延时
void inerDelay_us(unsigned char n) { for(;n 0;n--) { asm( nop ); //在STM8里面,16M晶振,_nop_() 延时了 333ns asm( nop ); asm( nop ); asm( nop ); } } //---- 毫秒级延时程序----------------------- void Delayms(unsigned int time) { unsigned int i; while(time--) for(i=900;i 0;i--) inerDelay_us(1); }
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved