基于hk32f030mf4p6写一个用串口给单片机发送16进制数据驱动TM1650点亮数码管的程序
时间: 2024-04-16 11:27:12 浏览: 62
当然可以!下面是一个基于hk32f030mf4p6单片机的串口驱动TM1650数码管的示例程序:
```c
#include "stm32f0xx.h"
void USART1_Init(void) {
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) {
while (!(USARTx->ISR & USART_ISR_TC))
;
USART_SendData(USARTx, Data);
}
void TM1650_SendData(uint8_t data) {
USART_SendData(USART1, data);
while (!(USART1->ISR & USART_ISR_TC))
;
}
void TM1650_Display(uint8_t addr, uint8_t data) {
TM1650_SendData(0x44); // 指定地址模式
TM1650_SendData(addr); // 设置地址
TM1650_SendData(data); // 发送数据
}
int main(void) {
USART1_Init();
while (1) {
// 显示数字0
TM1650_Display(0x00, 0x3F);
// 延时
for (int i = 0; i < 1000000; i++)
;
// 显示数字1
TM1650_Display(0x01, 0x06);
// 延时
for (int i = 0; i < 1000000; i++)
;
}
}
```
这个程序初始化了串口 USART1,并实现了发送数据的函数 USART_SendData。TM1650_SendData 函数用于向TM1650发送数据。TM1650_Display 函数用于设置TM1650的地址和数据,实现数码管的点亮效果。
你可以根据需要修改显示的数字和延时时间。希望对你有帮助!如果还有其他问题,请随时提问。
阅读全文