一、引脚说明
1-11 13-17 :输出端。(outputs (active LOW))
18-19:使能输入端、低电平有效 (enable inputs (active LOW))
20-23:地址输入端 (address inputs)
24:VCC电源正 (positive supply voltage)
二、真值表
A0,A1,A2,A3连接MCU的四个引脚
通过控制四个引脚的高低电平情况 可以 控制16个LED的点亮情况。
比如当四个引脚都是低电平时,LED0点亮
三、代码写法一
main.c
void led_output_init(void)
{
rcu_periph_clock_enable(RCU_GPIOG);
gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
}
int main()
{
int led_test=0;
//初始化A0,A1,A2,A3,将E1,E2使能,置低电平
led_output_init();
while(1)
{
if(led_test < 16)
{
led_test++;
}
else
{
led_test = 0;
}
switch(led_test)
{
case 0:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 1:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 2:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 3:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 4:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 5:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 6:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 7:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_reset(GPIOG, GPIO_PIN_7);
break;
case 8:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
case 9:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
case 10:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
case 11:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_reset(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
case 12:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
case 13:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_reset(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
case 14:
gpio_bit_reset(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
case 15:
gpio_bit_set(GPIOG, GPIO_PIN_4);
gpio_bit_set(GPIOG, GPIO_PIN_5);
gpio_bit_set(GPIOG, GPIO_PIN_6);
gpio_bit_set(GPIOG, GPIO_PIN_7);
break;
}
}
}
四、代码写法二
LED_74CH154.h
#ifndef _74HC154_LED_H
#define _74HC154_LED_H
#include "gd32f4xx.h"
typedef struct
{
union
{
unsigned short data;
struct
{
unsigned short LED0 :1;
unsigned short LED1 :1;
unsigned short LED2 :1;
unsigned short LED3 :1;
unsigned short LED4 :1;
unsigned short LED5 :1;
unsigned short LED6 :1;
unsigned short LED7 :1;
unsigned short LED8 :1;
unsigned short LED9 :1;
unsigned short LED10 :1;
unsigned short LED11 :1;
unsigned short LED12 :1;
unsigned short LED13 :1;
unsigned short LED14 :1;
unsigned short LED15 :1;
}Bit;
}Uniondata;
}LED;
///
extern LED Led; //LED
//
/*Function function: LED control*/
extern void LED_74CH154(uint16_t Ledbit);
#endif
LED_74CH154.c
#include "main.h"
LED Led={0}; //LED
void LED_74CH154(uint16_t Ledbit)
{
uint16_t index = 0;
for(index=0;index<16;index++)
{
switch(index)
{
case 0:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
RESETIO(LED_BIT1);
RESETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 1:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
RESETIO(LED_BIT1);
RESETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 2:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
SETIO(LED_BIT1);
RESETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 3:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
SETIO(LED_BIT1);
RESETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 4:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
RESETIO(LED_BIT1);
SETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 5:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
RESETIO(LED_BIT1);
SETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 6:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
SETIO(LED_BIT1);
SETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 7:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
SETIO(LED_BIT1);
SETIO(LED_BIT2);
RESETIO(LED_BIT3);
}
break;
case 8:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
RESETIO(LED_BIT1);
RESETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
case 9:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
RESETIO(LED_BIT1);
RESETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
case 10:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
SETIO(LED_BIT1);
RESETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
case 11:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
SETIO(LED_BIT1);
RESETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
case 12:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
RESETIO(LED_BIT1);
SETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
case 13:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
RESETIO(LED_BIT1);
SETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
case 14:
if((Ledbit >> index) & 0x01)
{
RESETIO(LED_BIT0);
SETIO(LED_BIT1);
SETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
case 15:
if((Ledbit >> index) & 0x01)
{
SETIO(LED_BIT0);
SETIO(LED_BIT1);
SETIO(LED_BIT2);
SETIO(LED_BIT3);
}
break;
default:
break;
}
}
main.c
Led.Uniondata.Bit.LED0 = 1;
LED_74CH154(Led.Uniondata.data);