合宙AIR001的tm1650数码管用类iic的方式控制

本文章默认已经添加好了需要的hal库文件,不知道怎么添加的可以去合宙的官网学习,有特别详细的教程,本人实习期间上手两天就独立完成了一个企业小项目,下面分享一下合宙air001这款芯片的tm1650数码管用类iic的方式控制(基于hal库)下面代码部分是3个类iic控制的3路数码管显示。

837b440ef71d4b17ae000c288323e60f.png

c25b4235b0124da89a8e54166e114a25.png

b05e1be5326e4e9ea47e15497bbe6780.png

7dff2903db674773838c720c95cc7871.png

248671c97bb84590945088ba657ff81b.png

455d6e8d8215408ba91a9d9fcf292680.png

088c4985b8994d9a880c557a78a0082b.png

下面是代码部分

TM1650.c文件

#include "air001xx_hal.h"
#include "TM1650.h"
#include "air001xx_hal_def.h"

uint8_t data_num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint8_t data_alphabet[6]={0x77,0x7c,0x39,0x5e,0x79,0x71}; //??a-f???
 
uint8_t display_address[4]={0x6e,0x6c,0x6a,0x68}; //???????
uint8_t display_brightness[8]={0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x01}; //????,?????0-7?????
 
 
void TM1650_Init(void)
{	
	
	GPIO_InitTypeDef GPIO_key = {.Pin = GPIO_PIN_1|GPIO_PIN_0,.Mode = GPIO_MODE_OUTPUT_PP,.Speed=GPIO_SPEED_FREQ_HIGH};
	__HAL_RCC_GPIOF_CLK_ENABLE();
	HAL_GPIO_Init(GPIOF, &GPIO_key);
	
}
void TM1650_Init_2(void)
{	
	
	GPIO_InitTypeDef GPIO_key = {.Pin = GPIO_PIN_2|GPIO_PIN_3,.Mode = GPIO_MODE_OUTPUT_PP,.Speed=GPIO_SPEED_FREQ_HIGH};
	__HAL_RCC_GPIOA_CLK_ENABLE();
	HAL_GPIO_Init(GPIOA, &GPIO_key);
	
}
void TM1650_Init_3(void)
{	
	
	GPIO_InitTypeDef GPIO_key = {.Pin = GPIO_PIN_7|GPIO_PIN_6,.Mode = GPIO_MODE_OUTPUT_PP,.Speed=GPIO_SPEED_FREQ_HIGH};
	__HAL_RCC_GPIOA_CLK_ENABLE();
	HAL_GPIO_Init(GPIOA, &GPIO_key);
	
}
 




void Iic_Mode(uint32_t Mode)
{
	GPIO_InitTypeDef GPIO_key = {.Pin = GPIO_PIN_0,.Mode = Mode,.Speed=GPIO_SPEED_FREQ_HIGH};
	__HAL_RCC_GPIOF_CLK_ENABLE();
	HAL_GPIO_Init(GPIOF, &GPIO_key);
 
}
 void Iic_Mode_2(uint32_t Mode)
{
	GPIO_InitTypeDef GPIO_key = {.Pin = GPIO_PIN_3,.Mode = Mode,.Speed=GPIO_SPEED_FREQ_HIGH};
	__HAL_RCC_GPIOA_CLK_ENABLE();
	HAL_GPIO_Init(GPIOA, &GPIO_key);
 
}
void Iic_Mode_3(uint32_t Mode)
{
	GPIO_InitTypeDef GPIO_key = {.Pin = GPIO_PIN_6,.Mode = Mode,.Speed=GPIO_SPEED_FREQ_HIGH};
	__HAL_RCC_GPIOA_CLK_ENABLE();
	HAL_GPIO_Init(GPIOA, &GPIO_key);
 
}
 





