四位数码管IIC-TM1637

前者是 移位寄存器 

https://blog.csdn.net/weixin_41445387/article/details/80500046

可以百度 595数码管

是我写的第一个驱动

后者是IIC的 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.1d192e8dn3Zepv&id=40127496123&_u=dvcquvh808b

开始写

https://blog.csdn.net/Tesla_0/article/details/86662224

基于涂鸦的那个吧 刚刚做的STM32 

很快成功

1--准备US延时 用TIM1

2--准备GPIO就是正常LED

3--加入软件IIC时许 就是上面文章 

测试OK 现在准备看文档吧

$ git remote -v
origin  git@github.com:GKoSon/tuyago.git (fetch)
origin  git@github.com:GKoSon/tuyago.git (push)
 

#include "TM1637.h"
#include "main.h"

#define Delay_Us TIM1_Delay 
unsigned char  Data[]  ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char  DataDp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
struct {
	char shi;
	char ge;
}Hour;
 
struct {
	char shi;
	char ge;
}Min;



void GPIO_Config(void)
{
 /* GPIO_InitStruct.Pin = LED_Pin|SCL_Pin|SDA_Pin */
}


/*
时钟线为高时,数据线由高变低
*/
void I2C_Start(void)
{
    CLK_1;
    DIO_1;
    Delay_Us(140);

    DIO_0;
    Delay_Us(140);
    CLK_0;
    Delay_Us(140);
}


/*
*时钟线为高时,数据线由低变高
*/
void I2C_stop(void)
{
    CLK_0;
    Delay_Us(140);
    DIO_0;
    Delay_Us(140);

    CLK_1;
    Delay_Us(140);	
    DIO_1;
    Delay_Us(140);  	
}


   //写一个比特位
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_PORT ,TM_DIO_PIN) == GPIO_PIN_SET);
        //等待应答信号
}
    
/*
*写指令函数
*B7:B6 =01  数据命令控制
*            11地址命令控制
*            10显示命令控制
*/

void TM1637_WriteCommand(unsigned char mData)
{
	I2C_Start();
	TM1637_WriteByte(mData);
	I2C_stop();
}


/*
*@note  写入地址和数据
*/

void TM1637_WriteData(unsigned char addr,unsigned char mData)
{
	I2C_Start();
	TM1637_WriteByte(addr);
	TM1637_WriteByte(mData);
	I2C_stop();
}




/*
控制显示,配置好数据结构体之后,直接调用该函数就可以显示
*/
void Time_Display(void)
{
Hour.shi = 4;
Hour.ge =  5;
Min.shi =  6;
Min.ge =   7;

    
    TM1637_WriteCommand(0x44);
    TM1637_WriteData(0xc0,Data[Hour.shi]);
    TM1637_WriteData(0xc1,DataDp[Hour.ge]);

    TM1637_WriteData(0xc2, Data[Min.shi]);
    TM1637_WriteData(0xc3, Data[Min.ge]);
    TM1637_WriteCommand(0x8a);
 }
#ifndef   _TM1637_H
#define   _TM1637_H

#include "gpio.h"

//PB10(SCL),PB11(SDA)
//#define SCL_Pin GPIO_PIN_10
//#define SCL_GPIO_Port GPIOB
//#define SDA_Pin GPIO_PIN_11
//#define SDA_GPIO_Port GPIOB
//DIO和CLK相关引脚的宏定义,用户只需要修改相关宏即可
#define    TM_DIO_PORT    	    GPIOB		                 		
#define    TM_DIO_PIN			GPIO_PIN_11			        

#define    TM_CLK_PORT    	    GPIOB			              		
#define    TM_CLK_PIN		    GPIO_PIN_10			

//时钟线和数据线高低电平的宏定义,不需修改
#define      CLK_1         HAL_GPIO_WritePin(TM_CLK_PORT,TM_CLK_PIN,GPIO_PIN_SET)
#define      CLK_0         HAL_GPIO_WritePin(TM_CLK_PORT,TM_CLK_PIN,GPIO_PIN_RESET)
#define      DIO_1         HAL_GPIO_WritePin(TM_DIO_PORT,TM_DIO_PIN,GPIO_PIN_SET)
#define      DIO_0         HAL_GPIO_WritePin(TM_DIO_PORT,TM_DIO_PIN,GPIO_PIN_RESET)

//相关函数声明  
void GPIO_Config(void);
void I2C_Start(void);
void I2C_stop(void);
void TM1637_WriteBit(unsigned char mBit);
void TM1637_WriteByte(unsigned char Byte);
void TM1637_WriteCommand(unsigned char mData);
void TM1637_WriteData(unsigned char addr,unsigned char mData);
void Time_Display(void);

#endif   /* _TM1673_H*/
/*********************************************END OF FILE**********************/

 

阅读规格书

果然OFF 亮度 都可以了

 

void Time_Display_OFF(void)
{
    TM1637_WriteCommand(0x80);
}
/*
0x80==off

0x88
0x89
0x8a
0x8b
ox8c
0x8d
0x8e
0x8f
*/
void Time_Display_LEV(unsigned char lev)
{
    TM1637_WriteCommand(lev);
}
    
    




#include "TM1637.h"
#include "tuyamodeuart.h"
extern void Time_Display_LEV(unsigned char lev);
uint8_t lev[]={
0x80,

0x88,
0x89,
0x8a,
0x8b,
0x8c,
0x8d,
0x8e,
0x8f,
};
int i=0;
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  TSET_TIMER();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  tuyamode_init();
  SHOWME
  Time_Display();
  while (1)
  {
    /* USER CODE END WHILE */
    //TEST_LOOP_IO();
    //TEST_UARTTXRX();
HAL_Delay(500);
Time_Display_LEV(lev[i]);
if(++i==sizeof(lev))i=0;

3.3+gnd

B11 B10

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
四位数码管TM1637可以通过以下步骤进行驱动: 1. 初始化TM1637:调用TM1637_Init()函数进行初始化。 2. 发送开始条件:调用TM1637_START()函数发送开始条件。 3. 发送数据:使用TM1637_WRITE_DISPLAY_BYTE_FIX_ADDRESS()函数发送要显示的数据。该函数需要传入两个参数,第一个参数是要显示的地址,第二个参数是要显示的数据。 4. 发送结束条件:调用TM1637_STOP()函数发送结束条件。 具体的驱动代码可以参考引用\[2\]中的TM1637.H文件中的函数定义。 需要注意的是,TM1637的引脚定义可以根据具体的硬件连接进行修改。在引用\[2\]中的代码中,CLK引脚对应GPIOB的Pin_0,DIO引脚对应GPIOB的Pin_1。你可以根据实际情况修改这些引脚定义。 此外,如果你需要购买TM1637模块,可以参考引用\[3\]中提供的淘宝链接。 #### 引用[.reference_title] - *1* [Arduino UNO驱动TM1637四位时钟数码管显示时间](https://blog.csdn.net/qq_42250136/article/details/128117137)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32 经过TM1637驱动四位数码管](https://blog.csdn.net/stonekang/article/details/128531231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [四位数码管IIC-TM1637](https://blog.csdn.net/weixin_42381351/article/details/115670675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值