微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > IO扩展

IO扩展

时间:10-02 整理:3721RD 点击:

有时,当引脚不够用时,就要扩展IO口了,在这里,原子使用的是I2C的芯片PCF8574的方案。





可以看到,这个芯片上连接的IO涉及到了网络、USB、蜂鸣器等等很多个外设,那么之后的很多应用都要使用到这个芯片了。 那么I2C使用的是PH5与PH4.




原本以为使用的是I2C2,在引脚配置时,这两个引脚就是I2C2的复用功能。



但是在原子例程中,这两个引脚却配置成了推挽输出,看来,这是要用模拟I2C啊。通过对源码的分析,的确是使用的GPIO模块I2C时序的方式来操作PCF8574的。时序问题就通过PFC8574的手册进行了解。 例程中使用到了LCD的部分程序,这里等后面使用到了再分析吧。此例程的主要功能部分如下,即在按下按键0后,通过PCF8574驱动蜂鸣器,当外部中断有效时,PCF8574的中断也有效,并将LED1反转。这里PCF8574的中断是使用查询的方式实现的。

  1. while(1)
  2.         {
  3.                 key=KEY_Scan(0);
  4.                 if(key==KEY0_PRES)//KEY0
  5.                 {
  6.                         beepsta=!beepsta;                                        //
  7.                         PCF8574_WriteBit(BEEP_IO,beepsta);        //
  8.                 }
  9.                 if(PCF8574_INT==0)                                //PCF8574
  10.                 {
  11.                         key=PCF8574_ReadBit(EX_IO);       
  12.                         if(key==0)LED1_Toggle;                //
  13.                 }
  14.                 i++;
  15.                 delay_ms(10);
  16.                 if(i==20)
  17.                 {
  18.                         LED0_Toggle;       
  19.                         i=0;
  20.                 }                  
  21.         }

复制代码

从这个例程中,可以看出,驱动PCF8574的某个引脚的函数就是PCF8574_WriteBit,对于这个例程的学习,为以后驱动其他外设做了基础铺垫。

如下是例程运行的LCD显示。并完成了功能测试。



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top