STM32 TM1628程序

以下是.C

#include "tm1628.h"


/*************************************
函数名称:Tm1628_Write_Bit
函数说明:写单个字节
函数参数:命令参数
函数返回:NULL
*************************************/
void Tm1628_Write_Bit(uint8_t data)
{
uint8_t i;
Tm1628_CKL_H;
Tm1628_DIO_H;
for(i = 0; i < 8; i++)
{

Tm1628_CKL_L;
delay_us(100);
if((data & 0x01) == 1)
Tm1628_DIO_H;
else
Tm1628_DIO_L;
data = data >> 1;
Tm1628_CKL_H;
delay_us(100);
}
}


/*************************************
函数名称:Tm1628_Write_Command
函数说明:写命令
函数参数:命令参数
函数返回:NULL
*************************************/
void Tm1628_Write_Command(u8 unm)
{
Tm1628_STB_L;
delay_ms(1);
Tm1628_Write_Bit(unm);
Tm1628_STB_H;
delay_ms(1);
}




/*************************************
函数名称:Tm1628init
函数说明:TM1628初始化
函数参数:NULL
函数返回:NULL
*************************************/
void Tm1628init(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;    //LB6-->PB8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //IO口速度为10MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);     //初始化GPIOB6 - 8
Tm1628_Write_Command(0x03);   //7位10段
Tm1628_ClearDisplay(); //清屏
Tm1628_GrayScale(2); //亮度2
Tm1628_Fixed(0xc2,0xff);
}






/*************************************
函数名称:Tm1628_Fixed
函数说明:固定写显示
函数参数:(1)data 地址
(2)add 数据
函数返回:NULL
*************************************/
void Tm1628_Fixed(uint8_t data, uint8_t add)
{
Tm1628_Write_Command(0x44);
Tm1628_STB_L;
delay_ms(1);
Tm1628_Write_Bit(data);
Tm1628_Write_Bit(add);
Tm1628_STB_H;
delay_ms(1);
}




/*************************************
函数名称:Tm1628_Continuous
函数说明:连续写显示
函数参数:(1)data 地址  从C0开始
(2)num 数据
(3)add  数量 最大14
函数返回:NULL
*************************************/


void Tm1628_Continuous(uint8_t data, uint8_t num, uint8_t *add)
{
uint8_t i;
Tm1628_Write_Command(0x40);
Tm1628_STB_L;
delay_ms(1);
Tm1628_Write_Bit(data);
for(i = 0; i < num; i++)
{
Tm1628_Write_Bit(add[i]);
}
Tm1628_STB_H;
delay_ms(1);
}
/*************************************
函数名称:Tm1628_ClearDisplay
函数说明:清屏
函数参数:NULL
函数返回:NULL
*************************************/


void Tm1628_ClearDisplay(void)
{
uint8_t i;
Tm1628_Write_Command(0x40);
Tm1628_STB_L;
delay_ms(1);
Tm1628_Write_Bit(0xC0);
for(i = 0; i < 14; i++)
{
Tm1628_Write_Bit(0x00);
}
Tm1628_STB_H;
delay_ms(1);
}








/*************************************
函数名称:Tm1628_GrayScale
函数说明:用于亮度调节 0 - 9
函数参数:亮度 0 - 9
函数返回:NULL
*************************************/
void Tm1628_GrayScale(uint8_t data)
{
switch(data)
{
case(0): Tm1628_Write_Command(GrayScale_ON);   break;
case(1): Tm1628_Write_Command(GrayScale1); break;
case(2): Tm1628_Write_Command(GrayScale2); break;
case(3): Tm1628_Write_Command(GrayScale3); break;
case(4): Tm1628_Write_Command(GrayScale4); break;
case(5): Tm1628_Write_Command(GrayScale5); break;
case(6): Tm1628_Write_Command(GrayScale6); break;
case(7): Tm1628_Write_Command(GrayScale7); break;
case(8): Tm1628_Write_Command(GrayScale8); break;
}

}

以下是.h


#ifndef __TM1628_H
#define __TM1628_H


#include "sys.h"
#include "delay.h"


