#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 例子 代码相关推荐

  1. 单片机 STM32 HAL PCF8574 例子代码

    #include "extgpio.h" #include "pcf8574.h" #include "74hc595.h" /****** ...

  2. 单片机编程好学吗?单片机初学者怎样看懂代码?

    单片机在很多人看来好像门槛很高,在某些人看来很简单. 所以,单片机编程好不好学,这取决于谁去学,有没有基础,有没有兴趣. 我自己是通过自学学会的,我个人认为相对java那些纯软件,单片机比较好学. 单 ...

  3. 基于STC15W4K32S4单片机仿真《74HC595驱动数码管静态显示》

    1. 编 程 软 件:keil5版本. 2.仿 真 软 件:Proteus8.12 3.单片机选型:STC15W4K32S4 4.学 习 目 标:1.学习74HC595芯片工作方式           ...

  4. FileInputStream与FileOutputStream 复制文件例子代码

    FileInputStream与FileOutputStream 复制文件例子代码 try {File sourceFile = new File("C:\\Users\\prize\\De ...

  5. java2实用教程第5版第九章_java2实用教程(例子代码)第4版第九章.doc

    java2实用教程(例子代码)第4版第九章 java2实用教程(例子代码)第4版第九章 例9_3 Lt4_3.java public clss Lt4_3 { public static void m ...

  6. POS消费机C#例子代码

    详细代码 using System; using System.Drawing; using System.Collections; using System.ComponentModel; usin ...

  7. POS机C井例子代码(2)

    详细代码 using System; using System.Drawing; using System.Collections; using System.ComponentModel; usin ...

  8. 蓝桥杯单片机DS1302时钟芯片驱动代码注释

    蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...

  9. android 相对布局例子代码

    android 相对布局例子代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

最新文章

  1. linux汇编div除法,汇编:div 除法指令
  2. 并发锁之二:ReentrantReadWriteLock读写锁
  3. 【ruoyi若依】Caused by: java.lang.NoClassDefFoundError: com/sun/jna/platform/win32/VersionHelpers
  4. java ee最新_从此再无 JavaEE,现在叫 JakartaEE
  5. ping tracert over TCP
  6. 【论文复现】使用fastText进行文本分类
  7. Java实现冒泡排序及逆序冒泡排序
  8. 字节跳动一面:如何从 100 亿 URL 中找出相同的 URL?
  9. python爬虫淘宝评论_记录一次爬取淘宝/天猫评论数据的过程
  10. 单片机中,intrins.h头文件中各函数详解:空指令_nop_(),移位函数_crol_、_cror_
  11. 3D检测入门知识梳理
  12. Js文字特效—文字段逐个变色循环
  13. 尼康D500套机相机黑屏是怎么回事
  14. android 微信 https 证书,微信https未授权证书究竟是什么意思
  15. 最小生成树—Prim算法
  16. mysql数据完整性实验报告,数据库原理实验报告(Mysql)
  17. 专业音频如何把电平转换成dbu_如何实现电平转换,多种方法
  18. Windows 应急响应辅助笔记
  19. 外网远程控制LED小灯的实现
  20. c++——vc++中的六种Runtime Library的类型

热门文章

  1. annimation动画
  2. 青花瓷抓包工具如何对Android手机https请求抓包及华为手机安装Charles证书方法详解!
  3. MYSQL死掉后自动重启脚本
  4. SSL中,公钥、私钥、证书的后缀名都是些啥?
  5. 九阳真经名句欣赏:清风拂山冈
  6. 显示器属于计算机网络连接设备吗,下列属于计算机外部设备的是()。A.调制解调器B.音箱C.硬盘D.扫描仪E.显示器...
  7. 使用 HTML5 Canvas 标签的贪吃蛇游戏
  8. 如何让你的U盘在电脑上传输文件时速度快一些
  9. BI软件是做什么用的
  10. rtx gpu kera loss不降或为nan