当前位置: 首页 > news >正文

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

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

点击链接下载资料:https://download.csdn.net/download/m0_51061483/92081494


1. 系统功能介绍

本系统设计旨在实现基于单片机的双机串口通信与数字串存储功能,由两个独立的单片机系统(A端与B端)组成。A端主要负责数字串的输入与发送,B端负责接收、校验、显示及存储。系统的整体功能涵盖了人机交互、串口通信、数据校验与非易失性存储等多个方面,体现了单片机系统在通信与数据管理中的综合应用能力。

系统的主要功能如下:

  1. 数字串输入与发送(A端)
    用户通过拨号键盘输入一串数字(2~16位),输入过程在LCD屏上实时显示。

    • 按键 * 用于删除上一个输入的数字。
    • 按键 # 用于启动数据发送。
      当按下 # 后,A端通过串口发送完整数字串到B端。
  2. 数据接收与校验(B端)
    B端通过串口实时监听A端发送的数据,当接收到完整的数字串后,系统会进行校验计算
    校验规则为:最后一位数字应等于前面所有数字之和的个位数。

    • 若校验通过,LCD屏显示接收到的数字串;
    • 若校验不通过,则自动清空LCD显示,并丢弃该数据。
  3. 数据存储与查看(B端)

    • 按键 1:将当前校验通过的数字串存入AT24C02存储器中,并显示“存储成功”;
    • 按键 2:从AT24C02中读取所有已存储的数据串并在LCD上循环显示;
    • 按键 3:清除EEPROM中所有存储的数据并提示“数据清除完成”。
  4. 系统交互性与可靠性
    整个系统通过LCD1602实现清晰的界面交互,采用标准的UART串口通信协议,确保A、B两机之间的数据传输准确可靠。B端使用EEPROM非易失存储器保证断电后数据依然保留,提升系统的实用性与稳定性。


2. 系统电路设计

系统电路设计以STC89C52单片机为核心,分为输入端(A机)与接收端(B机)两部分。主要包括:单片机最小系统电路、键盘输入模块、LCD1602显示模块、串口通信模块、EEPROM存储模块及电源模块


2.1 单片机最小系统设计

系统的核心控制器采用 STC89C52 单片机,具有丰富的I/O接口和UART通信模块。
最小系统包括:晶振电路、复位电路和电源滤波部分。

  • 晶振采用12MHz晶体振荡器,确保系统运行稳定;
  • 复位电路由电容与电阻构成上电复位电路,保证系统启动可靠;
  • 电源采用+5V直流稳压供电,由7805稳压芯片提供稳定电压。

A机与B机各自独立供电,确保通信过程不受干扰。


2.2 键盘输入模块

A端的键盘采用 4×4矩阵键盘,通过8个I/O口实现扫描输入。
键盘布局如下:

键位功能
0~9数字输入
*删除上一个数字
#发送数字串
A/B/C/D预留扩展功能键

矩阵键盘的行列扫描由单片机周期性输出信号完成,通过检测列线的电平变化判断按键状态。软件中采用去抖动算法,避免误触发。


2.3 LCD1602 显示模块

LCD1602模块用于显示系统状态、输入数字串和提示信息。

  • 在A端显示输入的数字和发送状态;
  • 在B端显示接收到的数字串、存储状态或错误提示。

LCD1602通过4位数据线模式与单片机连接,以节省I/O资源。
主要显示内容包括:

  • 当前输入/接收的数字串;
  • “发送中…”、“接收成功”、“校验失败”提示;
  • 存储、读取、清除状态信息。

2.4 串口通信模块

A端与B端之间通过UART异步串口通信实现数据传输。通信参数如下:

  • 波特率:9600bps;
  • 数据位:8位;
  • 停止位:1位;
  • 校验位:无。

物理层可采用TTL电平直连,也可通过MAX232芯片进行RS232电平转换以适应外部通信环境。

系统中采用定时器方式产生标准波特率,保证通信精度。通信中使用中断机制实现非阻塞式数据接收。


2.5 AT24C02 存储模块

AT24C02是一款容量为2Kb的I²C接口EEPROM,用于B端存储接收的数字串。
其优点包括:

  • 非易失性存储,断电数据不丢失;
  • 支持多字节连续写入;
  • 可靠的擦写寿命(>100万次)。

通过SDA、SCL两根总线与单片机通信。系统通过编程实现写入、读取及清空操作。


2.6 电源模块

系统统一使用+5V电源供电。通过7805稳压芯片将外部直流9V或12V转换为稳定的5V。
在各模块供电端添加退耦电容(如100nF)以减少干扰,保障系统运行稳定。


3. 系统程序设计

系统程序包括主控程序、键盘输入程序、LCD显示程序、串口通信程序及EEPROM存储管理程序等部分。
A端与B端分别拥有独立的软件逻辑,整体结构清晰、模块划分明确。


3.1 A端程序设计

A端主要实现数字串输入、显示与发送功能。

(1) 主程序逻辑

主程序流程为:

  1. 系统初始化(LCD、键盘、串口等);
  2. 等待用户按键输入;
  3. 实时显示输入数字;
  4. 当按下 # 键时,触发发送函数;
  5. 通过串口逐字节发送数字串。

核心代码如下:

void main() {UART_Init();LCD_Init();Key_Init();LCD_ShowString(0,0,"Input Num:");while(1) {key = Key_Scan();if(key >= '0' && key <= '9') {Add_Num(key);LCD_ShowString(1,0,numberBuffer);}else if(key == '*') {Delete_Num();LCD_ShowString(1,0,numberBuffer);}else if(key == '#') {UART_SendString(numberBuffer);LCD_ShowString(1,0,"Sending...");}}
}

