基于单片机的双机串口通信与数字串存储系统设计

基于单片机的双机串口通信与数字串存储系统设计

点击链接下载protues仿真设计:https://download.csdn.net/download/m0_51061483/92081494


1 系统总体设计概述

1.1 设计背景与研究意义

在嵌入式系统与单片机应用领域中,串口通信是一种最基础、最常用的数据通信方式之一。通过串口通信,不同单片机系统之间可以实现数据交换、功能协作和信息共享。同时,数据的可靠存储与管理也是嵌入式系统中不可或缺的重要功能,尤其是在需要掉电保存、长期记录或历史数据查询的应用场景中,非易失性存储器件发挥着关键作用。

本设计以"双机通信"为核心思想,通过两套单片机系统(A端与B端)之间的串口通信,实现数字串数据的输入、传输、校验、显示以及存储功能。系统综合运用了矩阵键盘、LCD显示模块、串口通信模块以及AT24C02 EEPROM存储芯片,构建了一个功能完整、逻辑清晰、具有一定工程实用价值的嵌入式系统实例。

通过该系统的设计与实现,不仅能够加深对单片机串口通信原理的理解,还能系统掌握数据校验、I²C存储器访问以及多模块协同工作的设计方法,对单片机课程设计、毕业设计及工程实践均具有较高的参考价值。

1.2 系统总体功能说明

本系统由A端与B端两部分组成,二者通过串口进行通信,整体功能如下:

  1. A端负责数字串的输入、显示和发送。用户通过拨号键盘输入长度为2~16位的数字串,输入过程实时显示在LCD屏幕上,支持删除与发送控制。
  2. A端通过串口将完整数字串发送至B端,*键用于取消当前输入字符,#键用于确认并发送数据。
  3. B端实时监听串口接收数据,对接收到的数字串进行校验。若校验正确,则显示在LCD屏幕上;若校验失败,则丢弃数据并清空显示。
  4. B端通过按键1可将当前接收到且校验正确的数字串存入AT24C02存储器,并在LCD上显示存储结果。
  5. B端通过按键2可依次查看已存储的数字串内容;通过按键3可清除所有已存储数据,实现数据管理功能。
  6. 数据校验规则为:数字串最后一位等于前面所有数字之和的个位数。

2 系统功能设计分析

2.1 数字串输入与编辑功能(A端)

A端系统通过拨号键盘实现数字串的输入功能。用户每按下一个数字键,对应的数字字符即被加入到当前输入缓冲区,并实时显示在LCD屏幕上。系统对输入长度进行限制,确保输入的数字串长度在2~16位之间。

在输入过程中,用户可通过"*"键实现删除操作,用于取消最近一次输入的字符,从而提高输入的灵活性和容错性。当输入完成后,按下"#"键,系统即认为当前数字串输入结束,并进入发送准备状态。

2.2 串口通信功能

串口通信是A端与B端之间数据交互的核心手段。A端在"#"键触发后,将当前数字串通过串口逐字节发送至B端。通信过程中,采用固定的波特率、数据位、停止位和校验方式,确保双方通信参数一致,从而保证数据的正确传输。

B端通过串口接收中断或轮询方式实时监测串口数据,一旦检测到接收事件,即启动数据接收流程,并将数据暂存至接收缓冲区中。

2.3 数据校验功能(B端)

为了保证数据的可靠性,B端在接收完整数字串后,会对数据进行校验处理。校验规则为:数字串最后一位应等于前面所有位数字之和的个位数。

系统通过遍历接收到的数字字符,将前n-1位数字转换为数值并累加,然后取其个位数,与最后一位进行比较。若校验成功,系统认为数据有效;否则视为无效数据并丢弃处理。

2.4 数据显示与存储功能

当校验成功后,B端会将数字串显示在LCD屏幕上,供用户查看。此时,用户可通过按键1将该数字串写入AT24C02 EEPROM中,实现掉电不丢失的数据存储。

系统支持多条数字串的顺序存储,并通过内部地址管理机制实现存储空间的合理分配。按键2用于读取并显示已存储的数字串,按键3用于清空全部存储数据,方便系统维护与数据重置。


3 系统电路设计

3.1 单片机最小系统模块

A端与B端均采用单片机最小系统结构作为核心控制模块。最小系统包括电源电路、晶振电路和复位电路,确保单片机在稳定可靠的硬件环境下运行。

单片机I/O资源被合理分配,用于连接键盘、LCD、串口通信接口以及存储器等外设模块。通过统一的硬件架构,使A端与B端在结构上保持一致性,便于系统调试和维护。

3.2 拨号键盘接口电路(A端)

拨号键盘通常采用矩阵键盘结构,通过行列扫描方式实现按键检测。单片机通过输出扫描信号并读取输入状态,判断是否有按键按下以及具体按键编号。

