历史上的今天
今天是:2024年09月09日(星期一)
2021年09月09日 | 基于STM32F0xx单片机的74HC595驱动程序
2021-09-09 来源:eefocus
74HC595.c源文件
#include "74HC595.h"
void LED595Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOC , ENABLE);
//Data Pin
// GPIO_InitStructure.GPIO_Pin = LED595_DATA_PIN;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
// GPIO_Init(LED595_DATA_PIN, &GPIO_InitStructure);
//Clk Pin
GPIO_InitStructure.GPIO_Pin = LED595_CLK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED595_CLK_PORT, &GPIO_InitStructure);
//Latch Pin
GPIO_InitStructure.GPIO_Pin = LED595_LATCH_PIN | LED595_DATA_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED595_LATCH_PORT, &GPIO_InitStructure);
}
/**
* @brief 将输入的数据输出到74HC595的引脚.
* @param Input 1 byte data.
* @retval None.
**/
void LED595SendData(unsigned char OutData)
{
unsigned char i; //发送数据时做循环使用临时变量
for(i=0; i<8; i++) //将8位数据按位发送,先发送高字节后发送低字节
{
LED595_CLK_RESET;//时钟线低电平
if( (OutData & 0x80) == 0x80)//判断数据高低位
{
LED595_DATA_SET; //数据线高电平
}
else
{
LED595_DATA_RESET; //数据线低电平
}
OutData = OutData << 1; //数据左移1位
LED595_CLK_SET; //时钟线高电平
}
//上升沿输出数据
LED595_LATCH_RESET;
LED595_LATCH_SET;
}
74HC595.h头文件
//74HC595口线定义宏定义.当驱动74HC595引脚改变时,只需更改底层引脚宏定义即可
#ifndef __74HC595_H
#define __74HC595_H
#include "stm32f0xx.h"
//#include "stm32f0xx_gpio.h"
#define LED595_DATA_PORT GPIOC
#define LED595_DATA_PIN GPIO_Pin_8
#define LED595_CLK_PORT GPIOA
#define LED595_CLK_PIN GPIO_Pin_12
#define LED595_LATCH_PORT GPIOC
#define LED595_LATCH_PIN GPIO_Pin_12
//74HC595口线高低电平宏定义
#define LED595_DATA_SET GPIO_SetBits(LED595_DATA_PORT,LED595_DATA_PIN)
#define LED595_DATA_RESET GPIO_ResetBits(LED595_DATA_PORT,LED595_DATA_PIN)
#define LED595_CLK_SET GPIO_SetBits(LED595_CLK_PORT,LED595_CLK_PIN)
#define LED595_CLK_RESET GPIO_ResetBits(LED595_CLK_PORT,LED595_CLK_PIN)
#define LED595_LATCH_SET GPIO_SetBits(LED595_LATCH_PORT,LED595_LATCH_PIN)
#define LED595_LATCH_RESET GPIO_ResetBits(LED595_LATCH_PORT,LED595_LATCH_PIN)
void LED595Init(void);
void LED595SendData(unsigned char OutData);
#endif
main函数调用
LED595SendData(0x00);
Delay_Ms(1000);
LED595SendData(0xff);
Delay_Ms(1000);
史海拾趣
|
基于TMS320F28027的语言录放模块的设计 文章介绍了这次活动中的关键模块(语音录放模块)的基本设计思路和整个系统的构架,通过一些实际参量的分析,计算,提高整个系统前期设计的可实现性,虽然这个模型还没有经过实际验证,相关的参考实例也比较少,但他 ...… 查看全部问答> |
|
Q: 公司的芯片上有一个16Bits的DAC,由于以前一直做Digital IC测试,对这个器件的测试原理没有概念,只知道INL、DNL、THD、SNR等参数的定义,不知道在实际的测试中怎样进行测试?那位高手做过此方面的测试,能否告诉那些参数是必测的,怎样测试? ...… 查看全部问答> |
|
VS2005基于智能设备的程序,对话框里的组控件里最多放置几个控件 用Vs 2005开发的VC 应用程序里,组控件里最多放几个控件变量啊?我的怎么放了八个就放不下别的了,确切的说是能放下但运行的时候 根本不显示,能不能更改一些设置,让组控件放的控件变多? … 查看全部问答> |
|
LED灯饰产业已经大战三年多了,有的企业到现在发展的确实不错,新搬了大厂房,鸟枪换炮了,可是一些企业始终保持维持生存,也倒闭了一些厂,现在由其今年电子工业很火,把一些配套产业也拉了出来,这样火的背后是原材料涨价,而且以前不好销的元器 ...… 查看全部问答> |
|
各位前辈,香主,浪主,小弟在使用STM32的CAN时有一些问题:问题1:我所了解到的,每一个FILTER漏入的数据只能指定放在一个FIFO(0或1),而在应用中绝大多数的数据是从一个FILTER中漏入的,所以,都挤在FIFO0中,FIFO1没有什么用处,能不能把两个FIFO连 ...… 查看全部问答> |
|
虽然现成的arduino板功能很齐全,而且还配套了软件平台,做到硬件软件一体化,但我总觉得如果已经学会使用51单片机,就没必要买一块arduino板,毕竟很多功能可以DIY,一般的89S52单片机没有PWM输出等功能,但STC12系列的单片机同样有很强大的功能。 ...… 查看全部问答> |




