51单片机之间的串联

img


51单片机的串联,代码有的不知道什么意思,有没有xd 能不能给注释一下

从名字上看,delay的含义是通过死循环加上延迟,writedat的作用是往p2口写入数据,并且加上延迟,writecom是往p2口写入com获取的值,initlcd的作用是初始化lcd屏,初始的方式是将0x380c0601写入p2口
具体还要看你的硬件原理图和lcd是怎么个调用的约定

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7716459
  • 这篇博客你也可以参考下:【51单片机】数码管的静态显示
  • 除此之外, 这篇博客: 基于51单片机的多点温湿度采集和无线传输系统中的 主程序流程设计 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    C52 单片机是核心,它可以让温湿度传感器进行温湿度的采集,然后将采集到的数据经过单片机的简单处理,最后控制液晶显示模块显示数据。接下来它还会控制无线通信模块发送它所处理后的数据。而监测终端的单片机又会控制无线通信模块接收监测点发过来的数据,然后进行打包处理后又通过串口通信发送给 PC 端上位机。最后 PC 端上位机进行数据的显示、处理和存储。

  • 以下回答来自chatgpt:

    串联多个51单片机可以使用串口通信协议,在单片机之间传输数据。具体步骤如下:

    1. 配置单片机的串口通信模块,设置波特率、数据位、停止位、校验位等参数,可以参考单片机的数据手册和相关的例程。

    2. 编写发送数据的函数和接收数据的函数,其中发送数据的函数通过串口发送数据,接收数据的函数通过串口接收数据。

    3. 配置单片机的引脚,将发送和接收数据的引脚连接到其他单片机的接收和发送引脚上。

    4. 在多个单片机间建立通信协议,例如使用起始标志,数据长度,数据内容和校验和等信息来构建数据帧,各个单片机接收到数据帧后根据协议进行解析处理。

    下面是一个简单的C语言示例代码,其中使用了STC12C5A60S2芯片的UART1模块,将芯片配置为波特率为9600、数据位为8、停止位为1、无校验,发送和接收引脚分别连接到P3.0(TXD1)和P3.1(RXD1)引脚上。

    #include "reg52.h"
    #include "intrins.h"
    
    sfr AUXR = 0x8E;     //辅助寄存器
    sfr P_SW1 = 0xA2;     //外设功能切换寄存器1
    sfr SCON = 0x98;      //串口控制寄存器
    sfr SBUF = 0x99;      //串口数据缓存寄存器
    
    #define FOSC 22118400L     //系统晶振频率
    #define BAUD 9600         //串口波特率
    #define TH1_VALUE 256 - FOSC/BAUD/12       //定时器1计数初值,同时也是波特率发生器重装值
    
    void InitUART()
    {
        EA = 0;                   //关闭总中断
        SCON = 0x50;              //设置收发模式位8位长度
        AUXR = AUXR | 0x40;       //定时器1时钟选择
        TMOD = TMOD & 0x0F | 0x20;    //定时器1工作方式2,8位自动重装
        TH1 = TH1_VALUE;          //装初值
        TL1 = TH1_VALUE;          //定时器1初值和重装载值相同
        TR1 = 1;                      //开定时器1
        ES = 1;                   //开串口中断
        EA = 1;                   //开总中断
    }
    
    void SendData(unsigned char dat)
    {
        SBUF = dat;                   //将数据放入发送缓存
        while (!TI);                      //等待发送完成
        TI = 0;                       //清除发送完成标志    
    }
    
    void main()
    {
        InitUART();                   //初始化UART
        while (1)
        {
            SendData('A');            //发送数据'A'
            _nop_();                  //延时
        }
    }
    
    void UART_ISR() interrupt 4 using 1
    {
        unsigned char ch;
        if (RI)                       //接收中断
        {
            ch = SBUF;                //读取接收缓存
            RI = 0;                   //清除接收标志
        }
        if (TI)                       //发送中断
        {
            TI = 0;                   //清除发送标志
        }
    }
    

    其中,UART_ISR是串口中断处理函数,在数据接收或发送完成时被调用。这里只是一个示例代码,需要根据实际情况进行修改和优化。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^