2024-09-01
售卖作品
00

目录

实验报告
1. 实验背景
2. 硬件介绍与连接
2.1 硬件清单
2.2 硬件连接
3. 设计原理
3.1 模式选择
3.2 字符接收与显示
3.3 字符选择与发送
3.4 发送与接收确认
4. 电路原理
4.1 串口通信原理
4.2 LCD1602显示原理
4.3 按键控制原理
4.4 蜂鸣器与流水灯控制
5. 程序设计原理
5.1 初始化
5.2 主程序
5.3 串口中断服务程序
5.4 按键处理程序
5.5 显示刷新程序
6. 代码实现分析
6.1 硬件定义
6.2 按键扫描
6.3 LCD1602显示控制
6.4 串口通信
6.5 按键处理和显示更新
6.6 蜂鸣器和流水灯控制
7. 实验总结

通信聊天

任务要求:

用单片机实现与串口调试助手的通信,具体功能如下:

1、通过蓝牙模块(需要领取,如果使用笔记本电脑做该题,则只需要领取一个蓝牙模块,如果使用台式机则需要领取两个蓝牙模块外加一条USB转TTL线,尽量使用笔记本电脑,简化工作,学院的USB转TTL线并不多)实现与电脑串口调试助手的连接;(15分)

2、设定单片机的两种运行模式:接收消息/发送消息,同时按下按键A6和A7进行模式切换;(20分)

3、实现由电脑串口调试助手发送字母或数字给单片机,并由开发板OLED显示出来。(20分)

4、从PC端串口助手发送一个字符串到单片机,OLED显示屏显示该字符串,并通过按键上下左右选择其中任意一个字符,并将选中的字符发送回PC端。其中按键A4为上移方向、A5为下移方向、A6为左移方向、A7为右移方向。(25分)

5、单片机发送字符成功后流水灯亮起,接收到消息后蜂鸣器发出短暂声响。(20分)

实验报告

1. 实验背景

本实验旨在通过单片机实现与串口调试助手的通信,包含接收和发送消息、显示和选择字符串字符以及通过按键实现字符选择和发送的功能。硬件组件包括单片机、蓝牙模块、LCD1602显示屏、蜂鸣器、小灯流水灯和矩阵键盘。通过本实验,可以深入了解单片机串口通信及蓝牙模块的应用,并熟悉LCD显示及按键控制。

2. 硬件介绍与连接

2.1 硬件清单

  • 单片机(如STC89C52)

  • 蓝牙模块(如HC-05)

  • LCD1602显示屏

  • 蜂鸣器

  • 小灯流水灯

  • 矩阵键盘

  • 其他必要的连接线和电阻

2.2 硬件连接

  1. 蓝牙模块连接

    • VCC -> 5V

    • GND -> GND

    • TXD -> RXD (单片机的串口接收引脚)

    • RXD -> TXD (单片机的串口发送引脚)

  2. LCD1602显示屏连接

    • VCC -> 5V

    • GND -> GND

    • RS -> P2.6

    • RW -> P2.5

    • EN -> P2.7

    • 数据引脚 -> P0

  3. 矩阵键盘连接

    • 键盘引脚分别连接到单片机的P1口,如下:

      • key_10 -> P1.7

      • key_11 -> P1.6

      • key_12 -> P1.5

      • key_13 -> P1.4

      • key_14 -> P1.3

      • key_15 -> P1.2

      • key_16 -> P1.1

      • key_17 -> P1.0

  4. 蜂鸣器连接

    • BEEP -> 单片机P2.5引脚
  5. 小灯流水灯连接

    • 流水灯连接到单片机的P2.0到P2.3引脚

3. 设计原理

3.1 模式选择

  • 单片机通过按键实现两种模式的切换:接收模式和发送模式。

  • 按下按键时,模式在接收和发送之间切换,并在LCD显示屏上更新显示。

3.2 字符接收与显示

  • 通过串口助手发送字符到单片机,单片机接收到字符后,存储到接收缓冲区,并在LCD1602显示屏上显示。

3.3 字符选择与发送

  • 从PC端串口助手发送一个字符串到单片机,LCD显示屏显示该字符串。

  • 用户通过按键选择字符串中的任意字符,并将选中的字符发送回PC端。

  • 按键A4为上移,A5为下移,A6为左移,A7为右移。

