基于51单片机的串口控制系统仿真设计 实现功能: 1、 将温湿度传感器(DHT11)采集到的数据实时显示在lcd上,并通过虚拟串口显示 2、可通过虚拟串口远程控制继电器和LED的开关 PS:通过串口助手发送命令12345,分别控制5个设备的开和关。 发送“1”控制继电器1打开,再次发送“1”,控制继电器1关闭 包含仿真+源码+串口工具 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言

这个基于51单片机的串口控制系统有点意思,咱们直接上干货。系统核心是STC89C52芯片,配合DHT11搞环境监测,还能通过串口远程控制设备。Proteus仿真里看着LCD1602实时刷新温湿度数据,虚拟终端里字符命令发得飞起,继电器咔嗒咔嗒响得贼带劲。

先看硬件连线:DHT11接P2.0,LCD1602数据口挂P0,控制线RS、RW、EN分别接P2.5-P2.7。继电器控制比较讲究,P1口的低五位分别控制五个设备,每个口都加了9012三极管做电流放大。虚拟串口直接用MAX232搭了个电平转换电路,毕竟仿真环境下得和电脑通信。

DHT11的数据读取是个技术活,这货的时序要求严得很。代码里得精确控制40us级的延时,起手先给个18ms的低电平启动信号:

void DHT11_start() {
    DATA = 0;
    delay_18ms();
    DATA = 1;
    delay_us(30);
    while(DATA);  // 等待DHT11拉低
    while(!DATA); // 等待高电平
}

这段骚操作完成主机拉低总线再释放,DHT11收到信号后会回个响应脉冲。注意这里用while循环等待而不是定时器,实测在仿真实时性足够用。数据读取时每个bit都以50us低电平开头,高电平持续时间决定0或1。

LCD显示部分用了4位数据模式节省IO口,刷新频率设成每秒两次。有意思的是在显示函数里偷偷加了串口发送:

void update_display() {
    lcd_write_string("Temp:"); 
    lcd_write_byte(temp_value);
    // 顺手把数据扔给串口
    printf("T:%d H:%d\r\n", temp_value, humi_value);
}

这手操作实现了本地显示和串口输出的双同步。注意printf重定向到串口需要改写putchar函数,具体操作是往SBUF寄存器怼数据。

基于51单片机的串口控制系统仿真设计 实现功能: 1、 将温湿度传感器(DHT11)采集到的数据实时显示在lcd上,并通过虚拟串口显示 2、可通过虚拟串口远程控制继电器和LED的开关 PS:通过串口助手发送命令12345,分别控制5个设备的开和关。 发送“1”控制继电器1打开,再次发送“1”,控制继电器1关闭 包含仿真+源码+串口工具 仿真软件:Proteus8.9 编程软件:Keil5 编程语言:C语言

串口控制才是重头戏。中断服务程序里搞了个环形缓冲区,收到命令直接存数组:

bit flag = 0;
unsigned char cmd_buf[10];

void UART_ISR() interrupt 4 {
    if(RI) {
        RI = 0;
        cmd_buf[flag++] = SBUF;
        if(flag > 9) flag = 0; // 环形缓冲防溢出
    }
}

命令解析部分玩的是状态机套路。收到ASCII字符'1'-'5'后,直接操作P1口对应引脚:

void execute_cmd(unsigned char cmd) {
    if(cmd >= '1' && cmd <= '5') {
        unsigned char pin = cmd - '1';
        P1 ^= (1 << pin);  // 异或操作实现状态翻转
    }
}

这个异或操作骚得很,每次收到相同命令就能实现开关切换。比如第一次收到'1'时P1.0从1变0(假设初始高电平),继电器吸合;再发'1'又变回1,继电器断开。Proteus里继电器的咔嗒声配合LED明灭,操控反馈直接拉满。

调试时踩过几个坑:DHT11的响应时间必须给够,不然数据会乱码;串口波特率9600时定时器1必须用8位自动重装模式;继电器控制端记得加续流二极管,仿真里虽然不明显,但实物必炸。

源码里有个dev_state数组记录设备状态,每次操作后还会通过串口回传状态信息。比如发送"2"后收到"Device2:ON"这样的反馈,配合串口助手的自动发送功能,能玩出远程控制流水灯的效果。

最后说下Proteus仿真的骚操作:在虚拟终端属性里勾选"回显输入",调试时能看到自己发的命令。DHT11元件要右键设置温湿度参数,仿真时直接拖动滑块就能模拟环境变化,比实物调试方便得多。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