GPIO之LED实现
一:概述
GPIO通用输入输出,说得简单点就是控制管脚电平的高低来控制外围器件,单片机差不多就是专门做这个事的。单片机很简单只需要在管脚相应的寄储器写入0或1就行了。ARM要复杂那么一点点,这是因为ARM大部分的管脚都不只一个功能,所以要做个选择也就是要配置相应的寄储器,只要把相应的寄储器配置好后就和单片机一样的简单。
二:相关寄储器
说明:我的44b0板子三个LED灯是接在GPC1,GPC2,GPC3上。
PCONC控制器,两位决定一个管脚,一个管脚就有四个功能。
PDATC数据器,当在PCONC里面把管脚配置为输出时,在这里写1,0就控制相应的管脚输出高低电平。
PUPC上接电阻器,关于上接电阻电门有文章在讲。一句话来讲就是提高管脚的驱动能力。
三:示例程序:
void Port_Init(void)
{
//PORT C GROUP
rPDATC = 0x0000;
rPCONC = 0xfff5ff55;//将GPC1-3配置为输出功能
}
流水灯程序:
void Led_Display(int LedStatus)
{
if((LedStatus&0x01)==0x01) //PC1状态设置
rPDATC=rPDATC&0xfffD; //LED0熄灭
else
rPDATC=rPDATC|0x02; //LED0点亮
if((LedStatus&0x02)==0x02) //PC2状态设置
rPDATC=rPDATC&0xfffB;
else
rPDATC=rPDATC|0x04;
if((LedStatus&0x04)==0x04) //PC3状态设置
rPDATC=rPDATC&0xfff7;
else
rPDATC=rPDATC|0x08;
}
【功能说明】LED来回闪烁显示
****************************************************************************/
void Led_Disp(void)
{
Led_Display(0x04); //LED点亮/熄灭状态设置
Delay(3000); //延时若干个100us
Led_Display(0x02);
Delay(3000);
Led_Display(0x01);
Delay(3000);
}