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

学习STC51单片机29(芯片为STC89C52RCRC)

每日一言

       人生没有重来的机会,珍惜当下,全力以赴

3.串口接收数据

那么我们要是想要将数据在电脑上面的串口助手显示,那么我们就需要建立起串口通信,

1初始化波特率的代码  2.发送字符和发送字符串到串口的函数

我们需要做到以上两点

所以我们要加入这些代码

初始化9600波特率                                  发送字符和发送字符串到串口的函数

我还需要讲一下原理吗 ??? 亲爱的少年,请你好好的巩固你的江山

原理就是,我们不是通过那个datainfo[]这个数组将数据都存放到这里了吗

这个sendByte(此参数是一个字节的数据)

那我们就可以利用sendByte函数,或者是说sendString函数将数据发送到SUBF发送寄存器,然后由SUBF发送到PC的接收寄存器,那么SUBF为什么可以发送,凭借着相同的波特率和usb转ttl的ch340芯片,pc有ch340驱动、单片机有ch340芯片,这样两者就可以进行串口通信了,别看数据线是没有显示RXD和TXD的但是其实是有的,只是我们看不到....

代码展示

这边主要就是讲一下sendByte(datainfo[0]/10+0x30);

这个参数的意思,为啥要这样设置

比如datainfo[5]这个数组里面不是第一项都是湿度的整数吗,那如果DHT11传上来的01010010这样的二进制数,而且他是想要表示的是37,可是这个是数字37,那么我们再将这个直接传给串口助手的话,他是会讲这个37作为ASCII码值转换成字符的,那就不是我们想要的了,所以我们要将datainfo[]数组里面的数字37转换成字符37再传给串口,这样才是我们想要的

我们先将整数的十位取出来,再将个位转取出来,取十位就是/10  ,取个位就是%10(c语言基础),加上0x30,为什么加上0x30呢,因为是 字符0的16进制,对应ASCII码值为48(十进制),那么我可以通过取出来的十位(比如5)或者个位加上48,得到比如53这个ASCII码,那么53对应的就是字符5   (注意,这也是我们为什么要用十位和个位取出来的一个方向)

这样我们的串口助手就可以收到正确的信息了,其实还有一个点就在串口助手是用文本模式接收的,那么肯定就是需要字符啊,不是字符的格式,那么就是会有误啊

这样就OK啦

4.LCD显示温度

我们将LCD的代码与DHT11的代码整合起来

主要的区别点在哪?

就是将temp温度 和 humi湿度的数据存放到数组里面,进行整合一下,那为什么要存放到数组里面呢?1、其实也跟我们LCD的显示字符串的函数有关,因为需要传进去的是指针,2、封装函数显得main函数不会那么多代码,

在写一个函数用于构建temp数组和humi数组,这样我们调用的时候,就可以都获取到全部数据了,循环调用,数据会不断的刷新,最后我们的show_string()

函数里面的第三个参数就填数组名就好了,因为show_string函数的第三个函数接收的是指针,那么我们直接传数组名,就等于是数组的首地址,随后一个个遍历出来

复习一下:

二、DataBuffer 的作用:数据暂存与读写控制

1. 写操作(单片机→LCD)

流程
① 单片机将数据(如字符 'A' 的 ASCII 码0x41)写入dataBuffer
② 设置控制信号:RS=1(数据模式),RW=0(写操作),E=1→0(触发使能)。
③ dataBuffer中的数据通过 8 位数据线传输到 LCD 的数据寄存器(DR),LCD 根据 DR 中的内容执行显示动作(如在当前光标位置显示字符)。

核心原理
LCD 内部有显示缓冲区(DDRAM),当 DR 接收到数据后,会将其写入 DDRAM 对应的地址,而 LCD 的控制器会周期性扫描 DDRAM,并将数据转换为驱动像素的电信号,最终在屏幕上显示字符

分文件优化代码

我们来优化一下又长又臭的代码!!!!

我们这个代码不是来到了300行嘛,那肯定是很难受的,且不易于维护,那么我们就要进行分文件优化代码

最终效果

会发现多了好多文件,这就是最终的效果

怎么操作??

我们右键sourse group 1 选择第二个添加新文件

举个例子这边用delay

我们不是有很多模块吗,都是先给每一个模块创建一个.c文件,还有一个.h文件

先讲.c文件

我们将main函数里面比如有关delay、uart啊等等,把他们分别剥离到属于他们自己的.c文件中,只要,是有关的都给剥离出来。也就是模块化,一个个模块分清楚

随后我们讲一讲.h文件里面的内容

这个.h文件里面的内容就是,将.c文件复制过去,删掉比如引脚、宏定义、等等。只要留下函数,并把函数体删掉,.h文件的作用目的是做声明函数的作用

就像我们在图书馆看书,.h文件就是目录,.c文件就是内容

我们main函数要引用.h文件啊

这样我们的main函数调用函数的时候才可以找得到对应的函数。

别忘了,要会看编译错误的信息,因为有些就是需要我们加上引用其他的头文件,比如uart.c是关于串口的文件,那么是不是那些寄存器的定义都不懂,所以我们要加上reg52.h文件,当然了这个文件就是51单片机对寄存器那些名字的声明,和我们的.h文件实质上是一样的,就是你的.c文件里面的代码需要用到另外一个.c文件里面的函数,那我们就需要引用另外一个文件的.h文件

最后对于我们这个代码,重点来了

我们这个main函数里面不是需要用到humi和temp数组吗,但是这两个数组是dht.c文件里面的,然后我们是不能重复定义的(肯定啊,语法) ,但是main函数我们又要用到这个两个数组,那么我们可以利用extern这个关键字

这个关键字呢通俗的讲:就是可以直接调用dht.c函数的temp和humi的数组,而不是自己创建  自己创建的能一样吗,直接语法错了不让重复定义,(在python中:县长张三和村长张三能一样吗?)

好了,这样就符合我们的main函数的编译和运行了,就成功了,就是那么舒服

分文件优化代码的视频(跟着视频操作,或者看一下,一下就懂了)

相关文章:

  • 6.6 day38
  • 2025年6月6日15:48:23
  • 数字孪生:解锁未来的“数字钥匙”
  • 如何在Lyra中创建一个新的Game Feature Plugin和Experience游戏体验
  • c++中的输入输出流(标准IO,文件IO,字符串IO)
  • 从0开始学习R语言--Day18--分类变量关联性检验
  • Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
  • EM储能网关ZWS智慧储能云应用(11) — 一级架构主从架构
  • 关于事务的简介
  • 人机融合智能 | “人智交互”跨学科新领域
  • 高通camx CaptureSession
  • 使用 SymPy 进行向量和矩阵的高级操作
  • 电子电气架构 --- 什么是功能架构?
  • Docker容器化技术概述与实践
  • Chrome书签的导出与导入:步骤图
  • 掌握子网划分:优化IP分配与管理
  • Ubuntu 系统静态网络配置
  • 从webrtc到janus简介
  • 用Cursor与Chrome插件爬取网页数据
  • windows上的visual studio2022的项目使用jenkins自动打包
  • 如何在网站做引流/临沂头条新闻今日头条
  • 建立网站的英文怎么说/seo外链推广工具下载
  • 半导体网站建设/东莞企业网站排名
  • 十款看免费行情的软件推荐/seo优化网络
  • 简单的购物网站模板/html网页制作步骤
  • 网站一般用什么软件做/宁波seo关键词如何优化