91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-19
  • 語言: 其他
  • 標簽: STM32??模擬I2C??

資源簡介

STM32模擬I2C讀寫PCF8563程序,僅需更改初始化的IO配置即可使用,使用簡單

資源截圖

代碼片段和文件信息



#include?“stm8l15x.h“
#include?“pcf8563.h“


#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)?)








unsigned?char?i=0;

#define?I2C_busy()?while((I2C1->SR3&0x02)==1);
#define?I2C_start1()?I2C1->CR2|=0x01;
#define?I2C_stop()?I2C1->CR2|=0x02;
#define?I2C_Ack()?I2C1->CR2|=0x04;
#define?I2C_NAck()?I2C1->CR2&=(~0x04);
#define?I2C_addrask?(I2C1->SR1&0x02)
#define?I2C_SBask?(I2C1->SR1&0x01)
#define?I2C_TxEask?(I2C1->SR1&0x80)
#define?I2C_RxNeask?(I2C1->SR1&0x40)
#define?I2C_BTF?(I2C1->SR1&0x04)
#define?I2C_BERR_ERR?(I2C1->SR2&0x01)
#define?I2C_AF_ERR?(I2C1->SR2&0x04)
#define?I2C_writebyte(x)?I2C1->DR=x;?


void?I2C_Init(void)
{

??
????????????????I2C1->FREQR=0x0f;????//設置頻率寄存器
I2C1->CCRH=0x00;?????//設置始終寄存器高位
I2C1->CCRL=0x50;?????//設置始終寄存器低位
I2C1->TRISER=0x11;???//設置最大SCL上升時間
I2C1->CR1|=0x01;?????//使能I2C模塊
I2C_Ack();?????????//設置匹配應答
I2C1->CR2|=0x08;?????//設置接收應答
}


void?I2C_Start(void)
{
I2C_busy();
I2C_start1();
while(I2C_SBask==0);
}
/*-------------傳送地址---------------*/
void?I2C_SendDAdr(u8?Add)
{
I2C_writebyte(Add);
while(I2C_addrask==0);
I2C_busy();
}

/*----------------發送數據&接收數據------------------*/
void?I2C_SendDat(u8?data)
{
I2C_writebyte(data);
I2C_busy();
while(I2C_TxEask==0);
}

u8?I2C_RcvDat(void)
{
u8?i;
while(I2C_RxNeask==0);
abc:
if(I2C_BTF==0x04)
{i=I2C1->DR;}
else?goto?abc;
if(I2C_BTF==0){}
else?goto?abc;
return?i;
}






void?WriteAByte(u8?wordAdru8?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<7;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[3]=buf[3]&0x3f;?//get?day?data
??????buf[4]=buf[5]&0x1f;?//get?mon

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????4242??2012-02-21?19:40??PCF8563.c

?????文件???????1074??2012-02-21?19:40??pcf8563.h

-----------?---------??----------?-----??----

?????????????????5316????????????????????2


評論

共有 條評論