void TM1650_start(void)    //????
{    
  Iic_Mode(GPIO_MODE_OUTPUT_PP);
	TM1650_SCL_1;
	TM1650_SDA_1;
	HAL_Delay(1);
	TM1650_SDA_0;
	HAL_Delay(1);
  TM1650_SCL_0;
  HAL_Delay(1);
}
void TM1650_start_2(void)    //????
{    
  Iic_Mode_2(GPIO_MODE_OUTPUT_PP);
	TM1650_SCL2_1;
	TM1650_SDA2_1;
	HAL_Delay(1);
	TM1650_SDA2_0;
	HAL_Delay(1);
  TM1650_SCL2_0;
  HAL_Delay(1);
}
void TM1650_start_3(void)    //????
{    
  Iic_Mode_3(GPIO_MODE_OUTPUT_PP);
	TM1650_SCL3_1;
	TM1650_SDA3_1;
	HAL_Delay(1);
	TM1650_SDA3_0;
	HAL_Delay(1);
  TM1650_SCL3_0;
  HAL_Delay(1);
}
 





void TM1650_stop(void)    //????
{
    Iic_Mode(GPIO_MODE_OUTPUT_PP);
 
    TM1650_SCL_1;
    TM1650_SDA_0;
    HAL_Delay(1);
    TM1650_SDA_1;
    HAL_Delay(1);
    
}
void TM1650_stop_2(void)    //????
{
    Iic_Mode_2(GPIO_MODE_OUTPUT_PP);
 
    TM1650_SCL2_1;
    TM1650_SDA2_0;
    HAL_Delay(1);
    TM1650_SDA2_1;
    HAL_Delay(1);
    
}
void TM1650_stop_3(void)    //????
{
    Iic_Mode_3(GPIO_MODE_OUTPUT_PP);
 
    TM1650_SCL3_1;
    TM1650_SDA3_0;
    HAL_Delay(1);
    TM1650_SDA3_1;
    HAL_Delay(1);
    
}



 
void TM1650_send(uint8_t data)    //????
{
    Iic_Mode(GPIO_MODE_OUTPUT_PP);
    int i;
    TM1650_SCL_0;
    TM1650_SDA_0;
    HAL_Delay(1);
    for(i=7;i>=0;i--)
    {
        if(data&(1<<i))    //?????SDA?????????,???????
            TM1650_SDA_1;    
        else
            TM1650_SDA_0;
        HAL_Delay(1);
 
        TM1650_SCL_1;
        HAL_Delay(1);
        TM1650_SCL_0;
        HAL_Delay(1);
    }
}
void TM1650_send_2(uint8_t data)    //????
{
    Iic_Mode_2(GPIO_MODE_OUTPUT_PP);
    int i;
    TM1650_SCL2_0;
    TM1650_SDA2_0;
    HAL_Delay(1);
    for(i=7;i>=0;i--)
    {
        if(data&(1<<i))    //?????SDA?????????,???????
            TM1650_SDA2_1;    
        else
            TM1650_SDA2_0;
        HAL_Delay(1);
 
        TM1650_SCL2_1;
        HAL_Delay(1);
        TM1650_SCL2_0;
        HAL_Delay(1);
    }
}void TM1650_send_3(uint8_t data)    //????
{
    Iic_Mode_3(GPIO_MODE_OUTPUT_PP);
    int i;
    TM1650_SCL3_0;
    TM1650_SDA3_0;
    HAL_Delay(1);
    for(i=7;i>=0;i--)
    {
        if(data&(1<<i))    //?????SDA?????????,???????
            TM1650_SDA3_1;    
        else
            TM1650_SDA3_0;
        HAL_Delay(1);
 
        TM1650_SCL3_1;
        HAL_Delay(1);
        TM1650_SCL3_0;
        HAL_Delay(1);
    }
}






