OLED屏有多种类型,其中的参数屏要比单色屏和双色屏更具色彩表现力,在设计小游戏时,彩色屏将是不错的下载,假如用单色屏来完成俄罗斯方块的话,那就只剩下方块了,相对来讲彩色屏会更具优势。 目前来看,似乎还没见到有I2C接口的彩色屏,因此就只有多牺牲几个I/O口来驱动彩色屏了! 在彩色屏与U CH32V103连接上,其关系如下: CLK--PA2 DIN--PA3 RST--PB3 DC --PB4 CS --PB5 BLK--PB6 定义引脚输出高低电平的语句为: #define OLED_SCLK_Set() GPIO_WriteBit(GPIOA, GPIO_Pin_2,Bit_SET) #define OLED_SCLK_Clr() GPIO_WriteBit(GPIOA, GPIO_Pin_2,Bit_RESET) #define OLED_SDIN_Set() GPIO_WriteBit(GPIOA, GPIO_Pin_3,Bit_SET) #define OLED_SDIN_Clr() GPIO_WriteBit(GPIOA, GPIO_Pin_3,Bit_RESET) #define OLED_RST_Set() GPIO_WriteBit(GPIOB, GPIO_Pin_3,Bit_SET) #define OLED_RST_Clr() GPIO_WriteBit(GPIOB, GPIO_Pin_3,Bit_RESET) #define OLED_DC_Set() GPIO_WriteBit(GPIOB, GPIO_Pin_4,Bit_SET) #define OLED_DC_Clr() GPIO_WriteBit(GPIOB, GPIO_Pin_4,Bit_RESET) #define OLED_CS_Set() GPIO_WriteBit(GPIOB, GPIO_Pin_5,Bit_SET) #define OLED_CS_Clr() GPIO_WriteBit(GPIOB, GPIO_Pin_5,Bit_RESET) #define OLED_BLK_Set() GPIO_WriteBit(GPIOB, GPIO_Pin_6,Bit_SET) #define OLED_BLK_Clr() GPIO_WriteBit(GPIOB, GPIO_Pin_6,Bit_RESET) 相关引脚输出功能的配置函数为: - void App_OledInit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能与LED相关的GPIO端口时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6; //配置GPIO引脚
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置GPIO模式为推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置GPIO口输出速度
- GPIO_Init(GPIOB, &GPIO_InitStructure); //调用库函数,初始化GPIOA
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能与LED相关的GPIO端口时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3; //配置GPIO引脚
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置GPIO模式为推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置GPIO口输出速度
- GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIOA
- GPIO_SetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3); //设置引脚输出高电平
- }
复制代码
图片显示的函数为: - void LCD_ShowPicturea(u16 x1,u16 y1,u16 x2,u16 y2)
- {
- int i;
- LCD_Address_Set(x1,y1,x2,y2);
- for(i=0;i<12800;i++)
- {
- LCD_WR_DATA8(gImage_moled[i*2]);
- LCD_WR_DATA8(gImage_moled[i*2+1]);
- }
- }
复制代码
实现显示效果的主程序为: - int main(void)
- {
- u8 i=0;
- u8 j=0;
- Delay_Init(); //延时函数初始化
- LED_Init(); //LED初始化
- App_OledInit();
- OLED_Init();
- Delay_Ms(200);
- LCD_Clear(BLACK);
- BACK_COLOR=BLACK;
- LCD_ShowString(10,0,"CH32V103 TEST",RED);
- LCD_ShowString(10,20,"OLED Display",RED);
- LCD_ShowString(10,40,"jinglixixi",RED);
- LCD_ShowString(10,60,"2020.10.28",RED);
- Delay_Ms(2000);
- LCD_Clear(BLACK);
- LCD_ShowChinese(28,0,0,32,YELLOW);
- LCD_ShowChinese(60,0,1,32,YELLOW);
- LCD_ShowChinese(92,0,2,32,YELLOW);
- LCD_ShowChinese(20,40,0,16,YELLOW);
- LCD_ShowChinese(36,40,1,16,YELLOW);
- LCD_ShowChinese(52,40,2,16,YELLOW);
- LCD_ShowChinese(68,40,3,16,YELLOW);
- LCD_ShowChinese(84,40,4,16,YELLOW);
- LCD_ShowChinese(100,40,5,16,YELLOW);
- LCD_ShowChinese(116,40,6,16,YELLOW);
- LCD_ShowString(20,60,"0.96 TFT SPI",YELLOW);
- Delay_Ms(2000);
- LCD_Clear(BLACK);
- LCD_ShowString(10,0,"LCD_W:",RED);
- LCD_ShowNum(70,0,LCD_W,3,RED);
- LCD_ShowString(10,20,"LCD_H:",RED);
- LCD_ShowNum(70,20,LCD_H,2,RED);
- for(i=0;i<4;i++)
- {
- LCD_ShowPicture(i*40,40,39+i*40,79);
- }
- Delay_Ms(2000);
- LCD_ShowPicturea(0,0,159,79);
- }
复制代码
经编译,程序对系统资源的占用情况如图1所示。
图1
程序下载后的运行效果见图2~图4所示。 图2~图4 若单显示图片,则系统资源资源情况为: 图5
程序下载后面,其运行效果如图所示。 图6
|