有时,当引脚不够用时,就要扩展IO口了,在这里,原子使用的是I2C的芯片PCF8574的方案。
可以看到,这个芯片上连接的IO涉及到了网络、USB、蜂鸣器等等很多个外设,那么之后的很多应用都要使用到这个芯片了。 那么I2C使用的是PH5与PH4.
原本以为使用的是I2C2 ,在引脚配置时,这两个引脚就是I2C2 的复用功能。
但是在原子例程中,这两个引脚却配置成了推挽输出,看来,这是要用模拟I2C啊。通过对源码的分析,的确是使用的GPIO模块I2C时序的方式来操作PCF8574的。时序问题就通过PFC8574的手册进行了解。 例程中使用到了LCD的部分程序,这里等后面使用到了再分析吧。此例程的主要功能部分如下,即在按下按键0后,通过PCF8574驱动蜂鸣器,当外部中断有效时,PCF8574的中断也有效,并将LED1反转。这里PCF8574的中断是使用查询的方式实现的。
- while(1)
- {
- key=KEY_Scan(0);
- if(key==KEY0_PRES)//KEY0
- {
- beepsta=!beepsta; //
- PCF8574_WriteBit(BEEP_IO,beepsta); //
- }
- if(PCF8574_INT==0) //PCF8574
- {
- key=PCF8574_ReadBit(EX_IO);
- if(key==0)LED1_Toggle; //
- }
- i++;
- delay_ms(10);
- if(i==20)
- {
- LED0_Toggle;
- i=0;
- }
- }
复制代码
从这个例程中,可以看出,驱动PCF8574的某个引脚的函数就是PCF8574_WriteBit,对于这个例程的学习,为以后驱动其他外设做了基础铺垫。 如下是例程运行的LCD显示。并完成了功能测试。
|