单片机如何使用3个GPIO口控制6个LED

1)单片机/ARM硬件设计小知识,分享给将要学习或者正在学习单片机/ARM开发的同学。

2)内容属于原创,若转载,请说明出处。

3)提供相关问题有偿答疑和支持。

以上图可以看到是一个电动牙刷,那么里面的硬件构造仅仅只有一个8脚单片机,如何做到控制6个LED,一个马达,一个按键的呢?初看,似乎GPIO不够用。

其实是利用了单片机的IO口的特性巧妙的设计:

这个电路使用到了单片机的IO口的三个状态:

1)地电平

2)高电平

3)高阻态

所谓的高阻态,实际就是GPIO口外部表现极大的阻抗,阻抗很大,几乎不会有电流流入流出,各个LED的亮灭有6种情况:

真值表如下:

其他更有意思的电路设计干货,待续...

以下是使用中微电子单片机3IO控制6LED的程序示例,同样使用了第一种方式,即使用74HC238译码器: ```c #include "HT66F70A.h" #define LED_PORT P13 #define ADDR_PORT P14 void GPIO_Config(void); void Delay(uint32_t count); int main(void) { GPIO_Config(); while (1) { // 点亮第1个LED PORT_Write(ADDR_PORT, 0x01); PORT_Write(LED_PORT, 0x01); Delay(100000); // 点亮第2个LED PORT_Write(ADDR_PORT, 0x02); PORT_Write(LED_PORT, 0x02); Delay(100000); // 点亮第3LED PORT_Write(ADDR_PORT, 0x04); PORT_Write(LED_PORT, 0x04); Delay(100000); // 点亮第4个LED PORT_Write(ADDR_PORT, 0x01); PORT_Write(LED_PORT, 0x08); Delay(100000); // 点亮第5个LED PORT_Write(ADDR_PORT, 0x02); PORT_Write(LED_PORT, 0x10); Delay(100000); // 点亮第6LED PORT_Write(ADDR_PORT, 0x04); PORT_Write(LED_PORT, 0x20); Delay(100000); } } void GPIO_Config(void) { PORT_InitTypeDef PORT_InitStructure; // 配置LED引脚为推挽输出 PORT_InitStructure.PORT_Pin = 0x3F; // P136位和P14的3位 PORT_InitStructure.PORT_Mode = PORT_Mode_OUT; PORT_InitStructure.PORT_OutType = PORT_OutType_PP; PORT_InitStructure.PORT_Speed = PORT_Speed_10MHz; PORT_Init(LED_PORT, &PORT_InitStructure); // 配置地址引脚为推挽输出 PORT_InitStructure.PORT_Pin = 0x07; // P14的3位 PORT_InitStructure.PORT_Mode = PORT_Mode_OUT; PORT_InitStructure.PORT_OutType = PORT_OutType_PP; PORT_InitStructure.PORT_Speed = PORT_Speed_10MHz; PORT_Init(ADDR_PORT, &PORT_InitStructure); } void Delay(uint32_t count) { for(uint32_t i = 0; i < count; i++); } ``` 需要注意的是,此程序只是一个示例,具体的引脚配置和控制方式需要根据实际情况进行修改。同时,需要根据实际使用的译码器型号,确定地址引脚的数量和连接方式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值