74HC154D-LED

一、引脚说明

1-11 13-17 :输出端。(outputs (active LOW))

12:Gnd电源地 (ground (0 V))

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值