在电路设计中,键盘接口引脚通过上拉电阻与单片机相连,保证按键未按下时输入状态稳定,减少误触发。

3.3 LCD显示模块电路

LCD显示模块用于显示输入的数字串、接收的数据以及存储信息。LCD通过并行或串行方式与单片机连接,常见为1602字符型液晶显示模块。

在电路中,LCD的数据线与控制线分别连接至单片机对应端口,配合对比度调节电路,保证显示内容清晰稳定。

3.4 串口通信接口电路

串口通信接口主要由TXD和RXD信号线组成,用于A端与B端之间的数据传输。在电路设计中,两端的TXD与RXD交叉连接,确保数据正确发送和接收。

如通信距离较远或环境干扰较强,可通过电平转换芯片或隔离电路提高通信可靠性。

3.5 AT24C02存储模块电路(B端)

AT24C02是一种基于I²C总线的EEPROM存储芯片,具有容量小、功耗低、掉电数据不丢失等优点。该芯片通过SCL和SDA两根信号线与单片机通信。

在电路设计中,SCL和SDA线均通过上拉电阻连接至电源,以保证I²C总线正常工作。同时,通过合理分配存储地址,实现多条数字串的顺序存储。

3.6 按键控制模块(B端)

B端设置独立按键用于数据存储、查看和清除操作。按键通过限流电阻与单片机输入端口连接,并通过软件消抖方式提高按键识别的准确性。


4 系统程序设计

4.1 软件总体结构设计

系统软件采用模块化设计思想,将键盘扫描、LCD显示、串口通信、数据校验和存储管理等功能分别封装成独立模块。主程序负责系统初始化和任务调度,各模块之间通过全局变量或函数接口进行数据交互。

A端与B端程序在结构上具有一定相似性,但功能侧重点不同,分别围绕输入发送与接收存储展开。

4.2 键盘扫描程序设计(A端)

键盘扫描程序周期性检测矩阵键盘状态,并对检测到的按键进行编码处理。程序中加入软件延时消抖机制,防止按键抖动造成误操作。

c 复制代码
char Key_Scan(void)
{
    char key = 0;
    if(KEY_PORT != 0xFF)
    {
        delay_ms(10);
        if(KEY_PORT != 0xFF)
        {
            key = KEY_PORT;
        }
    }
    return key;
}

4.3 数字串输入与发送程序设计(A端)

在接收到有效按键后,程序根据按键类型进行处理:数字键加入输入缓冲区,"*"键删除字符,"#"键触发发送操作。

c 复制代码
void Send_String(char *buf, unsigned char len)
{
    unsigned char i;
    for(i = 0; i < len; i++)
    {
        UART_Send(buf[i]);
    }
}

4.4 串口接收程序设计(B端)

B端通过串口中断方式接收数据,将接收到的字符依次存入接收缓冲区,并根据结束标志判断数据接收完成。

c 复制代码
void UART_ISR(void) interrupt 4
{
    char dat;
    dat = SBUF;
    rx_buf[rx_cnt++] = dat;
    RI = 0;
}

4.5 数据校验程序设计

数据校验程序对接收到的数字串进行合法性判断,确保最后一位满足校验规则。

c 复制代码
bit Check_Data(char *buf, unsigned char len)
{
    unsigned char i, sum = 0;
    for(i = 0; i < len - 1; i++)
    {
        sum += buf[i] - '0';
    }
    if((sum % 10) == (buf[len - 1] - '0'))
        return 1;
    else
        return 0;
}

4.6 AT24C02存储与读取程序设计

存储模块通过I²C通信协议实现数据的写入与读取。程序中对存储地址进行统一管理,保证数据顺序存储。

c 复制代码
void EEPROM_Write(unsigned char addr, char dat)
{
    I2C_Start();
    I2C_Send(EEPROM_ADDR);
    I2C_Send(addr);
    I2C_Send(dat);
    I2C_Stop();
}

4.7 数据查看与清除程序设计

按键2触发数据读取程序,将存储在EEPROM中的数字串逐条读取并显示;按键3触发清除程序,将存储区域清零,实现数据重置。


5 系统总结

基于单片机的双机串口通信与数字串存储系统,通过合理的硬件模块设计和清晰的软件结构,实现了数字串的输入、通信、校验、显示及存储等完整功能。系统逻辑严谨、功能明确,充分体现了串口通信、数据校验和非易失性存储在嵌入式系统中的综合应用价值。该设计不仅具有较强的教学示范意义,也为实际工程中多机通信与数据管理提供了良好的设计参考。

相关推荐
来杯@Java2 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
清风6666662 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm4 小时前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu7 小时前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
CSDN官方博客7 小时前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
点灯小铭8 小时前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
云栖梦泽8 小时前
玩转RK3506SDK
linux·嵌入式硬件
数智工坊10 小时前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
进击的小头11 小时前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
点灯小铭11 小时前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业