完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
关于SPI
SPI 接口是 Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多 slave 模式应用,一 般仅支持单 Master。 时钟由 Master 控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI 接口有 2 根单向数据线,为全双工通信,目前应用中的数据速率可达几 Mbps 的水平。 屏幕滚动和读取显示AHT20温湿度传感器 1.前期准备 打开源码和接线 单片机实验的第一步当然是接线了 这里我们打开上面链接资料里面下载好的源码 Demo文件夹里面找到Stm32相关部分 这里我选择的是与我板子对应的F103RCT6的4线制SPI模式 打开后可以看到代码里面很清楚的给出了接线怎么接 用母对母杜邦线接好 2.屏幕滚动 通过查阅资料和其他博客,发现滚动的代码如下 void roll_v(void) { OLED_WR_Byte(0x2e,OLED_CMD); OLED_WR_Byte(0x29,OLED_CMD); OLED_WR_Byte(0x00,OLED_CMD); OLED_WR_Byte(0x00,OLED_CMD); OLED_WR_Byte(0x07,OLED_CMD); OLED_WR_Byte(0x07,OLED_CMD); OLED_WR_Byte(0x01,OLED_CMD); OLED_WR_Byte(0x2F,OLED_CMD); } void roll_h(void) { OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动 OLED_WR_Byte(0x26,OLED_CMD); //水平向左或者右滚动 26/27 OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0x00,OLED_CMD); //起始页 0 OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔 OLED_WR_Byte(0x07,OLED_CMD); //终止页 7 OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节 OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动 } 写一个测试函数在main里面循环 void TEST_Menu(void) { GUI_ShowString(0,0,"631707060324",16,1); GUI_ShowCHinese(0,20,16,"肖思睿",1); roll_h(); } 结果如下 读取并显示温湿度 1.字模的提取 上面屏幕滚动的视频里面可以看到我显示了自己的名字和学号 但是如果你试过就会发现 在资料里面下载下来的代码改动后不能直接显示中文 这是因为代码里面没有相关的字模 在嵌入式设备 LCD 上显示的汉字大多数都属于点阵汉字。常用的点阵字库来自 UCDOS。我们可以在程序里面添加对应的字模实现显示 比如这是我添加的 "肖",0x01,0x00,0x21,0x08,0x11,0x10,0x09,0x20,0x01,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08, 0x3F,0xF8,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,0x20,0x08,0x20,0x28,0x20,0x20, "思",0x00,0x00,0x3F,0xF8,0x21,0x10,0x21,0x10,0x3F,0xF8,0x21,0x10,0x21,0x10,0x3F,0xF8, 0x20,0x08,0x01,0x00,0x08,0x88,0x48,0x84,0x48,0x12,0x48,0x12,0x87,0xF0,0x00,0x00, "睿",0x01,0x00,0x01,0xF8,0x01,0x00,0x7F,0xFE,0x40,0x02,0x9F,0xF4,0x09,0x20,0x32,0x90, 0x0C,0x60,0x3F,0xF8,0xD0,0x16,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x00,0x1F,0xF0, 代码的提取可以通过字模提取软件提取 也可以通过计算手动添加(不推荐,虽然我没找到软件就是手动添加的) 比如肖字 第一行就是:0x01,0x00,即:0000 0001 0000 0000 依次类推,就可以得到相关代码 添加到oledfont.h文件里面就可以直接调用了 2.代码实现部分 1.GPIO 要同时实现OLED和AHT20的工作,我们第一个要修改的是GPIO_Init 因为他们所接的引脚不同 OLED.c文件里面的初始化函数 添加AHT20连接的PB6和PB7 void OLED_Init_GPIO(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能B端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_6|GPIO_Pin_7; //GPIOB10,11,12,6,7 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB10、11、12,6,7 GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_6|GPIO_Pin_7); } 2.显示部分 GUI_DrawLine(WIDTH/2-1,10+(HEIGHT-10)/2-1,WIDTH/2-1,HEIGHT-1,1); GUI_DrawLine(0,10+(HEIGHT-10)/2-1,WIDTH-1,10+(HEIGHT-10)/2-1,1); GUI_ShowString(0,1,"631707060324",16,1); GUI_ShowCHinese(0,20,16,"肖思睿",1); GUI_ShowString(0,39,"TEMP",8,1); GUI_DrawCircle(WIDTH/2-1-19, 51, 1,2); GUI_ShowString(WIDTH/2-1-14,46,"C",16,1); GUI_ShowString(WIDTH/2-1+2,39,"hum",8,1); GUI_ShowString(WIDTH/2-1+40,46,"%",16,1); GUI_ShowNum(WIDTH/2-1-50,46,(tem/10),3,16,1); GUI_ShowNum(WIDTH/2-1+5,46,(hum/10),3,16,1); 3.实现效果 可以看到,由于手给温湿度测量带来的变化清晰的显示在了屏幕上。 |
|
|
|
只有小组成员才能发言,加入小组>>
3263 浏览 9 评论
2944 浏览 16 评论
3443 浏览 1 评论
8955 浏览 16 评论
4036 浏览 18 评论
1079浏览 3评论
559浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
552浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2287浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1848浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 18:05 , Processed in 0.845731 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号