(2) 键盘扫描程序

键盘采用行列扫描方式,通过定时扫描和延时消抖处理。

unsigned char Key_Scan(void) {unsigned char temp;P1 = 0x0F;if((P1 & 0x0F) != 0x0F) {Delay_ms(10);if((P1 & 0x0F) != 0x0F) {temp = P1;while((P1 & 0x0F) != 0x0F);return DecodeKey(temp);}}return 0;
}

(3) 串口发送函数

采用中断发送机制,提高效率与可靠性。

void UART_SendString(char *str) {while(*str != '\0') {SBUF = *str++;while(!TI);TI = 0;}
}

3.2 B端程序设计

B端程序主要实现接收、校验、显示及存储管理。

(1) 串口接收与校验逻辑

系统通过串口中断方式接收A端数据,并在接收完成后进行校验。
校验规则:最后一位数字 = 前面所有数字之和的个位数。

void UART_Rx_ISR(void) interrupt 4 {if(RI) {char ch = SBUF;RI = 0;if(ch == '#') {Check_Data();} else {buffer[index++] = ch;}}
}

校验函数:

void Check_Data(void) {unsigned char sum = 0;for(i=0;i<index-1;i++) sum += buffer[i]-'0';if((sum%10) == (buffer[index-1]-'0')) {LCD_ShowString(1,0,buffer);validFlag = 1;} else {LCD_Clear();LCD_ShowString(0,0,"Check Failed!");validFlag = 0;}
}

(2) EEPROM存储程序

通过I²C总线控制AT24C02的读写操作。

写入函数:

void EEPROM_Write(unsigned char addr, unsigned char dat) {I2C_Start();I2C_SendByte(0xA0);I2C_SendByte(addr);I2C_SendByte(dat);I2C_Stop();Delay_ms(10);
}

读取函数:

unsigned char EEPROM_Read(unsigned char addr) {unsigned char dat;I2C_Start();I2C_SendByte(0xA0);I2C_SendByte(addr);I2C_Start();I2C_SendByte(0xA1);dat = I2C_ReceiveByte();I2C_Stop();return dat;
}

(3) 按键控制逻辑

B端设有三个功能按键:

  • 按键1:存储当前数据;
  • 按键2:读取显示;
  • 按键3:清空数据。
void Key_Process() {key = Key_Scan();if(key == 1 && validFlag) Save_Data();else if(key == 2) Show_StoredData();else if(key == 3) Clear_All();
}

3.3 LCD 显示程序

LCD显示模块用于输出系统提示及操作结果:

void LCD_ShowString(unsigned char line, unsigned char pos, unsigned char *str) {if(line == 0) LCD_SetCursor(0x80 + pos);else LCD_SetCursor(0xC0 + pos);while(*str) {LCD_WriteData(*str++);}
}

系统中通过调用不同的显示函数,实现状态提示与用户交互。


4. 系统总结

本系统实现了基于单片机的双机串口通信与数字串存储管理功能,具备输入、校验、存储、显示等多种功能模块。
系统采用模块化设计思想,软件结构清晰、可维护性强。
A、B两机的功能分工合理,A机注重人机交互,B机负责数据安全与存储。
通过UART串口实现了稳定可靠的通信机制,EEPROM模块保证数据的非易失性存储。

该设计不仅适用于单片机通信与存储实验教学,也可扩展应用于数据传输、身份校验、远程终端输入系统等领域,具有良好的应用前景与学习价值。

http://www.dtcms.com/a/508348.html

相关文章:

  • 嘉兴建设网站模版用iis在自己家电脑上做网站
  • 无人机RTK信号增强技术要点
  • 重庆网站建设开发iis8.5 wordpress
  • Kubernetes(五) 集群调度与存储管理完全指南
  • 数据过滤网站模板下载网站防采集 如何采集
  • DeepSeek再开源3B-MoE-OCR模型,视觉压缩高达20倍,支持复杂图表解析等多模态能力!
  • 网站推广话术与技巧codewars网站
  • 南京个人做网站怎么创建网站后台
  • 【Misc】图片隐写刷题 1
  • Spring Boot 3零基础教程,WEB 开发 Thymeleaf 模板引用 笔记43
  • 深圳哪里做网站好青岛一品网站建设
  • 中小企业网站的建设实践报告电脑怎么打不开建设银行网站
  • 万网搭建淘宝客网站门户网站建设招标文件
  • 9、dockerfile
  • Python 创建、修改、或删除 Excel 命名区域
  • 上海网站seo诊断免费店铺logo设计
  • 专业做礼品团购的网站wordpress调用分类id
  • 网站设计用那个软件网站开发绩效考核
  • 软件开发和网站开发区别app简易开发平台
  • 如何不用百度推广做网站wordpress都是不安全模块
  • 机械加工类网站云主机 多个网站
  • 基于I2C的stm32f103c8t6的硬件配置(寄存器实现)
  • Android 系统中进程间通信方式
  • YOLOv4:集大成的目标检测王者
  • 微服务架构
  • 软件制作工程师企业网站seo运营
  • 云服务器小网站制作wordpress企业显示不了
  • AIGC降重软件开发
  • 网站开发的预算用dw制作视频网站
  • 【项目】基于多设计模式下的同步异步日志系统 - 项目实现