华丽的什么| 锦鲤是什么鱼| 单脐动脉对胎儿有什么影响| 大难不死的生肖是什么| 梦见闹离婚是什么意思| earth是什么意思| 职别是什么意思| 哮喘咳嗽吃什么药好得快| 阵雨是什么意思| 霜打的茄子什么意思| 琮字五行属什么| 肌腱炎是什么症状| 麻是什么植物| 小猫的耳朵像什么| 小孩咳嗽吃什么药好| 喜欢喝冰水是什么原因| 生理期喝什么| 63年属什么生肖| 难怪是什么意思| 多走路有什么好处| 祛火喝什么茶| 没吃多少东西但肚子很胀是什么| 梦到父母离婚是什么意思| 胃肠功能紊乱是什么意思| 职位是什么意思| 一什么椅子| 热伤风是什么意思| 溺爱的意思是什么| 嬴姓赵氏是什么意思| 脚掉皮是什么原因| 心理咨询挂什么科| 松字五行属什么| classy是什么意思| 2000年属什么| 每天吃一个西红柿有什么好处| 孕妇放屁多是什么原因| 7月17号什么星座| 烟花三月下扬州什么意思| 10086查话费发什么短信| 德国什么东西值得买| 咳嗽应该挂什么科| 双重性格是什么意思| 具备是什么意思| 7月14日什么星座| 虾滑可以做什么菜| 吃什么最容易消化| 独白什么意思| 品学兼优是什么意思| 贫血打什么针效果最好| 呼吸困难气短是什么原因| 猪肝和什么菜搭配吃好| 甲状腺4级是什么意思| 为什么会有台风| 性激素六项什么时候查最准确| na医学上是什么意思| 非诚勿扰是什么意思| b长什么样| 骶椎隐裂是什么意思| 大便有点绿色是什么原因| 大殓是什么意思| 一般什么人容易得甲亢| 第一胎打掉会有什么影响| 忽然流鼻血是什么原因引起的| 月经不来又没怀孕是什么原因| 67是什么意思| 突兀什么意思| 手指甲变薄是什么原因| 反流性食管炎吃什么食物好| 为什么一喝牛奶就拉肚子| 梦见猫咬我是什么意思| 葛优躺是什么意思| 四大美女是什么生肖| 尿比重1.030是什么意思| 碳水化合物指的是什么| 久站腰疼是什么原因| 气川读什么| 吃生蚝有什么好处和坏处| hip是什么意思| 微量元素挂什么科| 消肿用什么药| 七情六欲是什么意思| 梦见鞋子是什么意思| 冲奶粉用什么水比较好| 甲状腺五类是什么意思| 害怕的反义词是什么| 梦见栽树是什么意思| 吃什么皮肤变白| 今天是什么日子老黄历| 赡养是什么意思| 为什么头皮总是很痒| 今年77岁属什么生肖| 桃花什么时候开放| b12是什么| 1870年是什么朝代| 军校毕业是什么军衔| 冠脉硬化什么意思| 落魄是什么意思| 暇步士属于什么档次| t代表什么| 全组副鼻窦炎什么意思| 孩子手脚冰凉是什么原因| 睾丸为什么会痛| 牛剖层皮革是什么意思| 作风问题的核心是什么| 二龙戏珠是什么意思| 什么是低烧| 膝关节退行性变是什么意思| 清点是什么意思| 童瑶为什么要告黄定宇| 抗缪勒氏管激素是检查什么的| 苦瓜为什么是苦的| 牙龈发炎是什么原因| 打虫药什么时候吃合适| 劳改犯是什么意思| rm什么意思| 女人绝经是什么症状| 木是什么生肖| 薄荷有什么功效| 什么不能带上高铁| 吸尘器什么牌子好| 清真食品是什么意思| 张艺兴为什么不退出exo| 猛吸气胸口疼什么原因| 尿潜血弱阳性是什么意思| 女性肛裂要抹什么药好| 缅甸的首都叫什么名字| 为什么你| 油性记号笔用什么能擦掉| 水滴鱼长什么样子| 交配是什么意思| 谷雨是什么季节| 鸡吃什么长得又快又肥| 梦见打井是什么意思| 孟子是什么时期的人| 四两拨千斤是什么意思| 山东人为什么那么高| 1964年什么命| 为什么干红那么难喝| 胰岛素是什么| 胆红素是什么意思| 东成西就是什么生肖| 什么的友谊| mi是什么单位| 膝盖肿胀是什么原因| 春天什么花开| guess是什么意思| 青鹏软膏主要治疗什么| 鸡精和鸡粉有什么区别| 板蓝根长什么样| 转氨酶高吃什么| 前置胎盘是什么意思| 精卫填海是什么意思| 维生素b2是什么颜色| 三险一金是什么| 浸润性癌是什么意思| 十指不沾阳春水什么意思| 吃饭时头晕是什么原因| 减肥用什么好| 男人吃秋葵有什么好处| 中暑不能吃什么| 男性经常手淫有什么危害| 吃什么治白头发| 人间蒸发是什么意思| 亚甲减是什么意思| 调味茶和茶有什么区别| 女性尿路感染吃什么药| 莺是什么鸟| 红和绿混合是什么颜色| 出差什么意思| 远水解不了近渴什么意思| 常吃洋葱有什么好处| 胎儿左心室灶状强回声是什么意思| 膀胱癌早期是什么症状| 打喷嚏是什么预兆| 节律是什么意思| 什么淀粉最好| 事半功倍是什么意思| 安宫牛黄丸什么时候吃最好| 凶宅是什么意思| 什么手机拍照好看| lm是什么意思| 市长什么级别| 午时右眼跳是什么预兆| 变异性哮喘咳嗽吃什么药| 湿疹是什么原因造成的| 皲裂是什么意思| 口子念什么| 二十二岁属什么| 肛门出血用什么药| 8月27号是什么星座| 脑梗会有什么后遗症| 睾丸积液是什么原因造成的| 豆腐有什么营养| 继发性高血压什么意思| 粉头是什么意思| 血脂高有什么症状表现| 冷暖自知上一句是什么| 瞑眩反应是什么意思| 痛风吃什么中药最有效| 没有排卵是什么原因| 孩子呼吸道感染吃什么药效果最好| 卵巢多囊是什么意思| 四月十八是什么星座| 乳腺应该挂什么科| 年轻人长老年斑是什么原因| 天生丽质什么意思| 冲任失调是什么意思| 婆婆是什么意思| 反流性食管炎吃什么药好| 唐氏筛查都查些什么| 无骨鱼是什么鱼| rr过低是什么意思| 橄榄油什么牌子最好| 低蛋白血症是什么病| 张学友属什么生肖| 西京医院什么科室最强| 吃香菜有什么好处| 白带发黄是什么原因| 玉树临风什么意思| 吃什么补肾最快最有效| 肺癌积水意味什么结果| 氢什么意思| 尿肌酐低说明什么| 3月8日是什么星座| 什么的麦子| 精索静脉曲张有什么症状| 闺蜜是什么| 夫复何求是什么意思| 姑姐是什么意思| 8月24是什么星座| 吃什么补维生素b12| 骨加客读什么| 怀孕一个月出血是什么情况| 酒后吃什么解酒最快| 趣味是什么意思| 什么充电宝能带上飞机| 剪发虫是什么| 走读是什么意思| 多囊性改变是什么意思| 男戴观音女戴佛是什么意思| 喝什么缓解痛经最有效| 虾仁可以炒什么菜| 扁桃体看什么科室| 支气管炎咳嗽吃什么药好得快| 莫名其妙的名是什么意思| 医保什么时候到账| 孩子发烧按摩什么部位退烧| 心慌是什么病| 三观不正是什么意思| 唇炎属于什么科| 甲鱼跟什么炖最补| 伛偻是什么意思| 韩束属于什么档次| 口干口苦吃什么中成药| 红薯用什么繁殖| 茉莉花有什么功效| 巧克力囊肿是什么| 雷声什么| 取什么网名好听| 中字五行属什么| 无花果有什么功效| 什么是缓刑意思是什么| 三月初九是什么星座| 手心出汗是什么原因| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 企业专区 ? Renesas ? 瑞萨RA0单片机连载之六——OLED面向对象显示字符串