3.4 发送与接收确认

  • 单片机成功发送字符后,流水灯亮起。

  • 接收到消息后,蜂鸣器发出短暂声响,提示用户。

4. 电路原理

4.1 串口通信原理

  • 使用单片机的串口进行通信,配置波特率为9600bps。

  • 通过蓝牙模块实现无线通信,单片机接收和发送数据。

4.2 LCD1602显示原理

  • 使用并行通信控制LCD1602显示屏,显示接收到的字符串和光标位置。

  • 根据接收的字符串长度进行显示更新和换行。

4.3 按键控制原理

  • 检测按键的状态,根据按键输入控制光标的移动和模式的切换。

4.4 蜂鸣器与流水灯控制

  • 使用单片机的I/O引脚控制蜂鸣器和流水灯,根据接收和发送的状态进行提示。

5. 程序设计原理

5.1 初始化

  • 初始化串口、LCD1602显示屏、按键和中断。

  • 设置定时器,用于定时检测按键状态和数据接收状态。

5.2 主程序

  • 进入主循环,持续检测按键输入和串口接收状态。

  • 根据模式进行数据接收和发送的处理。

5.3 串口中断服务程序

  • 接收数据并存储到接收缓冲区。

  • 根据接收完成标志进行蜂鸣器提示。

5.4 按键处理程序

  • 根据按键输入控制光标的移动和模式的切换。

  • 发送选中的字符到PC端,并更新发送成功标志。

5.5 显示刷新程序

  • 根据接收的数据更新LCD显示屏的内容。

  • 显示光标位置和当前选中的字符。

6. 代码实现分析

6.1 硬件定义

  • 矩阵键盘的引脚定义:P1.7P1.0

  • LCD1602显示屏的引脚定义:P2.6P2.5P2.7P0 口作为数据端口

  • 蜂鸣器引脚定义:P2.5

  • 小灯流水灯的引脚定义:P2.0P2.3

6.2 按键扫描

通过扫描矩阵键盘的按键状态,确定按键值并进行去抖动处理,返回按键值。

c
unsigned char read_key(void) { // 按键扫描逻辑 } unsigned char getkey0(unsigned char mode) { // 去抖动处理和按键状态判断 }

6.3 LCD1602显示控制

通过LCD1602显示屏初始化、字符显示、字符串显示和光标位置设置等函数,实现显示屏的控制。

c
void LCD_write_com(unsigned char com) { // 写命令到LCD } void LCD_write_data(unsigned char dataa) { // 写数据到LCD } void LCD_write_char(unsigned char x, unsigned char y, unsigned char dataa) { // 在指定位置写字符 } void SetCurPosition(unsigned char x, unsigned char y) { // 设置光标位置 } void LCD_init(void) { // 初始化LCD }

6.4 串口通信

通过串口初始化、发送数据和接收数据中断处理,实现与PC端串口助手的通信。

c
void send(unsigned char dat) { // 发送数据到串口 } void SerInit(void) { // 初始化串口 } void Uart_isr() interrupt 4 { // 串口中断服务程序 }

6.5 按键处理和显示更新

根据按键输入处理光标移动和模式切换,更新显示内容。

c
void ProcessKeyInput(unsigned char keyinput) { // 按键处理逻辑 } void OLED_DisplaysCertainLengthString(unsigned char *chr, unsigned char len) { // 显示一定长度的字符串 }

6.6 蜂鸣器和流水灯控制

通过蜂鸣器和流水灯的控制函数,提示发送和接收状态。

c
void BeepAlarm(void) { // 控制蜂鸣器发声 } void led_light(void) { // 控制流水灯亮起 }

7. 实验总结

通过本次实验,我们实现了单片机与串口调试助手的通信,掌握了蓝牙模块的应用,熟悉了LCD1602显示屏的控制方法。通过按键的交互操作,实现了字符的选择和发送,增强了对单片机控制的理解。同时,通过流水灯和蜂鸣器的提示,提升了用户体验。实验中我们遇到了一些问题,但通过调试和解决,使得系统能够稳定运行,达到了预期的效果。

在这里插入图片描述

作品:

clike
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!