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

无线串口模块,LCD1602模块

lcd1602

看一个项目里有PCF8574 和 HD44780,我好奇,板子上又没有,这是干嘛的, 问AI,是一种lcd1602模块,长这个样子

好处, 只需要四根线就可以让任何板子有个小显示屏.
使用IIC通信, 固定使用PB6,PB7两个引脚 (我的板子), 街上这两个,和3.3v和gnd就可以工作了.
引入步骤 keil:

  1. copy2个文件到E:\keil_v5_git_workspace\lcd1602_test\App\lcd
  2. 在keil里add这2个文件 ‘pcf8574_std.c’,‘pcf8574_std.h’
  3. keil里魔法棒 include path加 lcd
  4. main.c里加#include “pcf8574_std.h”
  5. stdPeriph-driver里引入 stm32f10x_i2c.c
  6. main.c里加

    LCD1602_Init(); // 屏初始化
    LCD1602_ShowStr(0, 0, “STM32 Standard”);
    LCD1602_ShowStr(0, 1, “LCD1602 I2C OK”);

pcf8574_std.h

#ifndef__PCF8574_H#define__PCF8574_H#include"stm32f10x.h"// 标准库核心头文件// PCF8574 I2C 地址(根据硬件修改,常见 0x27 / 0x3F)#definePCF8574_ADDR0x27// I2C 引脚定义(标准库,根据你的硬件修改)#defineI2C_PORTGPIOB#defineI2C_SCL_PINGPIO_Pin_6#defineI2C_SDA_PINGPIO_Pin_7#defineI2CI2C1// 函数声明voidPCF8574_I2C_Init(void);voidPCF8574_WriteByte(uint8_tdata);voidLCD1602_WriteCmd(uint8_tcmd);voidLCD1602_WriteData(uint8_tdata);voidLCD1602_Init(void);voidLCD1602_ShowStr(uint8_tx,uint8_ty,char*str);//显示字符串voidLCD1602_ShowNum(uint8_tx,uint8_ty,int32_tnum);// 显示整数voidLCD1602_ShowFloat(uint8_tx,uint8_ty,floatnum,uint8_tdot);// 显示浮点数#endif

pcf8574_std.c

