[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】OLED屏显示驱动的实现

[复制链接]
2839|2
 楼主| jinglixixi 发表于 2022-7-14 14:23 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2022-7-14 14:27 编辑

在驱动OLED屏之前,为了掌握GPIO口的使用,以LEDKEY进行了测试验证。
测试GPIO口用法具体的步骤如下:
1)打开MPLAB X IDE v6.00,然后创建一个新项目工程。
2)按图1所示选取工程类型,并点击“Next”。
1  选取工程类型
3)按图2所示选取芯片型号及调试工具,并点击“Next”。
2  选取芯片型号及调试工具
4)按图3所示选取编译器,并点击“Next”。
3  选取编译器
5)按图4所示指定项目名称及存放路径,然后点击“Finish”完成项目工程的创建。
4  完成项目创建
6)打开MCC,然后按图5所示来配置引脚,并按图6所示来为配置引脚命名。
5  引脚配置
6  引脚命名
7)按“Generate”按键,以生成程序框架。

8)选取主程序,并按如下内容加以修改。
  1. #include "mcc_generated_files/system/system.h"
  2. /*
  3.     Main application
  4. */

  5. int main(void)
  6. {
  7.     SYSTEM_Initialize();
  8.     while(1)
  9.     {
  10.         LED0_Toggle();
  11.         LED1_Toggle();
  12.         __delay_ms(500);
  13.     }
  14. }

9)对程序加以编译和下载,则外部的LED模块被点亮,见图7所示。
这样,就完成了对GPIO口的输出功能测试。
7  测试效果
10)使用MCC按图8来配置引脚,并按图9对引脚加以命名。
8  引脚配置
9  引脚命名
11)对主程序按如下内容加以修改
  1. int main(void)
  2. {
  3.     KEY_SetDigitalInput();
  4.     while(1)
  5.     {
  6.         if(KEY_GetValue()==0)
  7.         LED0_SetHigh();
  8.         else
  9.         LED0_SetLow();
  10.         __delay_ms(500);
  11.     }
  12. }

12)对程序加以编译和下载,则使用外部的按键模块就可控制板载的LED0灯灭,见图10所示。
10  测试效果
至此,就完成了对GPIO口的输入功能测试。

掌握了GPIO口的使用,再驱动OLED屏的显示就方便许多。
驱动OLED屏的具体步骤如下:

1)使用MCC按图11来配置引脚,并按图12对引脚加以命名。
11 配置引脚
12引脚命名
2)使用MCC按图11来配置引脚,并按图12对引脚加以命名。
3)添加定义语句
#define OLED_SCLK_Set()  SCL_SetHigh()
#define OLED_SCLK_Clr()  SCL_SetLow()
#define OLED_SDIN_Set()  SDA_SetHigh()
#define OLED_SDIN_Clr()  SDA_SetLow()
4)添加字库头文件
#include "oledfont.h"
5)添加相应的功能函数
OLED屏初始化函数:
  1. void OLED_Init(void)
  2. {
  3.     OLED_SCLK_Set();
  4.     OLED_SDIN_Set();
  5.     __delay_ms(800);
  6.     OLED_WR_Byte(0xAE,OLED_CMD);
  7.     OLED_WR_Byte(0x02,OLED_CMD);
  8.     OLED_WR_Byte(0x10,OLED_CMD);
  9.     OLED_WR_Byte(0x40,OLED_CMD);
  10.     OLED_WR_Byte(0x81,OLED_CMD);
  11.     OLED_WR_Byte(0xff,OLED_CMD);
  12.     OLED_WR_Byte(0xA1,OLED_CMD);
  13.     OLED_WR_Byte(0xC8,OLED_CMD);
  14.     OLED_WR_Byte(0xA6,OLED_CMD);
  15.     OLED_WR_Byte(0xA8,OLED_CMD);
  16.     OLED_WR_Byte(0x3f,OLED_CMD);
  17.     OLED_WR_Byte(0xD3,OLED_CMD);
  18.     OLED_WR_Byte(0x00,OLED_CMD);
  19.     OLED_WR_Byte(0xd5,OLED_CMD);
  20.     OLED_WR_Byte(0x80,OLED_CMD);
  21.     OLED_WR_Byte(0xD9,OLED_CMD);
  22.     OLED_WR_Byte(0xF1,OLED_CMD);
  23.     OLED_WR_Byte(0xDA,OLED_CMD);
  24.     OLED_WR_Byte(0x12,OLED_CMD);
  25.     OLED_WR_Byte(0xDB,OLED_CMD);
  26.     OLED_WR_Byte(0x40,OLED_CMD);
  27.     OLED_WR_Byte(0x20,OLED_CMD);
  28.     OLED_WR_Byte(0x02,OLED_CMD);
  29.     OLED_WR_Byte(0x8D,OLED_CMD);
  30.     OLED_WR_Byte(0x14,OLED_CMD);
  31.     OLED_WR_Byte(0xA4,OLED_CMD);
  32.     OLED_WR_Byte(0xA6,OLED_CMD);
  33.     OLED_WR_Byte(0xAF,OLED_CMD);
  34.     OLED_WR_Byte(0xAF,OLED_CMD);
  35. }

OLED清屏函数:
  1. void OLED_Clear(void)
  2. {
  3.          uint8_t i,n;
  4.          for(i=0;i<8;i++)
  5.          {
  6.                    OLED_WR_Byte(0xb0+i,OLED_CMD);
  7.                    OLED_WR_Byte(0x00,OLED_CMD);
  8.                    OLED_WR_Byte(0x10,OLED_CMD);
  9.                    for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
  10.          }
  11. }

OLED屏字符串显示函数:
  1. void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
  2. {
  3.     while(*p!='\0')
  4.    {
  5.         if(x>LCD_W-16)
  6.         {
  7.             x=0;
  8.             y+=16;
  9.         }
  10.         if(y>LCD_H-16)
  11.        {
  12.            y=x=0;
  13.            LCD_Clear(RED);
  14.        }
  15.        LCD_ShowChar(x,y,*p,0,color);
  16.        x+=8;
  17.        p++;
  18.     }
  19. }

6)对主程序按如下内容加以修改
  1. int main(void)
  2. {
  3.     SYSTEM_Initialize();
  4.     LED_SetHigh();
  5.     OLED_Init();
  6.     OLED_Clear();
  7.     OLED_ShowString(0,0,"PIC18F57Q43 TEST",16);
  8.     OLED_ShowString(0,2,"OLED Display",16);
  9.     while(1)
  10.     {
  11.         LED0_Toggle();
  12.         __delay_ms(500);
  13.     }
  14. }

7)对程序加以编译和下载,则OLED屏的显示效果如图13所示。
13 显示效果

值得指出的是:在开发板与OLED屏连接的情况下,若进行程序下载会导致下载设备。为此,将OLED屏的VCC电源引脚接到PA4上来供电,这样就既能点亮OLED屏,又不影响程序下载了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
huquanz711 发表于 2022-7-15 07:59 来自手机 | 显示全部楼层
这个板子果然小巧精致啊
 楼主| jinglixixi 发表于 2022-7-15 13:32 | 显示全部楼层
huquanz711 发表于 2022-7-15 07:59
这个板子果然小巧精致啊

哈哈,是啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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