STM32 TM1621驱动
时间: 2023-11-05 21:54:34 浏览: 206
STM32 TM1621驱动是一种用于控制TM1621液晶模块的驱动程序。根据引用中提供的博客,可以了解到该驱动程序的源代码和详细设计说明。根据引用中提供的初始化代码,可以了解到TM1621驱动的初始化过程,包括打开背光、初始化HT1621串行接口、设置偏压、打开系统振荡器、关闭和打开LCD显示等步骤。通过这些步骤的执行,可以实现对TM1621液晶模块的控制和显示操作。
相关问题
stm32 tm1621驱动 复杂点的
TM1621是一种常见的驱动LED数码管和按键的控制器芯片,通常用于数字电子仪表、计时器、电子钟等应用场合。在STM32上驱动TM1621比较简单,但是如果需要实现一些复杂的功能,可能需要一些额外的工作。
下面是一个基本的STM32驱动TM1621的例子:
```c
#include "stm32f10x.h"
#define TM1621_CLK_Pin GPIO_Pin_0
#define TM1621_DIO_Pin GPIO_Pin_1
#define TM1621_CLK_Port GPIOA
#define TM1621_DIO_Port GPIOA
void delay_us(uint32_t us)
{
us *= 8;
while (us--)
{
__NOP();
}
}
void TM1621_Start(void)
{
GPIO_SetBits(TM1621_DIO_Port, TM1621_DIO_Pin);
GPIO_SetBits(TM1621_CLK_Port, TM1621_CLK_Pin);
delay_us(2);
GPIO_ResetBits(TM1621_DIO_Port, TM1621_DIO_Pin);
delay_us(2);
GPIO_ResetBits(TM1621_CLK_Port, TM1621_CLK_Pin);
}
void TM1621_Stop(void)
{
GPIO_ResetBits(TM1621_DIO_Port, TM1621_DIO_Pin);
GPIO_SetBits(TM1621_CLK_Port, TM1621_CLK_Pin);
delay_us(2);
GPIO_SetBits(TM1621_DIO_Port, TM1621_DIO_Pin);
delay_us(2);
}
void TM1621_WriteByte(uint8_t data)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
if (data & 0x01)
{
GPIO_SetBits(TM1621_DIO_Port, TM1621_DIO_Pin);
}
else
{
GPIO_ResetBits(TM1621_DIO_Port, TM1621_DIO_Pin);
}
delay_us(2);
GPIO_SetBits(TM1621_CLK_Port, TM1621_CLK_Pin);
delay_us(2);
GPIO_ResetBits(TM1621_CLK_Port, TM1621_CLK_Pin);
data >>= 1;
}
}
void TM1621_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = TM1621_CLK_Pin | TM1621_DIO_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(TM1621_CLK_Port, &GPIO_InitStructure);
TM1621_Start();
TM1621_WriteByte(0x40);
TM1621_Stop();
}
void TM1621_Display(uint8_t *data)
{
uint8_t i;
TM1621_Start();
TM1621_WriteByte(0x44);
TM1621_Stop();
TM1621_Start();
TM1621_WriteByte(0xC0);
for (i = 0; i < 4; i++)
{
TM1621_WriteByte(data[i]);
}
TM1621_Stop();
TM1621_Start();
TM1621_WriteByte(0x8F);
TM1621_Stop();
}
int main(void)
{
uint8_t data[4] = {0x7F, 0x7F, 0x7F, 0x7F};
TM1621_Init();
while (1)
{
TM1621_Display(data);
}
}
```
上面的例子中,我们使用了STM32的GPIO来驱动TM1621的CLK和DIO引脚。在初始化函数中,我们使用了STM32的GPIO初始化函数来配置这两个引脚为输出模式,并且使用了STM32的延时函数来实现TM1621通信协议要求的时序。在显示函数中,我们按照TM1621通信协议的要求,向TM1621发送了0x44、0xC0和0x8F三个命令,最终显示了一个全亮的数码管。
如果需要实现更复杂的功能,比如多个TM1621的串联、实现按键输入等等,我们需要根据TM1621的通信协议进行相应的修改和扩展。
stm32 tm1638 驱动代码
以下是一个简单的stm32和tm1638之间的驱动代码:
#include "stm32f10x.h"
#define TM1638_PORT GPIOB
#define TM1638_CLK GPIO_Pin_12
#define TM1638_DIO GPIO_Pin_13
void TM1638_Init(void);
void TM1638_SendByte(uint8_t byte);
void TM1638_SetData(uint8_t data, uint8_t index);
void TM1638_Clear(void);
int main(void)
{
TM1638_Init();
TM1638_Clear();
TM1638_SetData(0x01, 0);
TM1638_SetData(0x02, 1);
TM1638_SetData(0x03, 2);
TM1638_SetData(0x04, 3);
TM1638_SetData(0x05, 4);
TM1638_SetData(0x06, 5);
while(1)
{
// do something
}
return 0;
}
void TM1638_Init(void)
{
GPIO_InitTypeDef gpio;
// enable clock for GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// configure GPIO pins
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
gpio.GPIO_Pin = TM1638_CLK | TM1638_DIO;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(TM1638_PORT, &gpio);
TM1638_SendByte(0x8f); // display on
TM1638_SendByte(0x44); // set brightness
}
void TM1638_SendByte(uint8_t byte)
{
uint8_t i;
GPIO_ResetBits(TM1638_PORT, TM1638_CLK);
for(i=0; i<8; i++)
{
if(byte & 0x01)
GPIO_SetBits(TM1638_PORT, TM1638_DIO);
else
GPIO_ResetBits(TM1638_PORT, TM1638_DIO);
byte >>= 1;
GPIO_SetBits(TM1638_PORT, TM1638_CLK);
GPIO_ResetBits(TM1638_PORT, TM1638_CLK);
}
}
void TM1638_SetData(uint8_t data, uint8_t index)
{
TM1638_SendByte(0x44); // set write mode
TM1638_SendByte(index << 1);
TM1638_SendByte(data);
TM1638_SendByte(0x8f); // display on
}
void TM1638_Clear(void)
{
uint8_t i;
TM1638_SendByte(0x44); // set write mode
TM1638_SendByte(0x00);
for(i=0; i<16; i++)
TM1638_SendByte(0x00);
TM1638_SendByte(0x8f); // display on
}
阅读全文