共10条 1/1 1 跳转至

瑞萨RA0单片机连载之六——OLED面向对象显示字符串

工程师
2025-08-05 20:04:51     打赏
百度 马思纯和周冬雨  俩人的闺蜜情可以说好的让人羡慕了,私下的画风也是随便怼来怼去。

在前一篇我们驱动了OLED,这一篇将重构显示buff、全屏更新OLED显存。并添加显示字符串功能。

1、拷贝一个字符文件到工程中:

image.png

2、新建一个结构体,用于显示与命令的存放:

static struct OLED_all_buff_t{
	uint8_t cmd;
	uint8_t data[1024]; //显存
} OLED_all_buff;

3、修改向OLED写入整个显存的函数如下:

static void OLED_Display(struct DisplayDevice* ptDev)
{

	OLED_all_buff.cmd = 0x40;  //写数据
	//以下为修改为页寻址模式
	OLEDDrvWriteReg(0x20);  
	OLEDDrvWriteReg(0x00);
	OLEDDrvWriteReg(0x21);
	OLEDDrvWriteReg(0x00);
	OLEDDrvWriteReg(127);
	OLEDDrvWriteReg(0x22);
	OLEDDrvWriteReg(0x00);
	OLEDDrvWriteReg(7);
	//向OLED写入整屏
	R_SAU_I2C_Write(&g_sau_i2c_master_ctrl, &OLED_all_buff, 1025, true);
	//等待发送结束
	I2C1WaitTxCplt();
}

