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

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

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

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

图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的文件内容为:
  1. {
  2. "version": "1.0.0",
  3. "io": {
  4. "blk": {
  5. "type": "GPIO",
  6. "port": 119,
  7. "dir": "output",
  8. "pull": "pulldown"
  9. },
  10. "scl": {
  11. "type": "GPIO",
  12. "port": 40,
  13. "dir": "output",
  14. "pull": "pulldown"
  15. },
  16. "sda": {
  17. "type": "GPIO",
  18. "port": 39,
  19. "dir": "output",
  20. "pull": "pulldown"
  21. },
  22. "res": {
  23. "type": "GPIO",
  24. "port": 38,
  25. "dir": "output",
  26. "pull": "pulldown"
  27. },
  28. "dc": {
  29. "type": "GPIO",
  30. "port": 37,
  31. "dir": "output",
  32. "pull": "pulldown"
  33. },
  34. "cs": {
  35. "type": "GPIO",
  36. "port": 121,
  37. "dir": "output",
  38. "pull": "pulldown"
  39. }
  40. },
  41. "debugLevel": "DEBUG"
  42. }

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

  11. varscl = gpio.open({
  12. id: 'scl',
  13. success: function() {
  14. console.log('gpio: open scl success')
  15. },
  16. fail: function() {
  17. console.log('gpio: open scl failed')
  18. }
  19. });

  20. var sda = gpio.open({
  21. id: 'sda',
  22. success: function() {
  23. console.log('gpio: open sda success')
  24. },
  25. fail: function() {
  26. console.log('gpio: open sda failed')
  27. }
  28. });

  29. var res = gpio.open({
  30. id: 'res',
  31. success: function() {
  32. console.log('gpio: open res success')
  33. },
  34. fail: function() {
  35. console.log('gpio: open res failed')
  36. }
  37. });

  38. var dc = gpio.open({
  39. id: 'dc',
  40. success: function() {
  41. console.log('gpio: open dc success')
  42. },
  43. fail: function() {
  44. console.log('gpio: open dc failed')
  45. }
  46. });

  47. var cs = gpio.open({
  48. id: 'cs',
  49. success: function() {
  50. console.log('gpio: open cs success')
  51. },
  52. fail: function() {
  53. console.log('gpio: open cs failed')
  54. }
  55. });

  56. varvol = 0;

  57. functionledblink() {
  58. console.log('ledblink');
  59. blk.toggle();
  60. scl.toggle();
  61. sda.toggle();
  62. res.toggle();
  63. dc.toggle();
  64. cs.toggle();
  65. }

  66. var id1 = setInterval(ledblink, 1000);

  67. var id2 = setInterval(function() {

  68.     console.log('setInterval');

  69. }, 500);

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

  21. functionledblink() {
  22. console.log('dat=0x64');
  23. LCD_Writ_Bus(0x64);
  24. }

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

经下载测试,其显示效果如图所示,说明显示驱动已具备了基础。
图6彩色清屏效果
5. 字模提取与显示
字符显示要依赖字模的支持,为此可用PCtoLCD2002来提取所需的字模来构建字库。提取字模的选项设置如图7所示,其提取结果见图8的内容。
图7 选项设置
图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
...
];
对应字符显示函数为:
  1. function  LCD_ShowChar(x,y,num,color) {
  2. var temp;
  3. varpos,t;
  4. var x0=x;
  5. LCD_Address_Set(x,y,x+8-1,y+16-1);
  6. for(pos=0;pos<16;pos++)
  7. {
  8. temp=F8X16[num*16+pos];
  9. for(t=0;t<8;t++)
  10. {
  11. if(temp&0x01) LCD_WR_DATA(color);
  12. else LCD_WR_DATA(BACK_COLOR);
  13. temp>>=1;
  14. x++;
  15. }
  16. x=x0;
  17. y++;
  18. }
  19. }

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

打赏榜单

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2934

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部

518

主题

2934

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部