本帖最后由 jinglixixi 于 2022-7-14 14:27 编辑
在驱动OLED屏之前,为了掌握GPIO口的使用,以LED和KEY进行了测试验证。 测试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)选取主程序,并按如下内容加以修改。 - #include "mcc_generated_files/system/system.h"
- /*
- Main application
- */
- int main(void)
- {
- SYSTEM_Initialize();
- while(1)
- {
- LED0_Toggle();
- LED1_Toggle();
- __delay_ms(500);
- }
- }
9)对程序加以编译和下载,则外部的LED模块被点亮,见图7所示。 这样,就完成了对GPIO口的输出功能测试。 图7 测试效果 10)使用MCC按图8来配置引脚,并按图9对引脚加以命名。 图8 引脚配置 图9 引脚命名 11)对主程序按如下内容加以修改 - int main(void)
- {
- KEY_SetDigitalInput();
- while(1)
- {
- if(KEY_GetValue()==0)
- LED0_SetHigh();
- else
- LED0_SetLow();
- __delay_ms(500);
- }
- }
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屏初始化函数: - void OLED_Init(void)
- {
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- __delay_ms(800);
- OLED_WR_Byte(0xAE,OLED_CMD);
- OLED_WR_Byte(0x02,OLED_CMD);
- OLED_WR_Byte(0x10,OLED_CMD);
- OLED_WR_Byte(0x40,OLED_CMD);
- OLED_WR_Byte(0x81,OLED_CMD);
- OLED_WR_Byte(0xff,OLED_CMD);
- OLED_WR_Byte(0xA1,OLED_CMD);
- OLED_WR_Byte(0xC8,OLED_CMD);
- OLED_WR_Byte(0xA6,OLED_CMD);
- OLED_WR_Byte(0xA8,OLED_CMD);
- OLED_WR_Byte(0x3f,OLED_CMD);
- OLED_WR_Byte(0xD3,OLED_CMD);
- OLED_WR_Byte(0x00,OLED_CMD);
- OLED_WR_Byte(0xd5,OLED_CMD);
- OLED_WR_Byte(0x80,OLED_CMD);
- OLED_WR_Byte(0xD9,OLED_CMD);
- OLED_WR_Byte(0xF1,OLED_CMD);
- OLED_WR_Byte(0xDA,OLED_CMD);
- OLED_WR_Byte(0x12,OLED_CMD);
- OLED_WR_Byte(0xDB,OLED_CMD);
- OLED_WR_Byte(0x40,OLED_CMD);
- OLED_WR_Byte(0x20,OLED_CMD);
- OLED_WR_Byte(0x02,OLED_CMD);
- OLED_WR_Byte(0x8D,OLED_CMD);
- OLED_WR_Byte(0x14,OLED_CMD);
- OLED_WR_Byte(0xA4,OLED_CMD);
- OLED_WR_Byte(0xA6,OLED_CMD);
- OLED_WR_Byte(0xAF,OLED_CMD);
- OLED_WR_Byte(0xAF,OLED_CMD);
- }
OLED清屏函数: - void OLED_Clear(void)
- {
- uint8_t i,n;
- for(i=0;i<8;i++)
- {
- OLED_WR_Byte(0xb0+i,OLED_CMD);
- OLED_WR_Byte(0x00,OLED_CMD);
- OLED_WR_Byte(0x10,OLED_CMD);
- for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
- }
- }
OLED屏字符串显示函数: - void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
- {
- while(*p!='\0')
- {
- if(x>LCD_W-16)
- {
- x=0;
- y+=16;
- }
- if(y>LCD_H-16)
- {
- y=x=0;
- LCD_Clear(RED);
- }
- LCD_ShowChar(x,y,*p,0,color);
- x+=8;
- p++;
- }
- }
6)对主程序按如下内容加以修改 - int main(void)
- {
- SYSTEM_Initialize();
- LED_SetHigh();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"PIC18F57Q43 TEST",16);
- OLED_ShowString(0,2,"OLED Display",16);
- while(1)
- {
- LED0_Toggle();
- __delay_ms(500);
- }
- }
7)对程序加以编译和下载,则OLED屏的显示效果如图13所示。 图13 显示效果
值得指出的是:在开发板与OLED屏连接的情况下,若进行程序下载会导致下载设备。为此,将OLED屏的VCC电源引脚接到PA4上来供电,这样就既能点亮OLED屏,又不影响程序下载了。
|