本帖最后由 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屏,又不影响程序下载了。
|