PC 端通过串口(STC-ISP 的串口助手)向开发板发送字符串(长度小于等于 16 个字符,字符串以’$’结尾,波特率 19200)并存储到 AT24c02 中(如果串口发 来新字符串,则覆盖原字符串),如果:K3 键按下,则把存储好的字符串显示到 LCD1602 上; K4 键按下,取消显示(显示清空)。

时间: 2023-12-06 21:02:58 浏览: 25
下面是一个基本的实现思路: 1. 初始化串口和AT24c02,确保能够正常通信。 2. 设置K3和K4按键对应的中断函数,当对应按键被按下时触发中断。 3. 在串口接收中断函数中,判断接收到的字符是否以’$’结尾,如果是则将字符串存储到AT24c02中。 4. 在K3中断函数中,从AT24c02中读取存储的字符串并显示到LCD1602上。 5. 在K4中断函数中,清空LCD1602上显示的内容。 下面是一个简单的伪代码,仅供参考: ```c #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define AT24C02_ADDR 0xA0 sbit K3 = P0^1; // 定义K3按键 sbit K4 = P0^0; // 定义K4按键 sbit RS = P2^0; // LCD1602接口 sbit RW = P2^1; // LCD1602接口 sbit EN = P2^2; // LCD1602接口 void LCD_Init(); // LCD1602初始化函数 void LCD_WriteCommand(uchar command); // LCD1602写命令函数 void LCD_WriteData(uchar dat); // LCD1602写数据函数 void UART_Init(); // 串口初始化函数 void UART_Interrupt() interrupt 4; // 串口中断函数 void AT24C02_Init(); // AT24C02初始化函数 void AT24C02_Write(uchar addr, uchar dat); // AT24C02写函数 uchar AT24C02_Read(uchar addr); // AT24C02读函数 void main() { uchar str[17] = ""; // 存储接收到的字符串 uchar i = 0; // 字符串下标 uchar c; // 接收到的字符 UART_Init(); // 初始化串口 AT24C02_Init(); // 初始化AT24C02 LCD_Init(); // 初始化LCD1602 K3 = 1; // K3按键上拉 K4 = 1; // K4按键上拉 EA = 1; // 打开总中断开关 while(1) { if (K4 == 0) // K4被按下 { LCD_WriteCommand(0x01); // 清屏 i = 0; // 清空字符串下标 } } } void UART_Init() { TMOD = 0x20; // 设置定时器1为8位定时器,工作模式2(自动重载) TH1 = 0xfd; // 波特率为19200 TL1 = 0xfd; TR1 = 1; // 启动定时器1 SM0 = 0; // 设置串口工作模式 SM1 = 1; REN = 1; // 启动串口接收 ES = 1; // 打开串口中断 } void UART_Interrupt() interrupt 4 { if (RI == 1) // 接收中断 { c = SBUF; // 读取接收到的字符 if (c == '$') // 字符串结束标志 { str[i] = '\0'; // 字符串末尾加上'\0' AT24C02_Write(0x00, i); // 存储字符串长度 for (i = 0; i < strlen(str); i++) { AT24C02_Write(i + 1, str[i]); // 存储字符串 } i = 0; // 清空字符串下标 } else if (i < 16) // 字符串长度小于等于16 { str[i] = c; // 存储字符 i++; // 字符串下标++ } RI = 0; // 清除接收中断标志位 } } void K3_Interrupt() interrupt 0 { uchar len = AT24C02_Read(0x00); // 读取存储的字符串长度 uchar j; if (len > 0) { for (j = 0; j < len; j++) { str[j] = AT24C02_Read(j + 1); // 读取存储的字符串 } LCD_WriteCommand(0x01); // 清屏 for (j = 0; j < len; j++) { LCD_WriteData(str[j]); // 显示字符串 } } } void AT24C02_Init() { // 初始化AT24C02 } void AT24C02_Write(uchar addr, uchar dat) { // AT24C02写函数 } uchar AT24C02_Read(uchar addr) { // AT24C02读函数 } void LCD_Init() { // LCD1602初始化函数 } void LCD_WriteCommand(uchar command) { // LCD1602写命令函数 } void LCD_WriteData(uchar dat) { // LCD1602写数据函数 } ```

相关推荐

最新推荐

recommend-type

串口发送控制继电器开关程序设计

实现功能:串口发送控制继电器开关 使用芯片:STC15F104E 晶振:12MHZ 编译环境:Keil
recommend-type

STC15串口使用总结

STC15串口通信的使用介绍,有详细的代码,总结了STC15系类单片机串口的配置。
recommend-type

如何编写STC单片机的ISP协议

本文即介绍此情况下的ISP(In-System-Programming)程序设计方法,以及在SST和STC单片机上的具体实现.。
recommend-type

基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip

【资源说明】 基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
recommend-type

2023新型智慧城市智慧交通专项设计方案[498页Word].docx

2023新型智慧城市智慧交通专项设计方案[498页Word].docx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。