通信聊天
任务要求:
用单片机实现与串口调试助手的通信,具体功能如下:
1、通过蓝牙模块(需要领取,如果使用笔记本电脑做该题,则只需要领取一个蓝牙模块,如果使用台式机则需要领取两个蓝牙模块外加一条USB转TTL线,尽量使用笔记本电脑,简化工作,学院的USB转TTL线并不多)实现与电脑串口调试助手的连接;(15分)
2、设定单片机的两种运行模式:接收消息/发送消息,同时按下按键A6和A7进行模式切换;(20分)
3、实现由电脑串口调试助手发送字母或数字给单片机,并由开发板OLED显示出来。(20分)
4、从PC端串口助手发送一个字符串到单片机,OLED显示屏显示该字符串,并通过按键上下左右选择其中任意一个字符,并将选中的字符发送回PC端。其中按键A4为上移方向、A5为下移方向、A6为左移方向、A7为右移方向。(25分)
5、单片机发送字符成功后流水灯亮起,接收到消息后蜂鸣器发出短暂声响。(20分)
本实验旨在通过单片机实现与串口调试助手的通信,包含接收和发送消息、显示和选择字符串字符以及通过按键实现字符选择和发送的功能。硬件组件包括单片机、蓝牙模块、LCD1602显示屏、蜂鸣器、小灯流水灯和矩阵键盘。通过本实验,可以深入了解单片机串口通信及蓝牙模块的应用,并熟悉LCD显示及按键控制。
单片机(如STC89C52)
蓝牙模块(如HC-05)
LCD1602显示屏
蜂鸣器
小灯流水灯
矩阵键盘
其他必要的连接线和电阻
蓝牙模块连接
VCC -> 5V
GND -> GND
TXD -> RXD (单片机的串口接收引脚)
RXD -> TXD (单片机的串口发送引脚)
LCD1602显示屏连接
VCC -> 5V
GND -> GND
RS -> P2.6
RW -> P2.5
EN -> P2.7
数据引脚 -> P0
矩阵键盘连接
键盘引脚分别连接到单片机的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
蜂鸣器连接
小灯流水灯连接
单片机通过按键实现两种模式的切换:接收模式和发送模式。
按下按键时,模式在接收和发送之间切换,并在LCD显示屏上更新显示。
从PC端串口助手发送一个字符串到单片机,LCD显示屏显示该字符串。
用户通过按键选择字符串中的任意字符,并将选中的字符发送回PC端。
按键A4为上移,A5为下移,A6为左移,A7为右移。
单片机成功发送字符后,流水灯亮起。
接收到消息后,蜂鸣器发出短暂声响,提示用户。
使用单片机的串口进行通信,配置波特率为9600bps。
通过蓝牙模块实现无线通信,单片机接收和发送数据。
使用并行通信控制LCD1602显示屏,显示接收到的字符串和光标位置。
根据接收的字符串长度进行显示更新和换行。
初始化串口、LCD1602显示屏、按键和中断。
设置定时器,用于定时检测按键状态和数据接收状态。
进入主循环,持续检测按键输入和串口接收状态。
根据模式进行数据接收和发送的处理。
接收数据并存储到接收缓冲区。
根据接收完成标志进行蜂鸣器提示。
根据按键输入控制光标的移动和模式的切换。
发送选中的字符到PC端,并更新发送成功标志。
根据接收的数据更新LCD显示屏的内容。
显示光标位置和当前选中的字符。
矩阵键盘的引脚定义:P1.7
到 P1.0
LCD1602显示屏的引脚定义:P2.6
、P2.5
、P2.7
和 P0
口作为数据端口
蜂鸣器引脚定义:P2.5
小灯流水灯的引脚定义:P2.0
到 P2.3
通过扫描矩阵键盘的按键状态,确定按键值并进行去抖动处理,返回按键值。
cunsigned char read_key(void) {
// 按键扫描逻辑
}
unsigned char getkey0(unsigned char mode) {
// 去抖动处理和按键状态判断
}
通过LCD1602显示屏初始化、字符显示、字符串显示和光标位置设置等函数,实现显示屏的控制。
cvoid 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
}
通过串口初始化、发送数据和接收数据中断处理,实现与PC端串口助手的通信。
cvoid send(unsigned char dat) {
// 发送数据到串口
}
void SerInit(void) {
// 初始化串口
}
void Uart_isr() interrupt 4 {
// 串口中断服务程序
}
根据按键输入处理光标移动和模式切换,更新显示内容。
cvoid ProcessKeyInput(unsigned char keyinput) {
// 按键处理逻辑
}
void OLED_DisplaysCertainLengthString(unsigned char *chr, unsigned char len) {
// 显示一定长度的字符串
}
通过蜂鸣器和流水灯的控制函数,提示发送和接收状态。
cvoid BeepAlarm(void) {
// 控制蜂鸣器发声
}
void led_light(void) {
// 控制流水灯亮起
}
通过本次实验,我们实现了单片机与串口调试助手的通信,掌握了蓝牙模块的应用,熟悉了LCD1602显示屏的控制方法。通过按键的交互操作,实现了字符的选择和发送,增强了对单片机控制的理解。同时,通过流水灯和蜂鸣器的提示,提升了用户体验。实验中我们遇到了一些问题,但通过调试和解决,使得系统能够稳定运行,达到了预期的效果。
作品:
clikehttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!