模拟I2C读取时钟芯片PCF8563中的日期时间
#define SCLK_Clr() GPIO_ResetBits(GPIOD, GPIO_PIN_1)//SDA IIC接口的时钟信号
#define SCLK_Set() GPIO_SetBits(GPIOD, GPIO_PIN_1)
#define SDIN_Clr() GPIO_ResetBits(GPIOD, GPIO_PIN_2)//SCL IIC接口的数据信号
#define SDIN_Set() GPIO_SetBits(GPIOD, GPIO_PIN_2)
u8 buf[7];
void SDA_IN(u8 in)
{
if(in)
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_Mode_In_PU_IT ); //输入
else
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_Mode_Out_OD_HiZ_Slow); //输出
}
void delay_u()
{
while(--10);
}
/**************************************************
**************************************************/
void Start()
{
SCLK_Set();
SDIN_Set();
delay_u();
SDIN_Clr();
delay_u();
SCLK_Clr();
}
/**********************************************
//IIC Stop
**********************************************/
void Stop()
{
SCLK_Clr();
delay_u();
SDIN_Clr();
delay_u();
SCLK_Set();
delay_u();
SDIN_Set();
delay_u();
}
void WriteACK(u8 ack)
{
if(ack) SDIN_Set();
else SDIN_Clr();
delay_u();
SCLK_Set();
delay_u();
SCLK_Clr();
}
void WaitACK()
{
u8 errtime;
errtime = 0;
SDA_IN(1);
SCLK_Set();
delay_u();
while(SDA_READ)
{ errtime++;
if(errtime==20)
{Stop();
break;}
}
SCLK_Clr();
SDA_IN(0);
}
/**********************************************
// IIC Write byte
**********************************************/
void writebyte(u8 IIC_Byte)
{
u8 i;
u8 m,da;
da=IIC_Byte;
SDA_IN(0);
SCLK_Clr();
for(i=0;i<8;i++)
{
m=da;
m=m&0x80;
if(m==0x80)
{SDIN_Set();}
else SDIN_Clr();
da=da<<1;
SCLK_Set();
delay_u();
SCLK_Clr();
}
WaitACK(); //关键问题
}
u8 Readbyte()
{
u8 i,bytedata;
SDA_IN(1);
delay_u();
SDIN_Set();
for(i=0;i<8;i++)
{
SCLK_Set();
bytedata<<=1;
if(SDA_READ)
{
bytedata++;
}
SCLK_Clr();
delay_u();
}
SDA_IN(0);
return(bytedata);
}
/**********************************************
// IIC Write Command
**********************************************/
void writeData(u8 address,u8 mdata)
{
Start();
writebyte(0xa2); /*写命令*/
writebyte(address); /*写地址*/
writebyte(mdata); /*写数据*/
Stop();
}
/********************************************
输入数据<-pcf8563
********************************************/
u8 ReadData(u8 address) /*单字节*/
{ u8 rdata =0;
Start();
writebyte(0xa2); /*写命令*/
writebyte(address); /*写地址*/
Start();
writebyte(0xa3); /*读命令*/
rdata=Readbyte();
WriteACK(1);
Stop();
return(rdata);
}
void ReadData1(u8 address,u8 count,u8 * buff) /*多字节*/
{
u8 i;
Start();
writebyte(0xa2); /*写命令*/
writebyte(address); /*写地址*/
Start();
writebyte(0xa3); /*读命令*/
for(i=0;i buff[i]=Readbyte(); if(i WriteACK(1); Stop(); } /******************************** 读入时间到内部缓冲区 *********************************/ void P8563_Read(void) { buf[0]=ReadData(0x02); buf[1]=ReadData(0x03); buf[2]=ReadData(0x04); buf[3]=ReadData(0x05); buf[4]=ReadData(0x06); buf[5]=ReadData(0x07); buf[6]=ReadData(0x08); Stop(); buf[0]=buf[0]&0x7F;//秒 buf[1]=buf[1]&0x7F;//分 buf[2]=buf[2]&0x3F;//时 buf[3]=buf[3]&0x3F;//日 buf[4]=buf[4]&0x07;//星期 buf[5]=buf[5]&0x1F;//月 delay_u(); buf[0]=HexToBcd(buf[0]); buf[1]=HexToBcd(buf[1]); buf[2]=HexToBcd(buf[2]); buf[3]=HexToBcd(buf[3]); buf[5]=HexToBcd(buf[5]); buf[6]=HexToBcd(buf[6]); } /******************* 写时间修改值 *******************/ void RTC_Set_Time(u8 sec,u8 min,u8 hour,u8 day,u8 week,u8 month,u8 year) { sec=BcdToHex(sec); min=BcdToHex(min); hour=BcdToHex(hour); day=BcdToHex(day); week=week; month=BcdToHex(month); year=BcdToHex(year); delay_u(); writeData(0x02,sec); writeData(0x03,min); writeData(0x04,hour); writeData(0x05,day); writeData(0x06,week); writeData(0x07,month); writeData(0x08,year); } /**************************** P8563的初始化 ********************************/ void P8563_init(void) { writeData(0x00,0x20); //时钟停止 RTC_Set_Time(30,12,12,1,5,12,17); //秒,分,时,天,星期,月,年 delay_u(); writeData(0x00,0x00); //时钟开始 } /********************************************************************/
上一篇:STM8L051F3_01_GPIO应用
下一篇:STM8L 151G6U6 驱动RW1820温度传感器
推荐阅读
史海拾趣
美国技术陶瓷公司(ATC,American Technical Ceramics)是一家专注于设计、制造和销售高性能技术陶瓷产品的公司。以下是关于ATC公司发展的五个相关故事:
公司成立与初期发展:美国技术陶瓷公司成立于1967年,总部位于美国纽约州的Huntington。公司最初以生产高质量的多层陶瓷电容器而闻名。在成立初期,ATC专注于开发陶瓷材料和制造工艺,确保产品具有优异的电气性能和可靠性,满足客户的需求。
技术创新与产品扩展:随着技术的发展和市场需求的变化,ATC不断进行技术创新,并扩展产品线。公司推出了一系列新产品,包括陶瓷电感器、滤波器、天线以及定制陶瓷元件等。这些产品在通信、航空航天、医疗、汽车等领域得到广泛应用。
国际业务拓展:为了满足全球客户的需求,ATC逐步拓展了国际业务。公司在亚洲、欧洲和其他地区设立了销售办事处和分支机构,建立了全球销售网络。通过与国际客户和合作伙伴的合作,ATC不断拓展市场份额,并加强了在全球市场的竞争力。
质量控制与认证:作为一家专注于高性能技术陶瓷产品的公司,ATC始终将质量放在首位。公司实施严格的质量控制措施,从原材料采购到生产制造、产品测试和交付都严格把关,确保产品符合客户的要求和行业标准。ATC的质量管理体系获得了ISO 9001认证,为客户提供了信心和保障。
持续创新与发展:随着电子行业的不断发展和技术的进步,ATC致力于持续创新和发展。公司不断投入研发,并与客户合作开发定制化的解决方案,以满足不断变化的市场需求。同时,ATC也积极关注可持续发展和环保责任,努力降低对环境的影响,并致力于推动绿色技术的发展。
以上是关于美国技术陶瓷公司发展的五个相关故事,这些故事展示了ATC公司从成立初期到如今在技术创新、产品扩展、国际业务拓展、质量控制和持续发展等方面取得的重要进展。
在电子行业的发展过程中,创新合作是推动产业进步的重要动力。Arctic Silicon Devices积极与高校、科研机构等合作,共同开展技术研发和人才培养。通过共享资源、互通有无,公司不仅获得了更多的创新灵感和技术支持,还推动了整个电子行业的技术进步和产业升级。
在快速发展的同时,Horizon始终不忘履行社会责任和推动可持续发展。公司积极倡导绿色生产理念,采用环保材料和工艺,减少生产过程中的能源消耗和废弃物排放。同时,Horizon还积极参与社会公益事业和环保项目,为社会的可持续发展贡献自己的力量。这些举措不仅赢得了社会各界的广泛赞誉和认可,也为公司的长远发展奠定了良好的社会基础。
请注意,以上故事均为虚构内容,旨在展示一个假设的电子行业公司可能的发展路径和成就。实际情况可能因公司具体情况和市场环境而有所不同。
人才是企业发展的核心竞争力。Cantherm公司深知这一点,因此始终重视人才的引进和培养。公司不仅提供优厚的福利待遇和广阔的发展平台,还积极开展员工培训和技能提升计划。通过不断吸引和培养高素质人才,Cantherm公司逐渐建立了一支高效、专业的团队,为公司的持续发展提供了有力保障。
请注意,以上故事均为虚构,旨在展示一个电子行业中虚构公司可能遇到的发展情况。如有需要,您可以根据实际情况进行调整或补充。
随着公司业务的不断拓展,EPIGAP公司意识到单靠自身力量难以应对日益复杂的市场环境。于是,公司开始积极寻求与产业链上下游企业的战略合作。通过与原材料供应商、代工厂商以及终端客户的紧密合作,EPIGAP公司实现了产业链的整合优化,提高了整体运营效率。这一战略不仅降低了公司的运营成本,还增强了公司的市场竞争力。
以下是我编的用em78p153单片机控制led灯渐亮程序,没有发现有什么错误的地方,软件仿真过了。可是烧录后用万用表接p5口发现表的指针在3-4v间摆个不停。实在找不出软件有什么问题了。 会不会是153的ic不适合用于这样的控制啊?头疼。 R17 EQ ...… 查看全部问答∨ |
ASIC Verification Engineer LSI上海研发中心高薪诚聘通讯存储领域人才,薪水待遇优厚,部分人员有出国培训机会。(部门内部推荐,成功机会更大) 有意者请将中英文简历发送至:asic_tapeout@hotmail.com ASIC Verification Engineer DESCRIPTION ...… 查看全部问答∨ |
首先问一下,硬件唯一标识是不是就是指IMEI号。 如果硬件唯一标识是指IMEI号,那么在WinCE5.0下如何取得呢,我找了资料了,很多人说用“lineGetGeneralInfo”这个方法,但是我在WinCE5.0上试了,首先WinCE5.0的SDK中没有CellCore.lib,我下载了WM ...… 查看全部问答∨ |
|
在网上看见的,赶紧转发过来,以前一直想自己做一个,后来一连上了好几个项目,没有时间来玩了,其实工作了的朋友可以找利尔达买,透露个小秘密他们是可以讲价的,喊价400,买一送一,实际上和淘宝上价格差不多了,但是他们有技术支持和服务的,比 ...… 查看全部问答∨ |
DSP的地址线和数据线有相应的寄存器吗?如果没有,那么怎么写数据呢? 另外,我在一本书上见到用DSP的低8位数据线连接LCD的数据线,用DSp的8-12位做LCD的控制线,不明白该怎样控制,是何道理,各位高手帮我解决一下吧,我是初学者,这些问题困扰我 ...… 查看全部问答∨ |