搜索

[RISC-V MCU 应用开发] 【RISC-V MCU CH32V103测评】+点亮OLED显示屏

[复制链接]
49|4
 楼主 | 2020-11-19 22:57 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2020-11-19 23:19 编辑

双十一淘宝买了一块OLED显示屏,SSD1315的驱动芯片,128*64分辨率的,I2C总线接口。关于显示屏的信息与驱动程序请查看以下链接,不再重复发

https://bbs.21ic.com/icview-3047528-1-1.html


移植程序很简单,主要是对GPIO的重映射,以及对延时函数的重映射。
第一步:GPIO移植,对使用的两端口针脚设置为开漏输出
  1. void GPIO_OLED_Init(void)
  2. {
  3.   GPIO_InitTypeDef  GPIO_InitStructure;

  4.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  5.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2;
  6.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  7.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  8.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  9. }
复制代码
第二步,对基本的I2C的时钟线与数据线的基础操作重定义
  1. //-----------------OLED端口定义----------------

  2. #define OLED_SCL_Clr() GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET)
  3. #define OLED_SCL_Set() GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET)

  4. #define OLED_SDA_Clr() GPIO_WriteBit(GPIOA,GPIO_Pin_2,Bit_RESET)
  5. #define OLED_SDA_Set() GPIO_WriteBit(GPIOA,GPIO_Pin_2,Bit_SET)
复制代码
第三步,对不兼容的code关键字删除
在oledfont.h文件中定义的字库数组用到的关键字code删除操作,因为编译发现不兼容这个关键字,可使用const关键词修饰。
第四步,重定向delay函数,因为我们使用的新的开发平台默认的debug.h中提供了基于定时器的delay函数,因此需要将oled.c中的delay_ms函数内容改成如下形式,这样就不需要自己实现延时函数的细节了。
void delay_ms(unsigned int ms)
{                        
    Delay_Ms(ms);
}


第五步,将OLED需要的源文件添加到工程里,
3.png
然后刷新工程,在工程单击右键,然后按F5,或者点击刷新菜单。
第六步,写主函数
  1. #include "oled.h"

  2. void GPIO_OLED_Init(void)
  3. {
  4.   GPIO_InitTypeDef  GPIO_InitStructure;

  5.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  6.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2;
  7.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  8.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  9.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  10. }
  11. /*******************************************************************************
  12. * Function Name  : main
  13. * Description    : Main program.
  14. * Input          : None
  15. * Return         : None
  16. *******************************************************************************/
  17. int main(void)
  18. {
  19.     char i=0;
  20.     Delay_Init();
  21.     GPIO_OLED_Init();
  22.     OLED_Init();//初始化OLED
  23.     OLED_ColorTurn(0);//0正常显示,1 反色显示
  24.     OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
  25.     while(1)
  26.     {
  27.         for(i=0;i<8;i++)
  28.         OLED_ShowChinese(i*16,0,i,16);
  29.         //第二行显示  温度:
  30.         OLED_ShowChinese(0,2,8,16);//温
  31.         OLED_ShowChinese(16,2,9,16);//度
  32.         OLED_ShowChinese(32,2,12,16);//:

  33.         //在第二行,第四个字符位置显示36
  34.         OLED_ShowNum(48,2,36,2,16);
  35.         OLED_ShowChar(66,2,'.',16);
  36.         OLED_ShowNum(74,2,16,2,16);

  37.         OLED_ShowChinese(90,2,13,16);//℃
  38.         //在第三行显示字符串
  39.         OLED_ShowString(8,4,"bbs.21ic.com",16);
  40.         //在第4行显示字符串
  41. //  OLED_ShowString(8,6,"gaoyang9992006",16);
  42.         OLED_ShowString(0,6,"0123456789123456",16);
  43.     }
  44. }
复制代码
接下来烧录hex到开发板,记得一定要配置对下载选项。 5.png
烧录后看效果,刚刚的
4.png
一次点亮屏幕,非常棒。看来不管什么单片机,只要可移植能力做好,都是轻松移植的。

使用特权

评论回复
 楼主 | 2020-11-19 23:07 | 显示全部楼层
最后工程打包发来给需要的朋友。 002_GPIO_I2C_OLED.zip (172.16 KB, 下载次数: 3)

使用特权

评论回复
| 2020-11-19 23:22 | 显示全部楼层
讲解的很明白,多谢分享。

使用特权

评论回复
| 2020-11-20 09:09 | 显示全部楼层
春哥给力,,点个赞哦

使用特权

评论回复
 楼主 | 2020-11-20 12:49 | 显示全部楼层
caizhiwei 发表于 2020-11-20 09:09
春哥给力,,点个赞哦

多谢支持,(*^▽^*),(#^.^#)。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /6 下一条

在线客服 快速回复 返回顶部 返回列表