迪文屏与STM32单片机之间的通信,将dht11的数据通过stm32f103传给迪文屏

m0_53866070 2024-08-01 15:39:31

// 串口屏指令帧头
#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这个位置有数据

...全文
668 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

27,521

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