#include"pcf8574_std.h"#include"SysTick.h"// ########################### 关键修复:背光位固定为1 ############################defineLCD_BL0x08// 背光控制位(1=常亮,0=熄灭)// I2C 初始化voidPCF8574_I2C_Init(void){GPIO_InitTypeDef GPIO_InitStruct;I2C_InitTypeDef I2C_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);// 复用开漏输出GPIO_InitStruct.GPIO_Pin=I2C_SCL_PIN|I2C_SDA_PIN;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(I2C_PORT,&GPIO_InitStruct);I2C_InitStruct.I2C_ClockSpeed=100000;// 100KHz 更稳定I2C_InitStruct.I2C_Mode=I2C_Mode_I2C;I2C_InitStruct.I2C_DutyCycle=I2C_DutyCycle_2;I2C_InitStruct.I2C_OwnAddress1=0;I2C_InitStruct.I2C_Ack=I2C_Ack_Enable;I2C_InitStruct.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;I2C_Init(I2C,&I2C_InitStruct);I2C_Cmd(I2C,ENABLE);}// PCF8574 写数据(自带背光)staticvoidPCF8574_Write(u8 data){data|=LCD_BL;// 强制开启背光while(I2C_GetFlagStatus(I2C,I2C_FLAG_BUSY));I2C_GenerateSTART(I2C,ENABLE);while(!I2C_CheckEvent(I2C,I2C_EVENT_MASTER_MODE_SELECT));I2C_Send7bitAddress(I2C,PCF8574_ADDR<<1,I2C_Direction_Transmitter);while(!I2C_CheckEvent(I2C,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));I2C_SendData(I2C,data);while(!I2C_CheckEvent(I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTED));I2C_GenerateSTOP(I2C,ENABLE);delay_ms(1);}// LCD1602 写4位数据staticvoidLCD1602_Write4Bit(u8 data,u8 rs){u8 temp=(data&0xF0)|rs|LCD_BL;PCF8574_Write(temp|0x04);// EN=1PCF8574_Write(temp&~0x04);// EN=0}// 写命令staticvoidLCD1602_WriteCmd(u8 cmd){LCD1602_Write4Bit(cmd,0);// 高4位LCD1602_Write4Bit(cmd<<4,0);// 低4位delay_ms(2);}// ########################### 关键修复:严格初始化时序 ###########################voidLCD1602_Init(void){PCF8574_I2C_Init();delay_ms(50);// 上电延时// 4位模式初始化LCD1602_Write4Bit(0x30,0);delay_ms(5);LCD1602_Write4Bit(0x30,0);delay_ms(1);LCD1602_Write4Bit(0x30,0);delay_ms(1);LCD1602_Write4Bit(0x20,0);delay_ms(1);LCD1602_WriteCmd(0x28);// 4位线,2行,5x8点阵LCD1602_WriteCmd(0x0C);// 开显示,无光标(最常用)LCD1602_WriteCmd(0x06);// 光标右移LCD1602_WriteCmd(0x01);// 清屏delay_ms(5);}// 显示字符串/* 参数 名称 取值范围 通俗解释 x 列坐标 0 ~ 15 水平位置:0 = 最左边,15 = 最右边 y 行坐标 0 / 1 垂直位置:0 = 第一行,1 = 第二行 str 显示字符串 你要显示的文字 / 数字 / 符号 */voidLCD1602_ShowStr_old(u8 x,u8 y,char*str){u8 addr;if(y==0)addr=0x80+x;elseaddr=0xC0+x;LCD1602_WriteCmd(addr);while(*str){LCD1602_Write4Bit(*str,1);LCD1602_Write4Bit(*str<<4,1);str++;}}// 功能:从x列开始显示字符串,自动清空 x~15列所有残留字符// 比old好(见LCD1602_ShowNum里的说明,不清屏快速展示的内容会完全看不懂,这是严重问题),// 但有个小问题,反复执行会一直闪// 清屏是必须的,不知道为什么.voidLCD1602_ShowStr(uint8_tx,uint8_ty,char*str){uint8_taddr;uint8_ti;uint8_tclear_len=16-x;// 清空:从x到行尾一共多少格// 1. 计算光标位置if(y==0)addr=0x80+x;elseaddr=0xC0+x;LCD1602_WriteCmd(addr);// 2. 直接清空 x~15列(底层写空格,无递归!)for(i=0;i<clear_len;i++){LCD1602_Write4Bit(' ',1);LCD1602_Write4Bit(' '<<4,1);}// 3. 重新移动光标,显示字符串if(y==0)addr=0x80+x;elseaddr=0xC0+x;LCD1602_WriteCmd(addr);while(*str){LCD1602_Write4Bit(*str,1);LCD1602_Write4Bit(*str<<4,1);str++;}}/** * 功能:在指定位置显示 整数 (支持正负,如 -123、45678) * x:列坐标(0~15) * y:行坐标(0/1) * num:要显示的整数 (int32_t 支持很大范围) */voidLCD1602_ShowNum(uint8_tx,uint8_ty,int32_tnum){charbuf[16];// 存储转换后的字符串// 数字转字符串sprintf(buf,"%d",num);/*if(y == 0) LCD1602_ShowStr(0, 0, " "); else LCD1602_ShowStr(0, 1, " "); 对于快速变化的内容,这两行是必须的,但为了通用性,放在了LCD1602_ShowStr里*/// 调用原有字符串函数显示LCD1602_ShowStr(x,y,buf);}/** * 功能:在指定位置显示 浮点数 (支持正负,如 3.14、-2.5、100.00) * x:列坐标(0~15) * y:行坐标(0/1) * num:浮点数 * dot:保留几位小数(推荐 1~2 位,屏幕足够显示) */voidLCD1602_ShowFloat(uint8_tx,uint8_ty,floatnum,uint8_tdot){charbuf[16];// 根据小数位数格式化,自动转字符串if(dot==0)sprintf(buf,"%.0f",num);// 无小数elseif(dot==1)sprintf(buf,"%.1f",num);// 1位小数elseif(dot==2)sprintf(buf,"%.2f",num);// 2位小数elsesprintf(buf,"%.3f",num);// 3位小数LCD1602_ShowStr(x,y,buf);}