4、修改画点的函数,将画点修改为向显示缓存修改数据:

static int OLEDDrvSetPixel(struct DisplayDevice* ptDev, unsigned short wX, unsigned short wY, unsigned short wColor)
{
    if(NULL == ptDev->name)    return -1;

    unsigned char *buf = ptDev->FBBase;
    int page;
    unsigned char *byte;
    int bit;

    if (wX >= ptDev->wXres || wY >= ptDev->wYres)
        return -1;
		if(wColor) {
		buf[(wY/8)*128+wX]|= (1<<(wY%8))&0xff;
		} else {
			buf[(wY/8)*128+wX]&= ~((1<<(wY%8))&0xff);
		}
}

5、添加字符显示函数:

static void OLED_ShowChar(struct DisplayDevice* ptDev,uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size,uint8_t mode) {
	if(NULL == ptDev->name)    return;
    unsigned char c=0,i=0,tmp,j=0;
    c=chr-' ';//转换为字库里的序号
    if(x>ptDev->wXres-1){x=0;y=y+2;}
    if(Char_Size ==16) {
        for(i=0;i<16;i++) {
          if(mode) {
                tmp = F8X16[c*16+i];
            } else {
                tmp = ~(F8X16[c*16+i]);
            }
            for(j=0;j<8;j++) {
                if(tmp&(0x80>>j)) {
                    ptDev->SetPixel(ptDev,x+j, y+i,1);
                } else {
                     ptDev->SetPixel(ptDev,x+j, y+i,0);
                }
            }
        }
    } else if(Char_Size==8) {
        for(i=0;i<8;i++) {
            if(mode) {
                tmp = F6x8[c][i];
            } else {
                tmp = ~(F6x8[c][i]);
            }
            for(j=0;j<8;j++) {
                if(tmp&(0x80>>j)) {
                     ptDev->SetPixel(ptDev,x+j, y+i,1);
                } else {
                     ptDev->SetPixel(ptDev,x+j, y+i,0);
                }
            }
        }
	} else {
		return;
	}
}

6、添加显示字符串的函数如下:

static void OLED_ShowString(struct DisplayDevice* ptDev,uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size,uint8_t mode) {
	unsigned char j=0,csize;
	if(Char_Size == 16) {
        csize = Char_Size/2;
	} else if(Char_Size == 8) {
        csize = Char_Size/2+2;
	} else {
		return;
	}

	while (chr[j]!='\0') {
		OLED_ShowChar(ptDev,x,y,chr[j],Char_Size,mode);
		x+=csize;
		if(x>120) {
			x=0;
			y+=Char_Size;
		}
		j++;
	}
	//OLED_Display();
}


7、将上面的函数更新到LCD驱动里面,

