OLED_Refresh_Gram 函数先设置页地址,然后写入列地址(也就是纵坐标),然后从 0 开始写入 128 个字节,写满该页,最后循环把 8 页的内容都写入,就实现了整个从 STM32F4 显存到OLED 显存的拷贝。
OLED_Refresh_Gram 函数还用到了一个外部函数,也就是我们接着要介绍的函数:OLED_WR_Byte,该函数直接和硬件相关,函数代码如下:
#if OLED_MODE==1
//通过拼凑的方法向OLED 输出一个8位数据
//data:要输出的数据
void OLED_Data_Out(u8 data)
{
u16 dat=data&0X0F;
GPIOC->ODR&=~(0XF<<6);//清空 6~9
GPIOC->ODR|=dat<<6; //D[3:0]-->PC[9:6]
PCout(11)=(data>>4)&0X01; //D4
PBout(6)=(data>>5)&0X01; //D5
PEout(5)=(data>>6)&0X01; //D6
PEout(6)=(data>>7)&0X01; //D7
}
//向 SSD1306写入一个字节。
//dat:要写入的数据/命令, cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
OLED_Data_Out(dat);
OLED_RS=cmd;
OLED_CS=0; OLED_WR=0;
OLED_WR=1; OLED_CS=1; OLED_RS=1;
}
#else
//向 SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
u8 i;
OLED_RS=cmd; //写命令
OLED_CS=0;
for(i=0;i<8;i++)
{
OLED_SCLK=0;
if(dat&0x80)OLED_SDIN=1;
else OLED_SDIN=0;
OLED_SCLK=1;dat<<=1;
}
OLED_CS=1; OLED_RS=1;
}
#endif
首先,我们看OLED_Data_Out函数,这就是我们前面说的,因为OLED 的D0~D7不是接的连续 IO,所以必须将数据,拆分到各个 IO,以实现一次完整的数据传输,该函数就是根据我们 OLED_D[7:0]具体连接的IO,对数据进行拆分,然后输出给对应位的各个 IO,实现并口数据输出。这种方式会降低并口速度,但是我们OLED模块,是单色的,数据量不是很大,所以这种方式也不会造成视觉上的影响,大家可以放心使用,但是如果是TFTLCD,就不推荐了。
然后,看OLED_WR_Byte 函数,这里有2个一样的函数,通过宏定义OLED_MODE来决定使用哪一个。如果OLED_MODE=1,就定义为并口模式,选择第一个函数,而如果为0,则为 4 线串口模式,选择第二个函数。这两个函数输入参数均为2 个:dat 和 cmd,dat 为要写入的数据,cmd 则表明该数据是命令还是数据。这两个函数的时序操作就是根据上面我们对8080接口以及 4线 SPI接口的时序来编写的。
OLED_GRAM[128][8]中的 128 代表列数(x 坐标) ,而 8 代表的是页,每页又包含 8 行,总共 64 行(y坐标)。从高到低对应行数从小到大。比如,我们要在 x=100,y=29 这个点写入1,则可以用这个句子实现:
OLED_GRAM[100][4]|=1<<2;
一个通用的在点(x,y)置 1 表达式为:
OLED_GRAM[x][7-y/8]|=1<<(7-y%8);
其中 x的范围为:0~127;y的范围为:0~63。
因此,我们可以得出下一个将要介绍的函数: 画点函数, void OLED_DrawPoint(u8 x, u8 y,u8 t);函数代码如下:
void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
u8 pos,bx,temp=0;
if(x>127||y>63)return;//超出范围了.
pos=7-y/8;bx=y%8;
temp=1<<(7-bx);
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp;
}
该函数有 3个参数,前两个是坐标,第三个t为要写入1 还是0。该函数实现了我们在OLED模块上任意位置画点的功能。
接下来,我们介绍一下显示字符函数,OLED_ShowChar,在介绍之前,我们来介绍一下字符(ASCII字符集)是怎么显示在OLED 模块上去的。要显示字符,我们先要有字符的点阵数据,ASCII常用的字符集总共有95个,从空格符开始,分别为: !"#$%&'()*+,-0123456789:;<= >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.
我们先要得到这个字符集的点阵数据,这里我们介绍一个款很好的字符提取软件:PCtoLCD2002完美版。该软件可以提供各种字符,包括汉字(字体和大小都可以自己设置)阵提取,且取模方式可以设置好几种,常用的取模方式,该软件都支持。该软件还支持图形模式,也就是用户可以自己定义图片的大小,然后画图,根据所画的图形再生成点阵数据,这功能在制作图标或图片的时候很有用。
上一篇:STM32f4---OLCD显示实验代码(04)
下一篇:STM32f4---OLCD显示实验代码(02)
推荐阅读
史海拾趣
Amphenol Corporation,通常简称为Amphenol,是一家全球领先的连接技术公司,提供广泛的连接器解决方案,涵盖了航空航天、汽车、通信、工业、医疗和军事等多个领域。以下是关于Amphenol公司发展的五个相关故事:
创立与起步阶段:Amphenol公司成立于1932年,总部位于美国康涅狄格州沃拉姆。最初,公司致力于生产无线电连接器,并通过不断的创新和技术改进,逐步发展成为连接器行业的领导者之一。在第二次世界大战期间,Amphenol公司为美国军队提供了大量的军用连接器,为公司的发展奠定了坚实的基础。
技术创新与产品多样化:随着电子技术的不断进步和市场需求的不断变化,Amphenol公司不断进行技术创新,拓展产品线的多样性。除了传统的连接器产品,公司还开发了许多新型连接器,如光纤连接器、高速数据连接器、环境密封连接器等,以满足不同行业的需求。
全球化发展与市场拓展:Amphenol公司在全球范围内建立了广泛的销售网络和生产基地,实现了全球化布局和市场覆盖。公司在美国、欧洲、亚洲和其他地区设有多个生产工厂和研发中心,为客户提供当地化的服务和支持。通过不断扩大市场份额和提升产品质量,Amphenol公司成为了全球连接器市场的主要参与者之一。
客户合作与定制化解决方案:Amphenol公司与客户建立了紧密的合作关系,根据客户的需求和应用场景,提供定制化的连接器解决方案。公司的工程团队与客户共同设计和开发符合特定要求的产品,为客户提供专业化和个性化的服务。这种定制化解决方案能够满足客户多样化的需求,增强了公司在市场上的竞争优势。
质量管理与持续改进:Amphenol公司高度重视产品质量管理,严格遵循国际质量管理体系标准。公司的生产工艺和质量管理体系通过了ISO 9001质量管理体系认证,并持续进行质量改进和技术创新。此外,Amphenol公司的产品还通过了各种行业认证和标准,如航空航天领域的AS9100认证等,确保产品的可靠性和稳定性。
这些故事展示了Amphenol公司从创立初期到如今在技术创新、产品多样化、全球化发展、客户合作与定制化解决方案以及质量管理与持续改进等方面取得的重要进展。
在电子行业中,Gamewell-FCI作为霍尼韦尔(Honeywell)旗下的重要品牌,其发展历程充满了诸多关键节点和里程碑事件。以下是五个与Gamewell-FCI(Honeywell)公司发展相关的故事,每个故事均基于事实描述:
1. Gamewell-FCI的起源与并入霍尼韦尔
Gamewell-FCI的起源可以追溯到其前身Gamewell Fire Alarm Telegraph Company,该公司成立于19世纪末,以生产创新的火灾报警系统而闻名。随着技术的不断进步和市场需求的扩大,Gamewell逐渐发展成为火灾安全领域的领导者。20世纪后期,Gamewell被FCI(Fire Control Instruments)收购,进一步巩固了其在消防报警技术领域的地位。随后,随着霍尼韦尔在工业自动化和安全领域的扩展,Gamewell-FCI被并入霍尼韦尔大家庭,成为其安全与生产力解决方案集团的一部分。这一合并不仅为Gamewell-FCI带来了更广阔的市场和资源,也使其能够继续推动消防安全技术的创新与发展。
2. 技术创新与产品线扩展
在并入霍尼韦尔后,Gamewell-FCI凭借其深厚的技术底蕴和创新能力,不断推出新产品和技术解决方案。从传统的火灾报警系统到先进的智能火灾探测和预警系统,Gamewell-FCI始终走在行业前列。公司还积极拓展产品线,涵盖了气体检测、紧急通讯、安全疏散等多个领域,为客户提供全方位的消防安全解决方案。这些技术创新和产品线扩展不仅增强了Gamewell-FCI的市场竞争力,也为其在全球范围内的业务扩展奠定了坚实基础。
3. 全球化布局与战略合作
随着全球化进程的加速,Gamewell-FCI也积极实施全球化战略,通过在全球各地设立分支机构、与当地企业建立合作关系等方式,不断扩大其市场覆盖面。同时,公司还注重与行业内的领军企业建立战略合作关系,共同推动消防安全技术的创新与发展。这些合作不仅为Gamewell-FCI带来了更多的商业机会,也促进了全球消防安全领域的交流与合作。
4. 应对市场挑战与转型
面对不断变化的市场环境和客户需求,Gamewell-FCI始终保持着敏锐的洞察力和灵活的反应能力。当传统消防安全市场逐渐饱和时,公司及时调整战略方向,将重心转向智能消防、物联网等新兴领域。通过引入先进的物联网技术、大数据分析等手段,Gamewell-FCI成功实现了从传统消防设备制造商向智能消防安全解决方案提供商的转型。这一转型不仅为公司带来了新的增长点,也为其在全球消防安全领域的领先地位提供了有力支撑。
5. 可持续发展与社会责任
作为霍尼韦尔的一部分,Gamewell-FCI始终将可持续发展和社会责任视为企业发展的重要组成部分。公司致力于通过技术创新和高效运营来降低产品对环境的影响,并积极推广节能减排、绿色建筑的理念。同时,Gamewell-FCI还积极参与社会公益事业,为灾区提供紧急救援、为教育机构提供安全培训等,展现了其作为行业领导者的社会责任感。这些努力不仅提升了公司的品牌形象和社会声誉,也为公司的长远发展奠定了坚实基础。
为了进一步扩大市场份额,町洋开始进军国际市场。公司凭借其优质的产品和服务,逐渐在欧美等发达国家和地区打开了市场。为了更好地服务全球客户,町洋在全球设立了多个贸易与服务机构,构建了完善的销售网络和售后服务体系。
作为一家有社会责任感的企业,EMI公司不仅关注经济效益的增长,还积极履行社会责任。公司积极参与各种公益活动和社会救助行动,为灾区捐款捐物、支持教育事业等。同时,公司还注重环保和可持续发展,通过引进环保技术和设备、加强废弃物处理等措施降低生产过程中的环境污染。这些行动展现了EMI公司的良好企业形象和社会责任感。
EMI公司成立于20世纪80年代初,当时正值电子行业的快速发展期。创始人李先生凭借对电磁技术的深厚理解和市场洞察,决定投身电磁产品的研发与生产。初创时期,公司面临着资金短缺、技术难题和市场认可度低等多重挑战。然而,李先生和他的团队并没有放弃,他们通过夜以继日的研发,不断攻克技术难关,同时积极寻找合作伙伴,拓展销售渠道。经过几年的努力,EMI公司逐渐在市场上站稳了脚跟。
随着技术实力的不断提升和市场份额的稳步增长,Anytek在2009年获得了“中国国际高新技术企业”的认定。这一荣誉不仅是对公司技术实力和创新能力的肯定,也为公司的未来发展提供了更广阔的空间和机遇。同年,Anytek还成功进入了俄罗斯政府采购项目,进一步扩大了公司的国际影响力。
设计思想及算法实现 车模与赛道的参数如图1所示。车模运行的主要形式主要是车模的规定的赛道内行进,赛道中央有一条25mm宽的黑色引导线。 … 查看全部问答∨ |
|
hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER, IID ...… 查看全部问答∨ |
关于SD卡上移植 FAT 文件系统时的 初始化工作,遇到点问题 //读引导区信息(MASTER BOOT RECODER) MBR区 ReadBlock(0);// 读MBR结构 前446个都是0,从447开始为分区信息 (64个字节) //PartInfo = *((struct partrecord *)((struct partsector *)BUFFERtemp)->psPart);//得到分区表 ...… 查看全部问答∨ |
从AD9里的官方库里把LQFP48的封装找到,分N、L、M三种,咋选 从ALTIUM的网站下了ST的STM32的集成库,原理图、封装库很齐,但发现STM32F101C6T6有三个LQFP48的封装,分别是LQFP4 ...… 查看全部问答∨ |
|
大学生入门者也许感兴趣,大学生生活丰富呀,有时候可能也有空闲时间,所以不妨做做?既然还是入门,也许可以是通过练习也是学习嘛 只能象征性的对给出实验结果和程序的给予15芯币(晕,我还要交税?),新手在网站下载中心下载资源是否用得着? ...… 查看全部问答∨ |