无线串口模块

又问了AI还有什么好东西, 另一个是无线串口模块, 长这样

好处, 无线串口不稀罕,无线下载器都又这个功能,但这个足够的小且是用蓝牙通信的,手机完全无缝使用.

先手机安装APP"SerialTest".这是接收蓝牙信号的app.

四根线,只需接三根即可:
VCC接3.3v
GND接GND
RXD接串口输出脚,如PA9

通电但蓝牙未连接时, 红灯闪烁.
此时打开手机蓝牙,找到"JDY-31-SPP"进行配对,输入1234.即可配对成功,此时红灯常亮. 只需要配对一次,以后都在APP"SerialTest"里连接
打开APP"SerialTest"
按如图1连接 按1,2,3

按如图2接收数据

点击"导出"默认把文件保存到下载文件夹

注意,无线串口工具断电之后再通电,需要手机在APP"SerialTest"的左下角点击重连一次(见图1的4). 红灯会从闪烁变为常亮

开发须知:串口必须使用9600波特率. 这是引入无线串口模块带来的唯一代码层侵入

http://www.rkmt.cn/news/1466357.html

相关文章:

  • 5个步骤快速上手Ta4j:Java量化交易策略开发的终极指南
  • 宽带图像声纳高速浮点信号处理技术解析【附程序】
  • RXNEmb:基于嵌入表示的化学反应相似性度量与聚类技术
  • Claude Managed Agents:Agent 运行时的 POSIX 标准
  • 碧蓝航线自动化终极指南:3步掌握Alas脚本完整应用
  • Node.js游戏服务器项目移植 6-轻量化Token登录概述
  • 2026年高效AI论文工具全攻略(含新手入门指南)
  • AMD Ryzen终极调试指南:如何通过免费开源工具解决处理器性能瓶颈?
  • iOS TCP 深度优化:滑动窗口、重传机制、拥塞控制实战调优
  • 终极指南:如何用sguard_limit解决腾讯游戏卡顿问题,释放你的CPU和内存资源
  • 消防安全警示教育展厅设备【消防标识互动体验系统】
  • 老黄掏出超级CPU,ITX有望焕发第二春?
  • Synology-LrcPlugin:群晖Audio Station歌词插件的终极指南
  • NCM音频格式转换实战指南:深度解析ncm文件解密与高效批量转换技术
  • 工业蒸汽预付费管理系统落地方案与技术实现浅析
  • 微信聊天记录永久备份指南:使用WeChatExporter轻松保存珍贵对话
  • 百度网盘提取码3秒智能获取:告别繁琐搜索的全新解决方案
  • 知医邦公开中医查体大模型:184956个Token与核心算法详解
  • 遗传算法深度解析:选择压力、探索开发平衡与适应度设计
  • 端午手工民俗评比,时令主题微信投票在线创建 - 微信投票小程序
  • 消防展厅多媒体互动设备【消防标识连连看】
  • Hadoop程序报错 ‘No FileSystem for scheme hdfs‘?别慌,5分钟搞定core-site.xml配置
  • AI辅助开发:让Kimi等模型在快马平台上智能生成与优化JS质数代码
  • 终极Windows驱动清理指南:DriverStore Explorer完全使用教程
  • 2026年马尔代夫海岛游省钱攻略:高端度假预订渠道排行 - 奔跑123
  • 2026年宁夏KTV模块化装修与老旧KTV翻新改造深度选型指南 - 企业名录优选推荐
  • MusicFree开源插件系统:10分钟打造你的免费跨平台音乐聚合中心
  • MATLAB小波相干分析全功能包:交叉谱+相位差+AR1显著性检验一键运行
  • 2026年加勒比海蓬塔卡纳蜜月预订性价比排行 - 奔跑123
  • 利用快马平台打造codex中转站,三步生成可交互原型验证创意