Ai32驱动12864显示网络天气学习记录
本帖最后由 DebugLab 于 2024-11-27 13:36 编辑都说站在巨人的肩上看得远,我们也来个移植。
就用下面这个版主的IIC驱动OLED12864代码
版主用的是硬件iic切记不是模拟的
1.接屏幕
用的是官方送的9.62试验箱屏幕是iic通信的
看试验箱图纸选择 2.42.5 管脚做iic时钟信号线 实验箱上都标注这哪 没有的 直接接2.4到2.5 管脚就可以了
没用实验箱这边的 I2C/SPI 接口
2.接线,下载程序
一次就亮,版主代码真给力。。。
下面开始解读代码。。。。
3.main解读
#defineDELAY_TIME 2000
delay_ms(DELAY_TIME); //延时
上边这是一对 控制延时时间相加延时改动 2000 即可
4.main解读
标注的比较清楚我们只用到了字符和汉字显示其他的全部删除
////-----------------------------------------显示字符-----------------------------------------
// OLED_BuffClear(); //清除全部缓存
// OLED_BuffShowString(0,0,"HEELO ,WELCOME TO USE STC32&OLED12864!",0); //显示数据
// OLED_BuffShow(); //将缓存写入显示屏显示
// delay_ms(DELAY_TIME); //延时
////-----------------------------------------显示汉字-----------------------------------------
// OLED_BuffClear(); //清除全部缓存
// OLED_BuffShowString(0,0,"你好,欢迎使用STC 驱\xfd动OLED12864的历程",0); //显示数据
// OLED_BuffShow(); //将缓存写入显示屏显示
// delay_ms(DELAY_TIME); //延时
5.main解读
主要显示函数如下 回到定义处查看
OLED_BuffShowString(); //显示数据
OLED_BuffShowChar32(); //显示数字1
6.main函数解读
先来看这个
void OLED_BuffShowString(unsigned char x,unsigned char y,char *s,u8 mode)
{
char s_num;
while(*s != '\0') //字符串不为空,循环
{
if ((unsigned char)*s < 0x80) //根据输入数据的大小判断是字符还是汉字,
{
OLED_BuffShowChar(x,y,*s,mode);
x+=8;
s++;
}
else
{
s_num = *s ;
s_num = *(s+1) ;
OLED_BuffShowGBK(x,y,s_num,mode);
x+=16;
s+=2;
}
if(x>127)
{
x=0;
y+=2;
}
}
}void OLED_BuffShowString(unsigned char x,unsigned char y,char *s,u8 mode)主要看这里
unsigned char x:x轴的坐标
unsigned char y :y轴的坐标
char *s :传入的显示字符指针一般都是字符串名字
u8 mode :模式 没用到盲猜正反显
7.main函数解读
再来看这个控制单个数字显示或字母
void OLED_BuffShowChar32(unsigned charx,unsigned chary,u8 num, u8 mode)
{
unsigned char j,k;
for( j=0;j<4;j++ )
{
for( k=0;k<16;k++ )
{
if( mode==0 )
ShowBUFF=lib_num1632;
else
ShowBUFF=~lib_num1632;
}
}
}
unsigned char x:同上
unsigned char y:同上
u8 num:8位的值
u8 mode:模式同上
本帖最后由 zhange 于 2024-5-25 08:19 编辑
8.改动代码测试
已经知道了这两个现实函数,我们改动下
先定义个字符串
unsigned char hanzi[]=
{
"欢迎使用"
};
引用测试看了下数字的引用直接改成自己喜欢的数字即可备注是原来的我没改其实显示的是08:09
//-----------------------------------------显示32大字-----------------------------------------
OLED_BuffClear(); //清除全部缓存
OLED_BuffShowString(40,0,hanzi,0); //显示数据
OLED_BuffShowChar32(24,3,0,0); //显示数字1
OLED_BuffShowChar32(40,3,8,0); //显示数字0
OLED_BuffShowChar32(56,3,10,0); //显示:
OLED_BuffShowChar32(72,3,0,0); //显示数字5
OLED_BuffShowChar32(88,3,9,0); //显示数字5
OLED_BuffShow(); //将缓存写入显示屏显示
delay_ms(DELAY_TIME); //延时
测试成功
9. 补充下12864知识
这个貌似是最多一行显示8个汉字 128/8= 16 一个汉字占16个点
一列最多4个汉字 64/4 = 16
下面开始添加字库。上面的欢迎使用能显示是版主添加好的