单片机 MM32 HAL 74hc595 例子 代码
#include "74hc595.h"/******************
功 能:定义HC595的功能引脚
备 注:变更引脚,由MX配置完成
*******************/
const T_HC595_PIN hc595 =
{.sck_port = HC595_SCK_GPIO_Port,.sck_pin = HC595_SCK_Pin, //数据输入时钟线.data_port = HC595_SI_GPIO_Port,.data_pin = HC595_SI_Pin, //数据线.rck_port = HC595_RCK_GPIO_Port,.rck_pin = HC595_RCK_Pin, //输出存储器锁存时钟线.en_port = HC595_EN_GPIO_Port,.en_pin = HC595_EN_Pin //芯片使能
};/******************
函数名:hc595Delay
功 能:实现us级延迟
形 参:cnt--us值
返回值:无
备 注:
*******************/
void hc595Delay(uint16_t cnt)
{while (--cnt);
}/******************************
函数名:hc595Init
功 能:初始化hc595的使能脚(EN),默认工作状态
形 参:pin--hc595引脚结构体
返回值:
备 注:0--器件屏蔽 1--器件工作
*******************************/
void hc595Init(const T_HC595_PIN *pin)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚
}/******************************
函数名:hc595DeInit
功 能:初始化hc595的使能脚(EN),默认休息状态
形 参:pin--hc595引脚结构体
返回值:
备 注:0--器件屏蔽 1--器件工作
*******************************/
void hc595DeInit(const T_HC595_PIN *pin)
{GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);
}/***************************************下面是对LED的应用*****************************************************//*********************************************
函数名:hc595LedOff
功 能:关闭全部LED
形 参:
返回值:
备 注:
作 者:薛建强
时 间:2019/06/22
**********************************************/
void hc595LedOff(const T_HC595_PIN *pin)
{hc595WriteData(pin, 0x00);
}
/*********************************************
函数名:hc595LedOn
功 能:开灯全部LED
形 参:
返回值:
备 注:
作 者:薛建强
时 间:2019/06/22
**********************************************/
void hc595LedOn(const T_HC595_PIN *pin)
{GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚hc595WriteData(pin, 0xff);
}/*********************************************
函数名:hc595WriteData
功 能:对hc595器件写入1字节,代表8个io口的输出状态
形 参:pin--hc595引脚结构体 pdata--数据字节
返回值:
备 注:
作 者:薛建强
时 间:2019/06/22
**********************************************/
void hc595WriteData(const T_HC595_PIN *pin, uint8_t pdata)
{uint8_t i = 0;GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚for (i = 0; i < 8; i++){if ((pdata << i) & 0x80){GPIO_WriteBit(pin->data_port, pin->data_pin, Bit_SET);//HC595_SI=1}else{GPIO_WriteBit(pin->data_port, pin->data_pin, Bit_RESET);//HC595_SI=0}hc595Delay(1);GPIO_WriteBit(pin->sck_port, pin->sck_pin, Bit_RESET);//HC595_sck=0GPIO_WriteBit(pin->sck_port, pin->sck_pin, Bit_SET);//HC595_sck=1}hc595Delay(1);GPIO_WriteBit(pin->rck_port, pin->rck_pin, Bit_RESET);//HC595_rck=0GPIO_WriteBit(pin->rck_port, pin->rck_pin, Bit_SET);//HC595_rck=1hc595Delay(1);GPIO_WriteBit(pin->rck_port, pin->rck_pin, Bit_RESET);//HC595_rck=0
}/*********************************************
函数名:LED_AnnularPipelineLamp
功 能:LED环形流水灯,0->7顺时针 7->0逆时针
形 参:pin--hc595引脚结构体 ch--通道
返回值:
备 注:8个led灯连接到HC595器件
作 者:薛建强
时 间:2019/06/22
**********************************************/
void LED_AnnularPipelineLamp(const T_HC595_PIN *pin, uint8_t ch)
{GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚switch (ch){case 0:hc595WriteData(pin, 0xF8);break;case 1:hc595WriteData(pin, 0xF1);break;case 2:hc595WriteData(pin, 0xE3);break;case 3:hc595WriteData(pin, 0xC7);break;case 4:hc595WriteData(pin, 0x8F);break;case 5:hc595WriteData(pin, 0x1F);break;case 6:hc595WriteData(pin, 0x3E);break;case 7:hc595WriteData(pin, 0x7C);break;default:break;}
}/*********************************************
函数名:LED_AnnularPipelineLamp_3
功 能:LED环形流水灯,0->7顺时针 7->0逆时针 3个灯流水
形 参:pin--hc595引脚结构体 ch--通道
返回值:
备 注:8个led灯连接到HC595器件
作 者:薛建强
时 间:2019/06/22
**********************************************/
void LED_AnnularPipelineLamp_3(const T_HC595_PIN *pin, uint8_t ch)
{GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚switch (ch){// case 0:
// hc595WriteData(pin, 0x07);
// break;
// case 1:
// hc595WriteData(pin, 0x0E);
// break;
// case 2:
// hc595WriteData(pin, 0x1C);
// break;
// case 3:
// hc595WriteData(pin, 0x38);
// break;
// case 4:
// hc595WriteData(pin, 0x70);
// break;
// case 5:
// hc595WriteData(pin, 0xE0);
// break;
// case 6:
// hc595WriteData(pin, 0xC1);
// break;
// case 7:
// hc595WriteData(pin, 0x83);
// break;case 0:hc595WriteData(pin, 0x03);break;case 1:hc595WriteData(pin, 0x06);break;case 2:hc595WriteData(pin, 0x0C);break;case 3:hc595WriteData(pin, 0x18);break;case 4:hc595WriteData(pin, 0x30);break;case 5:hc595WriteData(pin, 0x60);break;case 6:hc595WriteData(pin, 0x81);break;
// case 7:
// hc595WriteData(pin, 0x03);
// break;default:break;}
}/*********************************************
函数名:LED_TwowayDescent
功 能:双路流水灯
形 参:pin--hc595引脚结构体 ch--通道
返回值:
备 注:
作 者:薛建强
时 间:2019/06/22
**********************************************/
void LED_TwowayDescent(const T_HC595_PIN *pin, uint8_t ch)
{GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚switch (ch){case 0:hc595WriteData(pin, 0x01);break;case 1:hc595WriteData(pin, 0x82);break;case 2:hc595WriteData(pin, 0x44);break;case 3:hc595WriteData(pin, 0x28);break;case 4:hc595WriteData(pin, 0x10);break;default:break;}
}/*********************************************
函数名:LED_CyclicMode
功 能:DV循环模式下的效果
形 参:pin--hc595引脚结构体 ch--通道
返回值:
备 注:
作 者:薛建强
时 间:2019/06/22
**********************************************/
void LED_CyclicMode(const T_HC595_PIN *pin, const uint8_t ch)
{GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚switch (ch){// 第一圈case 0:hc595WriteData(pin, 0xFE);break;case 1:hc595WriteData(pin, 0xFC);break;case 2:hc595WriteData(pin, 0xF8);break;case 3:hc595WriteData(pin, 0xF0);break;case 4:hc595WriteData(pin, 0xE0);break;case 5:hc595WriteData(pin, 0xC0);break;case 6:hc595WriteData(pin, 0x80);break;case 7:hc595WriteData(pin, 0x00);break;// 第二圈case 8:hc595WriteData(pin, 0x01);break;case 9:hc595WriteData(pin, 0x03);break;case 10:hc595WriteData(pin, 0x07);break;case 11:hc595WriteData(pin, 0x0F);break;case 12:hc595WriteData(pin, 0x1F);break;case 13:hc595WriteData(pin, 0x3F);break;case 14:hc595WriteData(pin, 0x7F);break;case 15:hc595WriteData(pin, 0xFF);break;default:break;}
}/*********************************************
函数名:Batter_EleShow
功 能:电量显示
形 参:pin--hc595引脚结构体 Batter--电量的百分比
返回值:
备 注:
作 者:薛建强
时 间:2019/06/22
**********************************************/
uint8_t LedFlash_Tmr = 0;
void Batter_EleShow(const T_HC595_PIN *pin, const uint8_t Batter)
{GPIO_WriteBit(pin->en_port, pin->en_pin, Bit_SET);//打开使能脚if (Batter < 12) // 1格{if (Batter <= 10) // 低电量提示,蜂鸣器开启{if (LedFlash_Tmr < 250 && ++LedFlash_Tmr < 2) // 指示灯闪烁{hc595WriteData(pin, 0x01);}else if (LedFlash_Tmr >= 2 && LedFlash_Tmr < 3){hc595WriteData(pin, 0x00);}else{LedFlash_Tmr = 0;}}else // 5% ~ 12% 显示最后一格电量{LedFlash_Tmr = 0;hc595WriteData(pin, 0x01);}}else if (Batter >= 12 && Batter < 24) // 2格{hc595WriteData(pin, 0x03);}else if (Batter >= 24 && Batter < 36) // 3格{hc595WriteData(pin, 0x07);}else if (Batter >= 36 && Batter < 48) // 4格{hc595WriteData(pin, 0x0F);}else if (Batter >= 48 && Batter < 60) // 5格{hc595WriteData(pin, 0x1F);}else if (Batter >= 60 && Batter < 72) // 6格{hc595WriteData(pin, 0x3F);}else if (Batter >= 72 && Batter < 84) // 7格{hc595WriteData(pin, 0x7F);}else // 8格{hc595WriteData(pin, 0xFF);}
}/*********************************************
函数名:Batter_ChargeShow
功 能:电池充电显示
形 参:pin--hc595引脚结构体 Batter--电量的百分比
返回值:
备 注:
作 者:薛建强
时 间:2019/06/22
**********************************************/
#define ChargeValue 3 // 充电时间值
uint8_t time = 0; // 充电指示电路
void Batter_ChargeShow(const T_HC595_PIN *pin, const uint8_t Batter)
{if (Batter < 12) // 1格{if (time < 250 && ++time < ChargeValue){hc595WriteData(pin, 0x00);}else if (time >= ChargeValue && time < 2 * ChargeValue){hc595WriteData(pin, 0x01);}else{time = 0;}}else if (Batter >= 12 && Batter < 24) // 2格{if (time < 250 && ++time <= ChargeValue){hc595WriteData(pin, 0x01);}else if (time > ChargeValue && time < 2 * ChargeValue){hc595WriteData(pin, 0x03);}else{time = 0;}}else if (Batter >= 24 && Batter < 36) // 3格{if (time < 250 && ++time <= ChargeValue){hc595WriteData(pin, 0x03);}else if (time > ChargeValue && time < 2 * ChargeValue){hc595WriteData(pin, 0x07);}else{time = 0;}}else if (Batter >= 36 && Batter < 48) // 4格{if (time < 250 && ++time <= ChargeValue){hc595WriteData(pin, 0x07);}else if (time > ChargeValue && time < 2 * ChargeValue){hc595WriteData(pin, 0x0F);}else{time = 0;}}else if (Batter >= 48 && Batter < 60) // 5格{if (time < 250 && ++time <= ChargeValue){hc595WriteData(pin, 0x0F);}else if (time > ChargeValue && time < 2 * ChargeValue){hc595WriteData(pin, 0x1F);}else{time = 0;}}else if (Batter >= 60 && Batter < 72) // 6格{if (time < 250 && ++time <= ChargeValue){hc595WriteData(pin, 0x1F);}else if (time > ChargeValue && time < 2 * ChargeValue){hc595WriteData(pin, 0x3F);}else{time = 0;}}else if (Batter >= 72 && Batter < 95) // 7格{if (time < 250 && ++time < ChargeValue){hc595WriteData(pin, 0xFF);}else if (time >= ChargeValue && time < 2 * ChargeValue){hc595WriteData(pin, 0x7F);}else{time = 0;}}else // 8格{time = 0;hc595WriteData(pin, 0xFF);}
}
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __74HC595_HEADER__
#define __74HC595_HEADER__/* USER CODE BEGIN Includes */
#include "main.h"/* USER CODE END Includes */#define HC595_SCK_Pin GPIO_Pin_1
#define HC595_SCK_GPIO_Port GPIOB
#define HC595_RCK_Pin GPIO_Pin_2
#define HC595_RCK_GPIO_Port GPIOB
#define HC595_SI_Pin GPIO_Pin_8
#define HC595_SI_GPIO_Port GPIOA
#define HC595_EN_Pin GPIO_Pin_4
#define HC595_EN_GPIO_Port GPIOAtypedef struct
{GPIO_TypeDef* sck_port;uint16_t sck_pin;GPIO_TypeDef* data_port;uint16_t data_pin;GPIO_TypeDef* rck_port;uint16_t rck_pin;GPIO_TypeDef* en_port;uint16_t en_pin;
} T_HC595_PIN;extern const T_HC595_PIN hc595;/* Exported functions prototypes ---------------------------------------------*/
void hc595Init(const T_HC595_PIN *pin);
void hc595DeInit(const T_HC595_PIN *pin);
void hc595WriteData(const T_HC595_PIN *pin, uint8_t pdata);/*流水灯的应用*/
void hc595LedOn(const T_HC595_PIN *pin);
void hc595LedOff(const T_HC595_PIN *pin);
void LED_AnnularPipelineLamp(const T_HC595_PIN *pin,uint8_t ch);
void LED_TwowayDescent(const T_HC595_PIN *pin, uint8_t ch);
void LED_CyclicMode(const T_HC595_PIN *pin, const uint8_t ch);void Batter_EleShow(const T_HC595_PIN *pin, const uint8_t Batter);
void Batter_ChargeShow(const T_HC595_PIN *pin, const uint8_t Batter);
void LED_AnnularPipelineLamp_3(const T_HC595_PIN *pin, uint8_t ch);void hc595Delay(uint16_t cnt);
#endif
单片机 MM32 HAL 74hc595 例子 代码相关推荐
- 单片机 STM32 HAL PCF8574 例子代码
#include "extgpio.h" #include "pcf8574.h" #include "74hc595.h" /****** ...
- 单片机编程好学吗?单片机初学者怎样看懂代码?
单片机在很多人看来好像门槛很高,在某些人看来很简单. 所以,单片机编程好不好学,这取决于谁去学,有没有基础,有没有兴趣. 我自己是通过自学学会的,我个人认为相对java那些纯软件,单片机比较好学. 单 ...
- 基于STC15W4K32S4单片机仿真《74HC595驱动数码管静态显示》
1. 编 程 软 件:keil5版本. 2.仿 真 软 件:Proteus8.12 3.单片机选型:STC15W4K32S4 4.学 习 目 标:1.学习74HC595芯片工作方式 ...
- FileInputStream与FileOutputStream 复制文件例子代码
FileInputStream与FileOutputStream 复制文件例子代码 try {File sourceFile = new File("C:\\Users\\prize\\De ...
- java2实用教程第5版第九章_java2实用教程(例子代码)第4版第九章.doc
java2实用教程(例子代码)第4版第九章 java2实用教程(例子代码)第4版第九章 例9_3 Lt4_3.java public clss Lt4_3 { public static void m ...
- POS消费机C#例子代码
详细代码 using System; using System.Drawing; using System.Collections; using System.ComponentModel; usin ...
- POS机C井例子代码(2)
详细代码 using System; using System.Drawing; using System.Collections; using System.ComponentModel; usin ...
- 蓝桥杯单片机DS1302时钟芯片驱动代码注释
蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...
- android 相对布局例子代码
android 相对布局例子代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
最新文章
- linux汇编div除法,汇编:div 除法指令
- 并发锁之二:ReentrantReadWriteLock读写锁
- 【ruoyi若依】Caused by: java.lang.NoClassDefFoundError: com/sun/jna/platform/win32/VersionHelpers
- java ee最新_从此再无 JavaEE,现在叫 JakartaEE
- ping tracert over TCP
- 【论文复现】使用fastText进行文本分类
- Java实现冒泡排序及逆序冒泡排序
- 字节跳动一面:如何从 100 亿 URL 中找出相同的 URL?
- python爬虫淘宝评论_记录一次爬取淘宝/天猫评论数据的过程
- 单片机中,intrins.h头文件中各函数详解:空指令_nop_(),移位函数_crol_、_cror_
- 3D检测入门知识梳理
- Js文字特效—文字段逐个变色循环
- 尼康D500套机相机黑屏是怎么回事
- android 微信 https 证书,微信https未授权证书究竟是什么意思
- 最小生成树—Prim算法
- mysql数据完整性实验报告,数据库原理实验报告(Mysql)
- 专业音频如何把电平转换成dbu_如何实现电平转换,多种方法
- Windows 应急响应辅助笔记
- 外网远程控制LED小灯的实现
- c++——vc++中的六种Runtime Library的类型