int TM1650_ack(void)
{
    Iic_Mode(GPIO_MODE_INPUT);
    int ack = 0;
    TM1650_SCL_0;
    HAL_Delay(1);
    TM1650_SCL_1;
    if(HAL_GPIO_ReadPin(GPIOF,GPIO_PIN_0))   //????(SDA)?????????
        ack = 1;        //???
 
    TM1650_SCL_0;
    HAL_Delay(1);
    
    return ack;
}
int TM1650_ack_2(void)
{
    Iic_Mode_2(GPIO_MODE_INPUT);
    int ack = 0;
    TM1650_SCL2_0;
    HAL_Delay(1);
    TM1650_SCL2_1;
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3))   //????(SDA)?????????
        ack = 1;        //???
 
    TM1650_SCL2_0;
    HAL_Delay(1);
    
    return ack;
}
int TM1650_ack_3(void)
{
    Iic_Mode_3(GPIO_MODE_INPUT);
    int ack = 0;
    TM1650_SCL3_0;
    HAL_Delay(1);
    TM1650_SCL3_1;
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6))   //????(SDA)?????????
        ack = 1;        //???
 
    TM1650_SCL3_0;
    HAL_Delay(1);
    
    return ack;
}





 
void Write_DATA(unsigned char add,unsigned char DATA)		//????????
{
	TM1650_start();//????
	TM1650_send(add);//????
	TM1650_ack(); //????
	TM1650_send(DATA);//????
	TM1650_ack(); //????
	TM1650_stop(); //????
}
void Write_DATA_2(unsigned char add,unsigned char DATA)		//????????
{
	TM1650_start_2();//????
	TM1650_send_2(add);//????
	TM1650_ack_2(); //????
	TM1650_send_2(DATA);//????
	TM1650_ack_2(); //????
	TM1650_stop_2(); //????
}
void Write_DATA_3(unsigned char add,unsigned char DATA)		//????????
{
	TM1650_start_3();//????
	TM1650_send_3(add);//????
	TM1650_ack_3(); //????
	TM1650_send_3(DATA);//????
	TM1650_ack_3(); //????
	TM1650_stop_3(); //????
}





 
void Display_Init(void) //????????
{
	HAL_Delay(10); //????400ms???????
	Write_DATA(TIM_COMMAND,display_brightness[7]); //??????
	Write_DATA(DIS_ADD_1,data_null);		//???
	Write_DATA(DIS_ADD_2,data_null);
	Write_DATA(DIS_ADD_3,data_null);
	Write_DATA(DIS_ADD_4,data_null);
}
void Display_Init_2(void) //????????
{
	HAL_Delay(10); //????400ms???????
	Write_DATA_2(TIM_COMMAND,display_brightness[7]); //??????
	Write_DATA_2(DIS_ADD_1,data_null);		//???
	Write_DATA_2(DIS_ADD_2,data_null);
	Write_DATA_2(DIS_ADD_3,data_null);
	Write_DATA_2(DIS_ADD_4,data_null);
}
void Display_Init_3(void) //????????
{
	HAL_Delay(10); //????400ms???????
	Write_DATA_3(TIM_COMMAND,display_brightness[7]); //??????
	Write_DATA_3(DIS_ADD_1,data_null);		//???
	Write_DATA_3(DIS_ADD_2,data_null);
	Write_DATA_3(DIS_ADD_3,data_null);
	Write_DATA_3(DIS_ADD_4,data_null);
}







 
void Show_Num(int num,uint8_t dp)
{
	uint8_t buff = 0;
	int i;
	if(num <= 9999) //???????
	{
		for(i = 0;i <4; i++)
		{
			buff = num % 10;
			if((dp&0x01) == 1)	//???1????????
			{
				Write_DATA(display_address[i],data_num[buff]|data_dp);
			}
			else
			{
				Write_DATA(display_address[i],data_num[buff]);
			}
			num /= 10;
			dp = dp >> 1;
		}
	}
}
void Show_Num_2(int num,uint8_t dp)
{
	uint8_t buff = 0;
	int i;
	if(num <= 9999) //???????
	{
		for(i = 0;i <4; i++)
		{
			buff = num % 10;
			if((dp&0x01) == 1)	//???1????????
			{
				Write_DATA_2(display_address[i],data_num[buff]|data_dp);
			}
			else
			{
				Write_DATA_2(display_address[i],data_num[buff]);
			}
			num /= 10;
			dp = dp >> 1;
		}
	}
}
void Show_Num_3(int num,uint8_t dp)
{
	uint8_t buff = 0;
	int i;
	if(num <= 9999) //???????
	{
		for(i = 0;i <4; i++)
		{
			buff = num % 10;
			if((dp&0x01) == 1)	//???1????????
			{
				Write_DATA_3(display_address[i],data_num[buff]|data_dp);
			}
			else
			{
				Write_DATA_3(display_address[i],data_num[buff]);
			}
			num /= 10;
			dp = dp >> 1;
		}
	}
}





