27,521
社区成员
发帖
与我相关
我的任务
分享// 串口屏指令帧头
#define FRAME_HEADER 0x5AA5
// 串口屏指令类型
#define WRITE_VARIABLE_CMD 0x82
// 变量地址
#define TEMPERATURE_ADDR 0x1000
#define HUMIDITY_ADDR 0x1016
// 数据长度
#define DATA_LENGTH 6
// 串口句柄
// 发送数据到串口屏
void SendToSerialScreen(uint16_t address, uint16_t value) {
uint8_t data[8];
data[0] = FRAME_HEADER >> 8; // 帧头高字节
data[1] = FRAME_HEADER & 0xFF; // 帧头低字节
data[2] = DATA_LENGTH; // 数据长度
data[3] = WRITE_VARIABLE_CMD; // 写变量存储器指令
data[4] = address >> 8; // 变量地址高字节
data[5] = address & 0xFF; // 变量地址低字节
data[6] = value >> 8; // 数据高字节
data[7] = value & 0xFF; // 数据低字节
HAL_UART_Transmit(&g_uart1_handle, data, sizeof(data)/sizeof(data[0]), HAL_MAX_DELAY);
}
int main(void)
{
uint16_t temp;
uint16_t humidity;
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
delay_init(72); /* 延时初始化 */
usart_init(115200); /* 串口初始化为115200 */
led_init(); /* 初始化LED */
dht11_init(); /* DHT11初始化 */
while (1)
{
// 读取DHT11传感器数据
// dht11_read_data(&temp, &humidity);
temp = 0x1111 ;
humidity = 0x1112 ;
// humidity2 = 0x1113 ;
SendToSerialScreen(TEMPERATURE_ADDR, (uint16_t)temp); // 假设temp不需要小数部分
SendToSerialScreen(HUMIDITY_ADDR, (uint16_t)humidity); // 同样,假设humidity也不需要小数部分
// 延时一段时间
HAL_Delay(1000);
}
}
这样的代码串口屏只有对应的0x1000显示数据,0x1016没有反应,如果使用dht11_read_date()这个函数也是只要0x1000这个位置有数据