- 打卡等级:以坛为家II
- 打卡总天数:494
- 最近打卡:2025-05-02 09:16:59
荣誉版主
- 积分
- 3480
|
发表于 2024-5-31 09:52:25
|
显示全部楼层
试着回复一下这位坛友的提问...
截图给出的是三句写命令字节的函数.意思是一样的,以第一句为例:
OLED_WR_Byte(0xB0+y,OLED_CMD);
这是一个写字节数(Byte)的函数,带有两个参数,
第一个参数是需要写入的一个字节数, 比如0xB0+y,它取值范围是0--0xFF,如果有溢出,则仅保留低8位.
第二个参数是说明前面字节数属于命令还是数据的标志参数. 比如OLED_CMD,说明前面是字节数是命令字.
在执行到OLED_WR_Byte(0xB0+y,OLED_CMD)此语句之前, 肯定是(一定的)有过关于OLED_WR_Byte(...)函数实现给出的.
比如: void OLED_WR_Byte(unsigned char byte, unsigned char md); 之类的.
如果仅仅是在本模块内使用, 那就不需要在头文件中说明, 此后就可以直接使用的.
一般放在头文件中说明的, 是允许被外部模块调用的函数.
另外, 由于各人的逻辑思维有所不同,对于这样的函数写法, 本人是有不同看法的.
所以在本人的实验程序中,已经对此改写,分为两个函数: (可看一下本帖2楼源代码写法)
void OLED_WR_CMD(unsigned char Cmd);
void OLED_WR_DAT(unsigned char Dat);
只带有一个参数, 这样个比较简洁,
因为仅仅是在SS1306.C模块内部使用的函数, 所以不一定要在头文件中说明.
也因为这两个函数写在SS1306.C文件中排列在较前面, 所以后面的函数就可直接调用.
上述截图三句语句, 就可以改成这样写:
OLED_WR_CMD(0xB0+y);
OLED_WR_CMD(0x00);
OLED_WR_CMD(0x10);
这样源程序比较简洁, 一看就知道, 是在写命令, 没有必要在每次写出一个字节数时, 都带有是命令还是数据的标志参数.
(这没有对错,仅仅是个人思维和习惯不同)
仅供参考.
|
|