2468|0

207

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【GD32L233C-START评测】0.96inch oled屏幕驱动 [复制链接]

本帖最后由 YangTwo 于 2022-3-13 10:41 编辑

本次实验继续利用GD32L233C的外设库函数驱动GPIO引脚来实现OLED屏幕的读写。手边有一块OLED 12864屏幕:

 

我们采用GPIO模拟SPI协议来控制OLED屏幕。首先定义GPIO A1,A2, A3, A4 A5对应OLED屏幕的SCL, SDA, RES, DC, CS引脚

#define OLED_SCL_Clr() gpio_bit_reset(GPIOA, GPIO_PIN_1)     
#define OLED_SCL_Set() gpio_bit_set(GPIOA, GPIO_PIN_1)		

#define OLED_SDA_Clr() gpio_bit_reset(GPIOA, GPIO_PIN_2)     
#define OLED_SDA_Set() gpio_bit_set(GPIOA, GPIO_PIN_2)   	

#define OLED_RES_Clr() gpio_bit_reset(GPIOA, GPIO_PIN_3)     
#define OLED_RES_Set() gpio_bit_set(GPIOA, GPIO_PIN_3)   	

#define OLED_DC_Clr()  gpio_bit_reset(GPIOA, GPIO_PIN_4)      
#define OLED_DC_Set()  gpio_bit_set(GPIOA, GPIO_PIN_4)       
 		     
#define OLED_CS_Clr()  gpio_bit_reset(GPIOA, GPIO_PIN_5)  
#define OLED_CS_Set()  gpio_bit_set(GPIOA, GPIO_PIN_5)   	

 

然后设置引脚为输出模式:

    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7 | GPIO_PIN_8);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_7 | GPIO_PIN_8);

 

简单的写了一个小球弹跳的例子:

while(1){
             //Draw the Ball based on current parameters
             
             //OLED_Clear();
             My_OLED_Clear();
             /***/
             OLED_DrawCircle(x_pos, y_pos, CircleRadius);
             OLED_DrawCircle(127 - x_pos, 63 - y_pos, CircleRadius);
             OLED_DrawCircle(127 - x_pos, y_pos, CircleRadius);
             OLED_DrawCircle(x_pos, 63 - y_pos, CircleRadius);
             
             OLED_ShowPicture(40,7,50,50,SuperSpaceMan[(index%8)],1);             
             //OLED_ShowPicture(40,7,50,50,MySuperSpaceMan[(index%49)],1);
             index++;
             
             OLED_Refresh();
             
            //Circle Ball Moving State Machine Details:
            switch(CircleDir){
                case UpRight:
                    x_pos++; y_pos--;
                    if((y_pos == CircleRadius) && (x_pos == 127 - CircleRadius)){
                        CircleDir = BottomLeft;
                    }else if(y_pos == CircleRadius){
                        CircleDir = BottomRight;
                    }else if(x_pos == 127 - CircleRadius){
                        CircleDir = UpLeft;
                    }
                    break;
                case UpLeft:
                    x_pos--; y_pos--;
                    if((y_pos == CircleRadius) && (x_pos == CircleRadius)){
                        CircleDir = BottomRight;
                    }else if(y_pos == CircleRadius){
                        CircleDir = BottomLeft;
                    }else if(x_pos == CircleRadius){
                        CircleDir = UpRight;
                    }
                    break;
                case BottomRight:
                    x_pos++; y_pos++;
                    if((x_pos == 127 - CircleRadius) && (y_pos == 63 - CircleRadius)){
                        CircleDir = UpLeft;
                    }else if(x_pos == 127 - CircleRadius){
                        CircleDir = BottomLeft;  
                    }else if(y_pos == 63 - CircleRadius){
                        CircleDir = UpRight;
                    }
                    break;
                case BottomLeft:
                    x_pos--; y_pos++;
                    if((x_pos == CircleRadius)&&(y_pos == 63-CircleRadius)){
                        CircleDir = UpRight;
                    }else if(x_pos == CircleRadius){
                        CircleDir = BottomRight;
                    }else if(y_pos == 63 - CircleRadius){
                        CircleDir = UpLeft;
                    }
                    break;
                default:
                    break;
            }// end of switch case
         }

最后的效果:


使用库函数开发GD32L233C非常的方便,后续看看在屏幕上显示些有意义的内容

此帖出自GD32 MCU论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表