TM1637数码管显示 HAL库

电赛结束了,21E题,用到了数码管
虽然数字信号传输正常
但是模拟电路出了问题,省二,有点不甘吧
——————————————————————
四个引脚的数码管,四个数字
调了一下,显示成功
在这里插入图片描述

下面的代码是来自
在这里插入图片描述
我修改了一点,想显示什么就

		TM1637_display(6,6,6,6,0);	//第五位中间的冒号

设置两个引脚
添加到工程中即可
效果图等等

工程象征性的1积分
工程文件

.c文件

#include "TM1637.h"
unsigned char tab[] =
{
    
    
	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_WriteBit(unsigned char mBit)
{
    
    
	CLK_0;
	delay_us(140);

	if(mBit)
		DIO_1;
	else
		DIO_0;
 
	delay_us(140);
	CLK_1;
	delay_us(140);	
} 
void TM1637_WriteByte(unsigned char Byte)
{
    
    
	char loop = 0;
	for(loop = 0;loop<8;loop++)
	{
    
    
		TM1637_WriteBit((Byte>>loop) & 0x01);//ÏÈдµÍλ	
	}
	CLK_0;
	delay_us(140);
	DIO_1;	
	delay_us(140);
	CLK_1;		
	delay_us(140);
	while(HAL_GPIO_ReadPin(TM_DIO_CLK_GPIO_Port,TM_DIO_CLK_Pin) == 0x01);
}
void TM1637_start(void)
{
    
    
	 CLK_1;
	 DIO_1;
	 delay_us(2);
	 DIO_0;
}
void TM1637_ack(void)
{
    
    
	uint8_t i;
	CLK_0;
	delay_us(5);

	while(HAL_GPIO_ReadPin(TM_DIO_CLK_GPIO_Port,TM_DIO_CLK_Pin) == 0x01&&(i<250))
		i++;
	
	CLK_1;
	
	delay_us(2);
	
	CLK_0;
}
void TM1637_stop(void)
{
    
    
	 CLK_0;
	 delay_us(2);
	 DIO_0;
	 delay_us(2);
	 CLK_1;
	 delay_us(2);
	 DIO_1;
	 delay_us(2);
}

void TM1637_Write(unsigned char DATA)   
{
    
    
	unsigned char i;   
	for(i=0;i<8;i++)        
	{
    
    
		CLK_0;     
		if(DATA & 0x01)
			DIO_1;
		else 
			DIO_0;
		
		delay_us(3);
		
		DATA=DATA>>1;      
		CLK_1;
		
		delay_us(3);
	}
}
void TM1637_display(uint8_t a,uint8_t b,uint8_t c,uint8_t d,uint8_t h)
{
    
    
	TM1637_start();
	TM1637_Write(0x40);
	TM1637_ack();
	TM1637_stop();
	
	TM1637_start();
	
	TM1637_Write(0xc0);
	TM1637_ack();
	
	TM1637_Write(tab[a]);
	TM1637_ack();
	
	TM1637_Write(tab[b]|h<<7);
	TM1637_ack();
	
	TM1637_Write(tab[c]);
	TM1637_ack();
	
	TM1637_Write(tab[d]);
	TM1637_ack();
	
	TM1637_stop();
	
	TM1637_start();
	TM1637_Write(0x8F);
	TM1637_ack();
	TM1637_stop();
}
void delay_us(int i)
{
    
    
		for (;i>0;i--)
			for(int j=0;j<167;j++)
				for(int z= 0; z<10;z++);
}

.h文件

#ifndef __TM1637_H
#define __TM1637_H	
#include "main.h"
#define TM1637_RCC_Cmd    RCC_APB2PeriphClockCmd
#define      CLK_1         HAL_GPIO_WritePin(TM_CLK_CLK_GPIO_Port,TM_CLK_CLK_Pin,GPIO_PIN_SET)
#define      CLK_0         HAL_GPIO_WritePin(TM_CLK_CLK_GPIO_Port,TM_CLK_CLK_Pin,GPIO_PIN_RESET)
#define      DIO_1         HAL_GPIO_WritePin(TM_DIO_CLK_GPIO_Port,TM_DIO_CLK_Pin,GPIO_PIN_SET)
#define      DIO_0         HAL_GPIO_WritePin(TM_DIO_CLK_GPIO_Port,TM_DIO_CLK_Pin,GPIO_PIN_RESET)

void GPIO_Config(void);
void TM1637_WriteBit(unsigned char mBit);
void TM1637_WriteByte(unsigned char Byte);
void TM1637_start(void);
void TM1637_ack(void);
void delay_us(int i);
void TM1637_stop(void);
void TM1637_Write(unsigned char DATA);
void TM1637_display(uint8_t a,uint8_t b,uint8_t c,uint8_t d,uint8_t h);

 
#endif 

猜你喜欢

转载自blog.csdn.net/Harry_CHL/article/details/121340048