static DisplayDevice gOledDev = {
                             .name = "OLED",
                             .FBBase = OLED_all_buff.data,
                             .wXres = 128,
                             .wYres = 64,
                             .wBpp = 1,
                             .dwSize = 128*64*1/8,
                             .Init = OLEDDrvinit,
                             .DisplayON = OLEDDrvDispON,
                             .DisplayOFF = OLEDDrvDispOFF,
                             .SetDisplayWindow = OLEDDrvSetDispWindow,
                             .SetPixel = OLEDDrvSetPixel,
	                     .GUI_DrawPoint = OLED_DrawPoint, //画点
	                     .GUI_ShowChar = OLED_ShowChar,   //画字符
	                     .GUI_ShowString = OLED_ShowString, //显示字符串
	                     .GUI_Display = OLED_Display,       //更新显存
};

8、这样,我们在主函数里实例化OLED对象,就可以用他的方法来显示字符或者字符串了,在主函数中加入测试函数如下:

void led_blink(void)
{
	uint32_t cnt;
	UartDevicesRegister();

	DisplayDevice *ptDispDev = OLEDGetDevice();
    if(ptDispDev == NULL)
    {
        printf("Failed to get OLED Display Device!\r\n");
        return;
    }

    ptDispDev->Init(ptDispDev);
	while(1)
	{
           ptDispDev->GUI_Fill(ptDispDev,0); //清理显存
	   ptDispDev->GUI_ShowString(ptDispDev,0,0, (uint8_t *)"HELLO WORLD",16,1);  //显示字符串
	   ptDispDev->GUI_ShowString(ptDispDev,10,16, (uint8_t *)"HELLO EEPW",16,1);
	   ptDispDev->GUI_Display(ptDispDev);  //刷新数据到OLED
	   HAL_Delay(2);
		
	}
}

【实现效果】

image.png

【总结】

对于面向象对象的编程,我们可以方便的实现模块化的编程。方便在不同的MCU之间的移植。





关键词: 刘工爱评测之瑞萨RA0单片机     OLED    

院士
2025-08-05 21:31:22     打赏
2楼

谢谢楼主的分享~!


高工
2025-08-05 04:29:58     打赏
3楼

感谢分享


专家
2025-08-05 09:01:34     打赏
4楼

感谢分享


专家
2025-08-05 09:11:17     打赏
5楼

感谢楼主分享


专家
2025-08-05 10:34:03     打赏
6楼

谢谢分享!


高工
2025-08-05 14:39:55     打赏
7楼

谢谢


专家
2025-08-05 16:48:19     打赏
8楼

谢谢


专家
2025-08-05 17:03:27     打赏
9楼

谢谢分享


专家
2025-08-05 16:30:12     打赏
10楼

感谢大佬


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
抬头纹用什么护肤品可以去除 advil是什么药 什么是地震 水晶为什么要消磁 中秋节适合吃什么菜
十二月十四日是什么星座 捆绑是什么意思 金骏眉属于什么茶类 姓贾的男孩取什么名字好 头发稀少是什么原因导致的
戍是什么意思 氨基酸的作用是什么 粘米粉可以做什么好吃的 甘油三酯高是什么意思 输卵管堵塞什么症状
右耳朵疼是什么原因 白虎关是什么意思 网织红细胞高说明什么 英短蓝猫吃什么猫粮好 尿毒症的尿是什么颜色
心慌气短吃什么药最好hcv8jop3ns5r.cn 空调睡眠模式是什么意思hcv7jop9ns5r.cn 来月经不能吃什么水果hcv9jop6ns8r.cn 碧池是什么意思hcv8jop2ns9r.cn 白眼狼什么意思hcv7jop9ns9r.cn
红斑狼疮是什么原因引起的hcv9jop1ns2r.cn 肝病挂什么科jiuxinfghf.com 为什么医生说直肠炎不用吃药hcv8jop7ns7r.cn 宝批龙是什么意思beikeqingting.com 什么是格林巴利综合症hcv9jop2ns3r.cn
哈密瓜为什么叫哈密瓜hcv7jop4ns6r.cn 自闭症是什么原因引起hcv8jop1ns6r.cn x片和ct有什么区别xscnpatent.com 红眼病不能吃什么东西hcv8jop0ns6r.cn 二月是什么星座hcv8jop8ns0r.cn
月全食是什么意思hcv8jop2ns8r.cn 绿萝叶子发黄是什么原因hcv8jop7ns0r.cn 什么是指标生hcv7jop4ns6r.cn 一物降一物前面一句是什么96micro.com 元辰是什么意思hcv8jop1ns8r.cn
百度