#define Tm1628_CKL_H GPIO_WriteBit(GPIOB,GPIO_Pin_6,Bit_SET)
#define Tm1628_CKL_L GPIO_WriteBit(GPIOB,GPIO_Pin_6,Bit_RESET)


#define Tm1628_DIO_H GPIO_WriteBit(GPIOB,GPIO_Pin_7,Bit_SET)
#define Tm1628_DIO_L GPIO_WriteBit(GPIOB,GPIO_Pin_7,Bit_RESET)


#define Tm1628_STB_H GPIO_WriteBit(GPIOB,GPIO_Pin_8,Bit_SET)
#define Tm1628_STB_L GPIO_WriteBit(GPIOB,GPIO_Pin_8,Bit_RESET)




#define GrayScale_OFF 0x80 //关显示
#define GrayScale_ON 0x81 //开显示




#define GrayScale1   0x88 //灰度等级1
#define GrayScale2   0x89 //灰度等级2
#define GrayScale3   0x8A //灰度等级3
#define GrayScale4   0x8B //灰度等级4
#define GrayScale5   0x8C //灰度等级5
#define GrayScale6   0x8D //灰度等级6
#define GrayScale7   0x8E //灰度等级7
#define GrayScale8   0x8F //灰度等级8


void Tm1628init(void);   //TM1628初始化
void Tm1628_Fixed(uint8_t data, uint8_t add); //固定写显示 data 地址 add 数据
void Tm1628_Continuous(uint8_t data, uint8_t num, uint8_t *add); //连续写显示
void Tm1628_ClearDisplay(void); //清屏
void Tm1628_GrayScale(uint8_t data); //亮度调节

#endif


楼主是新萌 之前想直接找一篇 代码拔下来 后来发现没有 就自己写了写 函数实测能用


以下是STM32驱动TM1650的程序源码,仅供参考: ``` #include "stm32f10x.h" #include "stdio.h" #define SDA_OUT() GPIOB->CRL &= 0XFF0FFFFF; GPIOB->CRL |= 0X00300000 #define SDA_IN() GPIOB->CRL &= 0XFF0FFFFF; GPIOB->CRL |= 0X00800000 #define TM1650_SCL_H() GPIOB->BSRR = GPIO_Pin_12 #define TM1650_SCL_L() GPIOB->BRR = GPIO_Pin_12 #define TM1650_SDA_H() GPIOB->BSRR = GPIO_Pin_13 #define TM1650_SDA_L() GPIOB->BRR = GPIO_Pin_13 u8 TM1650_Table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; void TM1650_Start(void) { SDA_OUT(); TM1650_SDA_H(); TM1650_SCL_H(); delay_us(2); TM1650_SDA_L(); delay_us(2); TM1650_SCL_L(); delay_us(2); } void TM1650_Stop(void) { SDA_OUT(); TM1650_SCL_L(); TM1650_SDA_L(); delay_us(2); TM1650_SCL_H(); TM1650_SDA_H(); delay_us(2); } void TM1650_WriteByte(u8 dat) { u8 i; SDA_OUT(); for(i=0; i<8; i++) { if((dat<<i)&0x80) TM1650_SDA_H(); else TM1650_SDA_L(); delay_us(2); TM1650_SCL_H(); delay_us(2); TM1650_SCL_L(); delay_us(2); } } void TM1650_Display(u8 *buf) { u8 i; TM1650_Start(); TM1650_WriteByte(0x44); TM1650_Stop(); TM1650_Start(); TM1650_WriteByte(0x40); for(i=0; i<4; i++) { TM1650_WriteByte(TM1650_Table[buf[i]]); } TM1650_Stop(); TM1650_Start(); TM1650_WriteByte(0x8f); TM1650_Stop(); } int main(void) { u8 buf[4] = {0, 1, 2, 3}; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); while(1) { buf[0]++; if(buf[0] > 9) { buf[0] = 0; buf[1]++; } if(buf[1] > 9) { buf[1] = 0; buf[2]++; } if(buf[2] > 9) { buf[2] = 0; buf[3]++; } if(buf[3] > 9) { buf[3] = 0; } TM1650_Display(buf); delay_ms(500); } } ``` 注:上述代码仅供参考,具体实现方式可能因不同的STM32型号和开发板而有所不同。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值