178 lines
3.6 KiB
C
178 lines
3.6 KiB
C
|
|
/*************************************************************************
|
|||
|
|
> File Name: 74hc595.c
|
|||
|
|
> Author: ma6174
|
|||
|
|
> Mail: ma6174@163.com
|
|||
|
|
> Created Time: 2023/9/20 17:48:24
|
|||
|
|
************************************************************************/
|
|||
|
|
|
|||
|
|
#include "bsp_74hc595.h"
|
|||
|
|
#include <stdlib.h>
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <stdint.h>
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define DS_MOS(a) if (a) \
|
|||
|
|
gpio_bits_set(GPIOB, GPIO_PINS_14);\
|
|||
|
|
else \
|
|||
|
|
gpio_bits_reset(GPIOB, GPIO_PINS_14)
|
|||
|
|
|
|||
|
|
#define SHCP_MOS(a) if (a) \
|
|||
|
|
gpio_bits_set(GPIOA, GPIO_PINS_8);\
|
|||
|
|
else \
|
|||
|
|
gpio_bits_reset(GPIOA, GPIO_PINS_8)
|
|||
|
|
|
|||
|
|
#define STCP_MOS(a) if (a) \
|
|||
|
|
gpio_bits_set(GPIOB, GPIO_PINS_15);\
|
|||
|
|
else \
|
|||
|
|
gpio_bits_reset(GPIOB, GPIO_PINS_15)
|
|||
|
|
|
|||
|
|
#define OE_MOS(a) if (a) \
|
|||
|
|
gpio_bits_set(GPIOB, GPIO_PINS_13);\
|
|||
|
|
else \
|
|||
|
|
gpio_bits_reset(GPIOB, GPIO_PINS_13)
|
|||
|
|
|
|||
|
|
#define MR_MOS(a) if (a) \
|
|||
|
|
gpio_bits_set(GPIOA, GPIO_PINS_7);\
|
|||
|
|
else \
|
|||
|
|
gpio_bits_reset(GPIOA, GPIO_PINS_7)
|
|||
|
|
|
|||
|
|
inline void ic_74hc595_delay(uint32_t num)
|
|||
|
|
{
|
|||
|
|
while(num --);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void ic_74hc595_init(void)
|
|||
|
|
{
|
|||
|
|
gpio_init_type gpio_init_struct;
|
|||
|
|
|
|||
|
|
/* enable the led clock */
|
|||
|
|
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK,TRUE);
|
|||
|
|
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK,TRUE);
|
|||
|
|
|
|||
|
|
/* set default parameter */
|
|||
|
|
gpio_default_para_init(&gpio_init_struct);
|
|||
|
|
|
|||
|
|
/* configure the led gpio */
|
|||
|
|
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
|
|||
|
|
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
|
|||
|
|
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
|
|||
|
|
gpio_init_struct.gpio_pins = GPIO_PINS_8;
|
|||
|
|
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
|
|||
|
|
gpio_init(GPIOA, &gpio_init_struct);
|
|||
|
|
|
|||
|
|
gpio_init_struct.gpio_pins = GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15;
|
|||
|
|
gpio_init(GPIOB, &gpio_init_struct);
|
|||
|
|
ic_74hc595_clean_0(32);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0;
|
|||
|
|
//<2F><>ΪӲ<CEAA><D3B2><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ɨ
|
|||
|
|
void ic_74hc595_io_write_1(uint8_t io_num)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
DS_MOS(1);
|
|||
|
|
SHCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
|
|||
|
|
for(uint8_t i = 0; i < io_num; i++)
|
|||
|
|
{
|
|||
|
|
DS_MOS(0);
|
|||
|
|
SHCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
}
|
|||
|
|
STCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>
|
|||
|
|
//<2F><>ΪӲ<CEAA><D3B2><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ɨ
|
|||
|
|
void ic_74hc595_io_write_0(uint8_t io_num)
|
|||
|
|
{
|
|||
|
|
DS_MOS(0);
|
|||
|
|
SHCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
|
|||
|
|
for(uint8_t i = 0; i < io_num; i++)
|
|||
|
|
{
|
|||
|
|
DS_MOS(1);
|
|||
|
|
SHCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
}
|
|||
|
|
STCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
}
|
|||
|
|
//<2F><>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>0
|
|||
|
|
//<2F><>ΪӲ<CEAA><D3B2><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ɨ
|
|||
|
|
void ic_74hc595_clean_0(uint8_t io_num)
|
|||
|
|
{
|
|||
|
|
DS_MOS(0);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
|
|||
|
|
for(uint8_t i = 0; i < io_num; i++)
|
|||
|
|
{
|
|||
|
|
SHCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
|
|||
|
|
//<2F><>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>Ϊ<EFBFBD>´<EFBFBD><EFBFBD><D7BC>
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
STCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>1;
|
|||
|
|
//<2F><>ΪӲ<CEAA><D3B2><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ɨ
|
|||
|
|
void ic_74hc595_clean_1(uint8_t io_num)
|
|||
|
|
{
|
|||
|
|
DS_MOS(1);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
|
|||
|
|
for(uint8_t i = 0; i < io_num; i++)
|
|||
|
|
{
|
|||
|
|
SHCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
|
|||
|
|
//<2F><>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>Ϊ<EFBFBD>´<EFBFBD><EFBFBD><D7BC>
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
STCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void ic_74hc595_wirte_32bit(uint32_t data)
|
|||
|
|
{
|
|||
|
|
DS_MOS(0);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
uint32_t temp = 0;
|
|||
|
|
for(uint8_t i = 0; i < 32; i++)
|
|||
|
|
{
|
|||
|
|
temp = data & (0x80000000>>i);
|
|||
|
|
DS_MOS(temp);
|
|||
|
|
SHCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
SHCP_MOS(0);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
}
|
|||
|
|
STCP_MOS(1);
|
|||
|
|
ic_74hc595_delay(1);
|
|||
|
|
STCP_MOS(0);
|
|||
|
|
}
|
|||
|
|
|