发新帖本帖赏金 20.00元(功能说明)我要提问
返回列表

基于HaaS 610 Kit 4G 开发板的彩色OLED屏显示驱动

[复制链接]
4102|0
手机看帖
扫描二维码
随时随地手机跟帖
jinglixixi|  楼主 | 2021-11-16 00:27 | 显示全部楼层 |阅读模式
#申请原创#
HaaS610 Kit 4G开发板由阿里云、广和通、旗点科技及电子发烧友联合推出,它搭载有阿里云HaaS轻应用框架,基于广和通4G Cat1模组,拥有丰富的io资源、并配有wif通信性能,是一款面向4G开发的有效工具,其外观如图1所示。
1.jpg
图1 HaaS610 Kit 4G开发板
与常规的开发板有所不同的是,该开发板的编程语言为JavaScript,是互联网上流行的一种脚本语言,也是一种轻量级的编程语言。
这里所说的“轻应用”是指可运行在轻量级嵌入式设备上的JavaScript应用,而“轻应用框架”则是指封装了 JavaScript 引擎和 API 接口, 用于支持轻应用开发的软件框架。
轻应用框架的运行流程如图2所示,一个最精简的轻应用包最少由两个文件组成,必须放在项目文件夹的根目录,见图3所示。
2.jpg
图2运行流程
通常来说, js 文件用于存放我们实现业务的逻辑,而json 文件则用于配置一些全局变量,尤其是 io 引脚。
3.jpg

图3轻应用最小构成
1. 引脚使用分配
出于扩展的需要,HaaS610 Kit 4G开发板配有Arduino 接口,其引脚分布如图4所示。

4.jpg
图4 Arduino接口引脚分布
所使用的色彩OLED屏的引脚排列顺序为:
GND  VCC  SCL  SDA RES DC  CS  BLK
鉴于OLED屏的电源引脚与Arduino接口的方向不一致,故不能直接将OLED屏插到Arduino接口来使用。
出于使用方便的需要,OLED屏各引脚与开发板的连接关系为:
SCL—P40
SDA—P39
RES—P38
DC—P37
CS—P121
BLK—P119
为将这些引脚配置为输出口,故json的文件内容为:
{
"version": "1.0.0",
"io": {
"blk": {
"type": "GPIO",
"port": 119,
"dir": "output",
"pull": "pulldown"
},
"scl": {
"type": "GPIO",
"port": 40,
"dir": "output",
"pull": "pulldown"
},
"sda": {
"type": "GPIO",
"port": 39,
"dir": "output",
"pull": "pulldown"
},
"res": {
"type": "GPIO",
"port": 38,
"dir": "output",
"pull": "pulldown"
},
"dc": {
"type": "GPIO",
"port": 37,
"dir": "output",
"pull": "pulldown"
},
"cs": {
"type": "GPIO",
"port": 121,
"dir": "output",
"pull": "pulldown"
}
},
"debugLevel": "DEBUG"
}

2. 引脚输出能力检测
为保证引脚的输出能力,在使用前需进行相应的验证。
验证的js文件内容为:
vargpio = require('gpio');
var blk = gpio.open({
id: ' blk ',
success: function() {
console.log('gpio: open led success')
},
fail: function() {
console.log('gpio: open led failed')
}
});

varscl = gpio.open({
id: 'scl',
success: function() {
console.log('gpio: open scl success')
},
fail: function() {
console.log('gpio: open scl failed')
}
});

var sda = gpio.open({
id: 'sda',
success: function() {
console.log('gpio: open sda success')
},
fail: function() {
console.log('gpio: open sda failed')
}
});

var res = gpio.open({
id: 'res',
success: function() {
console.log('gpio: open res success')
},
fail: function() {
console.log('gpio: open res failed')
}
});

var dc = gpio.open({
id: 'dc',
success: function() {
console.log('gpio: open dc success')
},
fail: function() {
console.log('gpio: open dc failed')
}
});

var cs = gpio.open({
id: 'cs',
success: function() {
console.log('gpio: open cs success')
},
fail: function() {
console.log('gpio: open cs failed')
}
});

varvol = 0;

functionledblink() {
console.log('ledblink');
blk.toggle();
scl.toggle();
sda.toggle();
res.toggle();
dc.toggle();
cs.toggle();
}

var id1 = setInterval(ledblink, 1000);

var id2 = setInterval(function() {

    console.log('setInterval');

}, 500);

在程序下载后,经外挂LED模块的验证,各引脚均具有实现的驱动能力。
3. 函数设计与验证
在OLED屏的显示驱动中,字节数据发送函数是至关重要的,这里所采用的实现方式是以GPIO口来模拟SPI发送数据。
模拟发送数据的验证程序为:
functionLCD_Writ_Bus(dat){
var i;
cs.writeValue(0);
for(i=0;i<8;i++)
{
scl.writeValue(0);
if(dat&0x80){
sda.writeValue(1);
console.log('d=1');
}
else
{
sda.writeValue(0);
console.log('d=0');
}
scl.writeValue(1);
dat<<=1;
}
cs.writeValue(1);
}

functionledblink() {
console.log('dat=0x64');
LCD_Writ_Bus(0x64);
}

经程序下载,该函数的验证结果如图5所示,说明功能正确。
5.jpg
图5验证结果
4. 点亮OLED屏
有了字节发送函数的支持,是否就能点亮OLED屏呢?
这还要由实际效果来检验,以色彩清屏的函数为:
function  LCD_Clear(Color) {
vari,j;
LCD_Address_Set(0,0,159,79);
for(i=0;i<160;i++)
{
for (j=0;j<80;j++)
{
LCD_WR_DATA(Color);
}
}
}

经下载测试,其显示效果如图所示,说明显示驱动已具备了基础。
6.jpg
图6彩色清屏效果
5. 字模提取与显示
字符显示要依赖字模的支持,为此可用PCtoLCD2002来提取所需的字模来构建字库。提取字模的选项设置如图7所示,其提取结果见图8的内容。
7.jpg
图7 选项设置
8.jpg
图8 提取结果
相应的字模存储形式为:
var F8X16=[
//Haas610Kit
0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,//"H",0
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x30,0x2C,0x22,0x32,0x6C,0x00,0x00,//"a",1
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x30,0x2C,0x22,0x32,0x6C,0x00,0x00,//"a",2
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00,//"s",3
...
];
对应字符显示函数为:
function  LCD_ShowChar(x,y,num,color) {
var temp;
varpos,t;
var x0=x;
LCD_Address_Set(x,y,x+8-1,y+16-1);
for(pos=0;pos<16;pos++)
{
temp=F8X16[num*16+pos];
for(t=0;t<8;t++)
{
if(temp&0x01) LCD_WR_DATA(color);
else LCD_WR_DATA(BACK_COLOR);
temp>>=1;
x++;
}
x=x0;
y++;
}
}

经下载验证,其显示效果如图8所示,至此OLED屏的显示驱动就完成了!
9.jpg
图8 字符显示效果


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 20.00 元 2022-01-07
理由:恭喜通过原创文章审核!请多多加油哦!

相关帖子

发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

36

粉丝