void Display_Change_Brightness(uint8_t num) 	//????,????0-7,0??????,7??????
{
	if(num < 8)
	{
        //TIM_COMMAND(.h????)				0x48 //????
        //display_brightness                    ??
 
		Write_DATA(TIM_COMMAND,display_brightness[num]); //???????
	}
}
void Display_Change_Brightness_2(uint8_t num) 	//????,????0-7,0??????,7??????
{
	if(num < 8)
	{
        //TIM_COMMAND(.h????)				0x48 //????
        //display_brightness                    ??
 
		Write_DATA_2(TIM_COMMAND,display_brightness[num]); //???????
	}
}
void Display_Change_Brightness_3(uint8_t num) 	//????,????0-7,0??????,7??????
{
	if(num < 8)
	{
        //TIM_COMMAND(.h????)				0x48 //????
        //display_brightness                    ??
 
		Write_DATA_3(TIM_COMMAND,display_brightness[num]); //???????
	}
}


TM1650.h文件


#ifndef _TM1650_H
#define _TM1650_H

#include "air001xx_hal_def.h"

 
#define TM1650_SCL_1  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1,1)
#define TM1650_SCL_0  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1,0)
 
#define TM1650_SDA_1  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0,1)
#define TM1650_SDA_0  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0,0)


#define TM1650_SCL2_1  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2,1)
#define TM1650_SCL2_0  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2,0)
 
#define TM1650_SDA2_1  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3,1)
#define TM1650_SDA2_0  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3,0)


#define TM1650_SCL3_1  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7,1)
#define TM1650_SCL3_0  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7,0)
 
#define TM1650_SDA3_1  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6,1)
#define TM1650_SDA3_0  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6,0)
 
#define  data_dp 							0x80
#define  DIS_ADD_1							0x68 //?????????
#define  DIS_ADD_2							0x6a //?????????
#define  DIS_ADD_3							0x6c //?????????
#define  DIS_ADD_4							0x6e //?????????
 
#define  TIM_COMMAND						0x48 //????
#define  data_null					    	0x00  //???
 
void TM1650_Init(void);//TM1650????GPIO??? 
void TM1650_Init_2(void);
void TM1650_Init_3(void);


void Iic_Mode(uint32_t Mode);
void Iic_Mode_2(uint32_t Mode);
void Iic_Mode_3(uint32_t Mode);


void TM1650_start(void);
void TM1650_start_2(void);
void TM1650_start_3(void);


void TM1650_stop(void);
void TM1650_stop_2(void);
void TM1650_stop_3(void);


int TM1650_ack(void);
int TM1650_ack_2(void);
int TM1650_ack_3(void);


void TM1650_send(uint8_t data);
void TM1650_send_2(uint8_t data);
void TM1650_send_3(uint8_t data);


void Write_DATA(unsigned char add,unsigned char DATA);
void Write_DATA_2(unsigned char add,unsigned char DATA);
void Write_DATA_3(unsigned char add,unsigned char DATA);


void Display_Init(void);
void Display_Init_2(void);
void Display_Init_3(void);


void Show_Num(int num,uint8_t dp);
void Show_Num_2(int num,uint8_t dp);
void Show_Num_3(int num,uint8_t dp);


void Display_Change_Brightness(uint8_t num);
void Display_Change_Brightness_2(uint8_t num);
void Display_Change_Brightness_3(uint8_t num);


 
 
#endif

main函数中先要初始化

TM1650_Init();
TM1650_Init_2();
TM1650_Init_3();
		
Display_Init();
Display_Init_2();
Display_Init_3();

主函数中要显示时候调用下面函数即可

Show_Num();
Show_Num_2();
Show_Num_3();

如果需要修改iic的引脚可以去修改TM1650.h文件中的宏定义,以及两个初始化函数中的io口初始化部分的芯片引脚即可。

注意不要让它一直不停的运行,建议在刷新的时候再调用,否则会稍微的卡程序。

完成以上配置就可使用,新手小白,若有错误之处,大家可以批评指正。

         我最近建了一个嵌入式的QQ交流群,感兴趣的可以进群了解一下,我会在群里分享一些常用的代码封装,以及一些项目的源码。QQ群讨论也是完全开放,只要不打广告大家可以就嵌入式尽情的沟通和交流,大家对文章中的内容有疑问也可以在群中提出,有空会尽我所能给大家一些帮助。QQ群号:643408467

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值