
(1)实验平台普中 51-Ai8051 开发板https://item.taobao.com/item.htm?abbucket17id1026052331067(2)资料下载 普中科技-各型号产品资料下载链接前面已经使用 IO 口软件模拟 IIC 时序与 OLED 通信实现字符汉字的显示。 本章学习使用 AI8051 的硬件 IIC 接口对 OLED 液晶屏显示控制。 本章分为如下几部分内容30.1 实验介绍30.1.1 实验简介30.1.1.1 AI8051U IIC 介绍30.1.2 实验目的30.2 硬件设计30.3 软件设计30.3.1 创建和配置工程30.3.1.1 GPIO 配置30.3.1.2 配置 I2C30.3.1.3 生成工程30.3.2 添加用户驱动代码30.3.2.1 oled.c 文件30.3.2.2 main.c 文件30.4 实验现象30.1 实验介绍30.1.1 实验简介30.1.1.1 AI8051U IIC 介绍Ai8051U 系列的单片机内部集成了一个 I2C 串行总线控制器。 I2C 是一种高速同步通讯总线 通讯使用 SCL(时钟线)和 SDA数据线 两线进行同步通讯。对于 SCL 和 SDA 的端口分配 Ai8051U 系列的单片机提供了切换模式 可将 SCL和 SDA 切换到不同的 I/O 口上 以方便用户将一组 IC 总线当作多组进行分时复用。 管脚分配如下与标准 I2C 协议相比较 忽略了如下两种机制●发送起始信号(START 后不进行仲裁●时钟信号(SCL 停留在低电平时不进行超时检测Ai8051U 系列的 I2C 总线提供了两种操作模式 主机模式(SCL 为输出口 发送同步时钟信号 和从机模式(SCL 为输入口 接收同步时钟信号)30.1.2 实验目的通过硬件 IIC 通信在 OLED 上显示字符汉字。30.2 硬件设计本实验使用到硬件资源如下1 IIC OLED 液晶2 串口 1相关电路在前面章节已经介绍过 此处省略。30.3 软件设计30.3.1 创建和配置工程按照前面章节内容创建一份新工程 并命名为 27-oled-iic 如下图所示30.3.1.1 GPIO 配置使能端口和时钟 将 UART1 管脚配置为 P30 和 P31 将 I2C 外设管脚设置为P23 和 P24 等。 如下图所示30.3.1.2 配置 I2C在 I2C 的参数设置界面中 可选择主机模式 I2C 时钟分频为 16 等。 如下图所示30.3.1.3 生成工程配置完成后 按下代码生成按钮 自动创建工程 系统开始生成初始化代码。生成工程文件目录如下图所示在工程文件夹内新建一个 APP 文件夹 用于存储用户编写的外设驱动 方便后期工程管理和程序移植。 在 APP 文件夹下新建 oled.c、 oled.h 和 oledfont.h文件 其中 oled.c 和 oled.h 用于存储 OLED 液晶相关驱动 例如 OLED 读写、 画点、 画线、 显示字符汉字等 oledfont.h 用于存储字符汉字字模数据。然后在导出的工程中添加 APP 组 并将 xx.c 导入到工程组内 最后添加头文件路径 否则编译将报错。 如下30.3.2 添加用户驱动代码30.3.2.1 oled.c 文件该文件代码比较多 我们看下使用硬件 I2C 的几个关键时序函数。代码如下void wait(void) { while (!I2C_CheckMasterFlag()); I2C_ClearMasterFlag(); } void iic_start(void) { I2C_Start(); wait(); } void iic_stop(void) { I2C_Stop(); wait(); } void write_data(u8 dat) { I2C_WriteData(dat); I2C_SendData(); wait(); } void iic_wait_ack(void) { I2C_RecvACK(); wait(); }I2C_Start 函数为起始信号、 I2C_Stop 为停止信号、 I2C_WriteData 为写数据 I2C_SendData 为数据发送、 I2C_RecvACK 为接收应答信号 在这些操作后需要通过 I2C_CheckMasterFlag 判断主机状态 并通过 I2C_ClearMasterFlag 清除该标志。30.3.2.2 main.c 文件//AICUBE_USER_HEADER_REMARK_BEGIN /* 深圳市普中科技有限公司PRECHIN 普中 * 在线视频https://space.bilibili.com/2146492485/video 官网www.prechin.cn * 实验名称OLED液晶显示实验-使用硬件IIC * * 接线说明参考电路图 * * 实验现象程序下载成功后OLED液晶显示字符汉字 * * 注意事项 * */ //AICUBE_USER_HEADER_REMARK_END #include config.h //默认已包含stdio.h、intrins.h、ai_usb.h等头文件 //AICUBE_USER_INCLUDE_BEGIN // 在此添加用户头文件包含 #include oled.h //AICUBE_USER_INCLUDE_END //AICUBE_USER_GLOBAL_DEFINE_BEGIN // 在此添加用户全局变量定义、用户宏定义以及函数声明 //AICUBE_USER_GLOBAL_DEFINE_END //////////////////////////////////////// // 项目主函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void main(void) { //AICUBE_USER_MAIN_INITIAL_BEGIN // 在此添加用户主函数初始化代码 //AICUBE_USER_MAIN_INITIAL_END SYS_Init(); printf(Hello World !\n); //AICUBE_USER_MAIN_CODE_BEGIN // 在此添加主函数中运行一次的用户代码 OLED_Init(); OLED_Clear(); OLED_ShowString(0,0,Hello World,12); OLED_ShowString(0,15,Hello World,16); OLED_ShowFontHZ(0,35,0,16,1); OLED_ShowFontHZ(1*16,35,1,16,1); OLED_Refresh_Gram(); //AICUBE_USER_MAIN_CODE_END while (1) { //AICUBE_USER_MAIN_LOOP_BEGIN // 在此添加主函数中用户主循环代码 //AICUBE_USER_MAIN_LOOP_END } }主函数实现的功能很简单 首先调用初始化函数。 然后调用 OLED 显示函数像是字符串和汉字内容。30.4 实验现象将程序编译下载到目标板运行 打开串口助手“\5--开发工具\5-串口调试助手\串口调试助手丁丁 \sscom5.13.1.exe” 实验现象 OLED 上显示字符汉字。