基于STM32的HAL库驱动TM1637数码管显示

您所在的位置:网站首页 数码管显示1234后再显示5678 基于STM32的HAL库驱动TM1637数码管显示

基于STM32的HAL库驱动TM1637数码管显示

2023-06-13 13:10| 来源: 网络整理| 查看: 265

引脚配置

首先在STM32CUBE里面配置引脚, 在这里插入图片描述

头文件 /* ************************************************************ TM1637 是一种带键盘扫描接口的LED (发光二极管显示器)驱动控制专用电路, 内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。 本产品性能优良,质量可靠。主要应用于电磁炉、微波炉及小家电产品的显示屏驱动。采用DIP/SOP20的封装形式。 采用功率CMOS 工艺 显示模式(8 段X6 位),支持共阳数码管输出 键扫描 (8 X 2b) ,增强型抗干扰按键识别电路 辉度调节电路 (占空比 8 级可调)两线串行接口 (CLK,DIO)振荡方式: 内置RC 振荡 (450KHz+5%) 内置上电复位电路 内置自动消隐电路 封装形式: DIP20/SOP20 ************************************************************ */ #ifndef __TM1637_H #define __TM1637_H #include "main.h" #define TM1637_CLK_H() HAL_GPIO_WritePin(TM1637_CLK_GPIO_Port,TM1637_CLK_Pin,GPIO_PIN_SET) #define TM1637_CLK_L() HAL_GPIO_WritePin(TM1637_CLK_GPIO_Port,TM1637_CLK_Pin,GPIO_PIN_RESET) #define TM1637_SDA_H() HAL_GPIO_WritePin(TM1637_SDA_GPIO_Port,TM1637_SDA_Pin,GPIO_PIN_SET) #define TM1637_SDA_L() HAL_GPIO_WritePin(TM1637_SDA_GPIO_Port,TM1637_SDA_Pin,GPIO_PIN_RESET) /* 使用方法: 1、设置背光亮度TM1637_SetBL 2、设置工作模式TM1637_SetWorkMode(目前无0x42读键模式) 3、显示数据TM1637_Disp */ void TM1637_SetBL(uint8_t level);/*设置显示亮度,0=关闭,8最大*/ void TM1637_SetWorkMode(uint8_t mode);/*工作模式,0x40=地址自增显示,0x44=固定地址显示,0x42=读键扫数据*/ void TM1637_Disp(uint8_t *p,uint8_t lenth); #endif C文件 #include "tm1637.h" const uint8_t DISP_CODE_COM_ANNODE[] = /*共阳段码*/ { 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/ 0x77,/*10 A*/ 0x7C,/*11 b*/ 0x58,/*12 c*/ 0x5E,/*13 d*/ 0x79,/*14 E*/ 0x71,/*15 F*/ 0x76,/*16 H*/ 0x38,/*17 L*/ 0x54,/*18 n*/ 0x73,/*19 P*/ 0x3E,/*20 U*/ 0x00,/*21 ??*/ };//这里是数码管显示字符所对应的数据 void TM1637_Start(void) { TM1637_SDA_H(); TM1637_CLK_H(); TM1637_SDA_L(); TM1637_CLK_L(); } void TM1637_Stop(void) { TM1637_CLK_L(); TM1637_SDA_L(); TM1637_CLK_H(); TM1637_SDA_H(); } void TM1637_SendByte(uint8_t dat) { for(uint8_t i=0; i TM1637_SDA_H(); } else { TM1637_SDA_L(); } dat >>= 1; TM1637_CLK_H(); } } void TM1637_WaitAck(void) { uint8_t i=0; TM1637_CLK_L(); while(i backLight = 0x80; } else if(level > 8) { backLight = 0x8f; } else { backLight = 0x88 | (level-1); } TM1637_Start(); TM1637_SendByte(backLight); TM1637_WaitAck(); TM1637_Stop(); } void TM1637_SetWorkMode(uint8_t mode) { /*设置地址模式*/ TM1637_Start(); TM1637_SendByte(0x40);/*工作模式,0x40=地址自增显示,0x44=固定地址显示,0x42=读键扫数据*/ TM1637_WaitAck(); TM1637_Stop(); } void TM1637_Disp(uint8_t *p,uint8_t lenth) { uint8_t i; uint8_t data; // /*设置地址模式*/ // TM1637_Start(); // TM1637_SendByte(0x40); // TM1637_WaitAck(); // TM1637_Stop(); /*设置首地址*/ TM1637_Start(); TM1637_SendByte(0xc0);/*0XC0=GRID0;0XC5=GRID5*/ TM1637_WaitAck(); /*发送数据*/ for(i=0; i g_ucaDispCode[0] = g_usCO2ppm/1000; g_ucaDispCode[1] = g_usCO2ppm/100%10; g_ucaDispCode[2] = g_usCO2ppm/10%10; g_ucaDispCode[3] = g_usCO2ppm%10; TM1637_Disp(g_ucaDispCode,4); } 注意

程序没有启用按键读取功能,只简单显示。ack也没有判断,直接延时跳过。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3