| 
				打卡等级:以坛为家III打卡总天数:657最近打卡:2025-10-31 08:27:32   荣誉版主 
 
	积分4469 
 | 
 
 发表于 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);
 这样源程序比较简洁, 一看就知道, 是在写命令, 没有必要在每次写出一个字节数时, 都带有是命令还是数据的标志参数.
 (这没有对错,仅仅是个人思维和习惯不同)
 
 仅供参考.
 
 | 
 |