【祖传点灯】安信可Ai-M61-32S + 环境搭建+RGB点灯+TFTLCD配置

[复制链接]
查看2185 | 回复7 | 2024-5-3 21:27:34 | 显示全部楼层 |阅读模式
本帖最后由 及辰 于 2024-5-3 21:27 编辑

本次活动是在B站UP主:安信可科技发布的视频了解到的。
【祖传点灯】信可Ai-M61-32S环境配置+点灯+TFTLCD屏幕点亮
十分感谢安信可科技提供的机会,感谢园长选中!点个屏幕
1、编译环境搭建
默认已安装VSCode和Git,如未安装好,可以去官网下载默认安装或者百度寻找一个教程。
1.1 克隆 AiPi-Open-Kits 仓库
在win图标上右键,弹出窗口点终端打开CMD控制台。


新建一个文件夹用来存放下载的编译文件,此处新建文件夹地址为:D:\software\AIM6132S,可以自己创建一个属于自己的文件夹。在CMD终端输入cd D:\software\AIM6132S,回车进入新建文件夹。

屏幕截图 2024-05-03 110120.png

在CMD终端输入 git clone https://gitee.com/Ai-Thinker-Open/AiPi-Open-Kits.git,回车克隆AiPi-Open-Kits仓库。

屏幕截图 2024-05-03 110437.png
屏幕截图 2024-05-03 195607.png
在CMD终端输入cd D:\software\AIM6132S\AiPi-Open-Kits,进入AiPi-Open-Kits文件夹。在CMD终端输入git submodule init,回车等待后(这里等待时间有点长)输入git submodule update 执行子模块更新。可以对比查看是否正常。(对比下看是否有报错)
屏幕截图 2024-05-03 112309.png
1.2 克隆 aithinker_Ai-M6X_SDK 仓库
在CMD终端输入git clone https://gitee.com/Ai-Thinker-Open/aithinker_Ai-M6X_SDK.git,回车克隆 aithinker_Ai-M6X_SDK 仓库
屏幕截图 2024-05-03 112319.png

屏幕截图 2024-05-03 200932.png

在CMD终端输入cd D:\software\AIM6132S\AiPi-Open-Kits\aithinker_Ai-M6X_SDK,回车进入文件夹;在CMD终端输入git submodule init,回车等待后(这里等待时间有点长)输入git submodule update 执行子模块更新。可以对比查看是否正常。(对比下看是否有报错)

屏幕截图 2024-05-03 113122(1).png

1.3 配置 GCC 编译链
在CMD终端输入git clone https://gitee.com/bouffalolab/toolchain_gcc_t-head_windows.git拉取 toolchain_gcc_t-head_windows 仓库
屏幕截图 2024-05-03 113122.png

检查下D:\software\AIM6132S\AiPi-Open-Kits\aithinker_Ai-M6X_SDK\toolchain_gcc_t-head_windows  、 D:\software\AIM6132S\AiPi-Open-Kits\aithinker_Ai-M6X_SDK\toolchain  、 D:\software\AIM6132S\AiPi-Open-Kits\aithinker_Ai-M6X_SDK\tools三个文件夹,看下是否都有文件

屏幕截图 2024-05-03 201845.png

屏幕截图 2024-05-03 201853.png

屏幕截图 2024-05-03 201901.png

1.4 添加系统环境变量
在桌面-此电脑(右键)-属性(点击)-高级系统设置(点击)-环境变量(点击)-系统变量/path(双击)-新建(点击),在下面加入三个地址(这里的地址根据最开始自己设置的文件夹修改,此处对应的地址如下图
屏幕截图 2024-05-03 202112.png

屏幕截图 2024-05-03 202146.png

屏幕截图 2024-05-03 202218.png

屏幕截图 2024-05-03 202241.png

屏幕截图 2024-05-03 202319.png



上图为本电脑的三个地址,添加成功后点击确定。(这个地址只要对的,理论上在任何位置都可以)

1.5 验证
在CMD终端输入make -v回车后输入riscv64-unknown-elf-gcc -v,可以对比下下图,确认环境是否配置成功
屏幕截图 2024-05-03 113846.png

2、RGB点灯

2.1 代码修改
将参考代码复制一份(这里选中的是AiPi-Open-Kits\AiPi-Eyes-DU),粘贴到自己存放代码的文件夹内(改名为test_one)
用记事本打开Makefile 文件,修改 BL_SDK_BASE 路径
屏幕截图 2024-05-03 204345.png

屏幕截图 2024-05-03 204402.png

上图地址改成最开始自己设置的地址,一定要改不然会报错。

用记事本或者VSCode打开main.c,修改代码如下


  1. #include "bflb_mtimer.h"
  2. #include "bflb_pwm_v2.h"
  3. #include "bflb_clock.h"
  4. #include "bflb_gpio.h"
  5. #include "board.h"

  6. struct bflb_device_s *pwm;
  7. struct bflb_device_s *gpio;
  8. int main(void)
  9. {
  10.     int i;
  11.     board_init();

  12.     pwm = bflb_device_get_by_name("pwm_v2_0");
  13.     gpio = bflb_device_get_by_name("gpio");

  14.     /*初始化RGB灯,IO15、12、14,对应蓝灯、红灯、绿灯*/
  15.     bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  16.     bflb_gpio_init(gpio, GPIO_PIN_12, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  17.     bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  18.    
  19.     /* period = .XCLK / .clk_div / .period = 40MHz / 40 / 1000 = 1KHz */
  20.     struct bflb_pwm_v2_config_s cfg = {
  21.         .clk_source = BFLB_SYSTEM_XCLK,
  22.         .clk_div = 40,
  23.         .period = 1000,
  24.     };

  25.    
  26.     /*初始化PWM输出*/
  27.     bflb_pwm_v2_init(pwm, &cfg);
  28.     bflb_pwm_v2_start(pwm);


  29.     /*功能实现,红、绿、蓝灯依次呼吸循环亮灭*/
  30.     while (1) {

  31.     //红灯呼吸亮灭   
  32.     bflb_pwm_v2_channel_positive_start(pwm, PWM_CH0);
  33.     for(i=100;i>0;i--)
  34.     {

  35.         bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, i, 100);

  36.         bflb_mtimer_delay_ms(10);
  37.     }
  38.     for(i=1;i<100;i++)
  39.     {
  40.         bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, i, 100);

  41.         bflb_mtimer_delay_ms(10);
  42.     }
  43.     bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH0);



  44.     //绿灯呼吸亮灭
  45.     bflb_pwm_v2_channel_positive_start(pwm, PWM_CH2);
  46.     for(i=100;i>0;i--)
  47.     {
  48.         bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH2, i, 100);

  49.         bflb_mtimer_delay_ms(10);
  50.     }   
  51.      for(i=1;i<100;i++)
  52.     {
  53.         bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH2, i, 100);

  54.         bflb_mtimer_delay_ms(10);
  55.     }      
  56.     bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH2);


  57.     //蓝灯循环亮灭
  58.     bflb_pwm_v2_channel_positive_start(pwm, PWM_CH3);
  59.     for(i=100;i>0;i--)
  60.     {
  61.         bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, i, 100);

  62.         bflb_mtimer_delay_ms(10);
  63.     }  
  64.      for(i=1;i<100;i++)
  65.     {
  66.         bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, i, 100);

  67.         bflb_mtimer_delay_ms(10);
  68.     }   
  69.     bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH3);
  70.     }
  71. }
复制代码
如果在VSCode中打开的文件,则在文件夹名称上右键,点击在集成终端中打开,输入make clean ,然后输入make,如果结果如图,则编译成功;

如果用记事本修改的文件,则在目录下打开终端,或者打开终端再cd进文件夹,输入make clean ,然后输入make,如果结果如图,则编译成功。

屏幕截图 2024-05-03 210221.png

屏幕截图 2024-05-03 210234.png

屏幕截图 2024-05-03 210258.png

在桌面-此电脑(右键)-查看更多选项(点击)-管理(点击)-设备管理器(点击)-端口(点击)查看COM口是第几个,如图为COM4

屏幕截图 2024-05-03 210650.png

在刚才输入make的地方输入 make flash CHIP=bl616 COMX=COM4,这里的COM4改成自己的COM口,在烧录之前先按下IO2,再按下EN,松开EN,回车烧录,烧录成功如图,然后松开IO2,点击一下EN就可以成功运行了。

屏幕截图 2024-05-03 210241.png

屏幕截图 2024-05-03 210306.png

成功点灯

微信图片_20240503163007.jpg

2、点亮屏幕

将上文中的make.c中的代码改为如下:
  1. #include "bflb_mtimer.h"
  2. #include "bflb_clock.h"
  3. #include "bflb_spi.h"
  4. #include "bflb_gpio.h"
  5. #include "board.h"

  6. #define CS_PIN   GPIO_PIN_12
  7. #define DC_PIN   GPIO_PIN_27
  8. #define RES_PIN  GPIO_PIN_26
  9. #define BLK_PIN  GPIO_PIN_28
  10. #define MOSI_PIN GPIO_PIN_19
  11. #define MISO_PIN GPIO_PIN_18
  12. #define CLK_PIN  GPIO_PIN_13

  13. #define FREQUARY 50

  14. #define u8  unsigned char
  15. #define u16 unsigned short
  16. #define u32 unsigned int

  17. #define LCD_CASET     0x2A        
  18. #define LCD_RASET     0x2B        
  19. #define LCD_RAMWR     0x2C        
  20. #define LCD_MADCTL    0x36  //定义帧内存的读写扫描方向

  21. #define TFT_CS_Reset  bflb_gpio_reset(gpio, CS_PIN);
  22. #define TFT_CS_Set    bflb_gpio_set(gpio, CS_PIN);
  23. #define TFT_DC_Reset  bflb_gpio_reset(gpio, DC_PIN);        //cmd
  24. #define TFT_DC_Set    bflb_gpio_set(gpio, DC_PIN);          //data
  25. #define TFT_RES_Reset bflb_gpio_reset(gpio, RES_PIN);
  26. #define TFT_RES_Set   bflb_gpio_set(gpio, RES_PIN);
  27. #define TFT_BLK_Reset bflb_gpio_reset(gpio, BLK_PIN);
  28. #define TFT_BLK_Set   bflb_gpio_set(gpio, BLK_PIN);

  29. struct bflb_device_s *spi0;
  30. struct bflb_device_s *gpio;


  31. #define USE_ONCHIP_FLASH_FONT 1
  32. const unsigned char asc16[] =
  33. {
  34. #if USE_ONCHIP_FLASH_FONT
  35.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //" "
  36.   0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, //"!"
  37.   0x00, 0x00, 0x6C, 0x6C, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, //"""
  38.   0x00, 0x24, 0x24, 0x24, 0x24, 0xFE, 0x48, 0x48, 0x48, 0x48, 0xFC, 0x90, 0x90, 0x90, 0x90, 0x00, //"#"
  39.   0x00, 0x10, 0x3C, 0x54, 0x92, 0x90, 0x50, 0x38, 0x14, 0x12, 0x12, 0x92, 0x54, 0x78, 0x10, 0x00, //"$"
  40.   0x00, 0x00, 0x22, 0x5C, 0x94, 0xA8, 0x48, 0x10, 0x10, 0x24, 0x2A, 0x52, 0x54, 0x88, 0x00, 0x00, //"%"
  41.   0x00, 0x00, 0x30, 0x48, 0x48, 0x50, 0x20, 0x6E, 0x54, 0x94, 0x8C, 0x88, 0x8A, 0x74, 0x00, 0x00, //"&"
  42.   0x00, 0x00, 0x30, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"'"
  43.   0x00, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, //"("
  44.   0x00, 0x80, 0x40, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x00, //")"
  45.   0x00, 0x00, 0x00, 0x00, 0x10, 0x54, 0x38, 0x10, 0x38, 0x54, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, //"*"
  46.   0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, //"+"
  47.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, //","
  48.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"-"
  49.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, //"."
  50.   0x00, 0x00, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, //"/"
  51.   0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, //"0"
  52.   0x00, 0x00, 0x10, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00, //"1"
  53.   0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x04, 0x08, 0x10, 0x20, 0x40, 0x82, 0x84, 0xFC, 0x00, 0x00, //"2"
  54.   0x00, 0x00, 0x38, 0x44, 0x82, 0x02, 0x04, 0x38, 0x04, 0x02, 0x02, 0x82, 0x44, 0x38, 0x00, 0x00, //"3"
  55.   0x00, 0x00, 0x04, 0x0C, 0x14, 0x14, 0x24, 0x24, 0x44, 0x44, 0xFE, 0x04, 0x04, 0x0E, 0x00, 0x00, //"4"
  56.   0x00, 0x00, 0xFC, 0x80, 0x80, 0x80, 0xB8, 0xC4, 0x82, 0x02, 0x02, 0x82, 0x84, 0x78, 0x00, 0x00, //"5"
  57.   0x00, 0x00, 0x3C, 0x42, 0x82, 0x80, 0xB8, 0xC4, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, //"6"
  58.   0x00, 0x00, 0x7E, 0x42, 0x82, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, //"7"
  59.   0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x44, 0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, //"8"
  60.   0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x46, 0x3A, 0x02, 0x82, 0x44, 0x38, 0x00, 0x00, //"9"
  61.   0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, //":"
  62.   0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, //";"
  63.   0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x60, 0x80, 0x60, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, //"<"
  64.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"="
  65.   0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x02, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, //">"
  66.   0x00, 0x38, 0x44, 0x82, 0x82, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, //"?"
  67.   0x00, 0x00, 0x38, 0x44, 0x82, 0x9A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x96, 0x80, 0x42, 0x3C, 0x00, //"@"
  68.   0x00, 0x00, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x44, 0x44, 0x7C, 0x44, 0x44, 0xEE, 0x00, 0x00, //"A"
  69.   0x00, 0x00, 0xFC, 0x42, 0x42, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x42, 0x42, 0x42, 0xFC, 0x00, 0x00, //"B"
  70.   0x00, 0x00, 0x3C, 0x44, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, //"C"
  71.   0x00, 0x00, 0xF8, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x44, 0xF8, 0x00, 0x00, //"D"
  72.   0x00, 0x00, 0xFC, 0x44, 0x42, 0x40, 0x44, 0x7C, 0x44, 0x40, 0x40, 0x42, 0x44, 0xFC, 0x00, 0x00, //"E"
  73.   0x00, 0x00, 0xFC, 0x44, 0x42, 0x40, 0x44, 0x7C, 0x44, 0x40, 0x40, 0x40, 0x40, 0xF0, 0x00, 0x00, //"F"
  74.   0x00, 0x00, 0x34, 0x4C, 0x82, 0x80, 0x80, 0x80, 0x8E, 0x84, 0x84, 0x84, 0x4C, 0x34, 0x00, 0x00, //"G"
  75.   0x00, 0x00, 0xEE, 0x44, 0x44, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x44, 0x44, 0x44, 0xEE, 0x00, 0x00, //"H"
  76.   0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00, //"I"
  77.   0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x88, 0x88, 0x70, 0x00, 0x00, //"J"
  78.   0x00, 0x00, 0xEE, 0x44, 0x48, 0x48, 0x50, 0x60, 0x50, 0x48, 0x48, 0x44, 0x44, 0xEE, 0x00, 0x00, //"K"
  79.   0x00, 0x00, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x42, 0x44, 0xFC, 0x00, 0x00, //"L"
  80.   0x00, 0x00, 0xC6, 0x44, 0x6C, 0x6C, 0x6C, 0x54, 0x54, 0x54, 0x44, 0x44, 0x44, 0xEE, 0x00, 0x00, //"M"
  81.   0x00, 0x00, 0xCE, 0x44, 0x64, 0x64, 0x64, 0x54, 0x54, 0x4C, 0x4C, 0x4C, 0x44, 0xE4, 0x00, 0x00, //"N"
  82.   0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, //"O"
  83.   0x00, 0x00, 0xF8, 0x44, 0x42, 0x42, 0x42, 0x44, 0x78, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00, //"P"
  84.   0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xBA, 0x44, 0x3C, 0x02, 0x00, //"Q"
  85.   0x00, 0x00, 0xF0, 0x48, 0x44, 0x44, 0x44, 0x48, 0x70, 0x48, 0x44, 0x44, 0x44, 0xE6, 0x00, 0x00, //"R"
  86.   0x00, 0x00, 0x3C, 0x44, 0x82, 0x80, 0x40, 0x30, 0x0C, 0x02, 0x02, 0x82, 0x44, 0x78, 0x00, 0x00, //"S"
  87.   0x00, 0x00, 0x7C, 0x54, 0x92, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, //"T"
  88.   0x00, 0x00, 0xEE, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, //"U"
  89.   0x00, 0x00, 0xEE, 0x44, 0x44, 0x44, 0x44, 0x28, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x00, 0x00, //"V"
  90.   0x00, 0x00, 0xEE, 0x44, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, //"W"
  91.   0x00, 0x00, 0xEE, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0xEE, 0x00, 0x00, //"X"
  92.   0x00, 0x00, 0xEE, 0x44, 0x44, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, //"Y"
  93.   0x00, 0x00, 0x7E, 0x44, 0x84, 0x08, 0x08, 0x10, 0x20, 0x20, 0x40, 0x82, 0x84, 0xFC, 0x00, 0x00, //"Z"
  94.   0x00, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1C, 0x00, //"["
  95.   0x00, 0x00, 0xEE, 0x44, 0x54, 0x54, 0xFE, 0x54, 0x54, 0x54, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, //""
  96.   0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, //"]"
  97.   0x00, 0x30, 0x48, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"^"
  98.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, //"_"
  99.   0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"`"
  100.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0x04, 0x7C, 0x84, 0x84, 0x8C, 0x76, 0x00, 0x00, //"a"
  101.   0x00, 0x00, 0xC0, 0x40, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x42, 0x64, 0x58, 0x00, 0x00, //"b"
  102.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x80, 0x80, 0x80, 0x80, 0x44, 0x38, 0x00, 0x00, //"c"
  103.   0x00, 0x00, 0x0C, 0x04, 0x04, 0x04, 0x34, 0x4C, 0x84, 0x84, 0x84, 0x84, 0x4C, 0x36, 0x00, 0x00, //"d"
  104.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0x84, 0xFC, 0x80, 0x80, 0x84, 0x78, 0x00, 0x00, //"e"
  105.   0x00, 0x00, 0x18, 0x24, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, //"f"
  106.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x44, 0x44, 0x78, 0x80, 0x7C, 0x82, 0x82, 0x7C, 0x00, //"g"
  107.   0x00, 0x00, 0xC0, 0x40, 0x40, 0x40, 0x58, 0x64, 0x44, 0x44, 0x44, 0x44, 0x44, 0xEE, 0x00, 0x00, //"h"
  108.   0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, //"i"
  109.   0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, 0x00, //"j"
  110.   0x00, 0x00, 0xC0, 0x40, 0x40, 0x40, 0x5C, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0xEE, 0x00, 0x00, //"k"
  111.   0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x39, 0x00, 0x00, //"l"
  112.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xD2, 0x92, 0x92, 0x92, 0x92, 0x92, 0xD6, 0x00, 0x00, //"m"
  113.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xE4, 0x44, 0x44, 0x44, 0x44, 0x44, 0xEE, 0x00, 0x00, //"n"
  114.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00, //"o"
  115.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x64, 0x42, 0x42, 0x42, 0x64, 0x58, 0x40, 0xE0, 0x00, //"p"
  116.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x4C, 0x84, 0x84, 0x84, 0x4C, 0x34, 0x04, 0x0E, 0x00, //"q"
  117.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00, 0x00, //"r"
  118.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x88, 0x84, 0x60, 0x18, 0x84, 0x44, 0x78, 0x00, 0x00, //"s"
  119.   0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x18, 0x00, 0x00, //"t"
  120.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, 0x00, //"u"
  121.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x44, 0x44, 0x28, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, //"v"
  122.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x44, 0x44, 0x54, 0x54, 0x28, 0x28, 0x28, 0x00, 0x00, //"w"
  123.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x44, 0x28, 0x10, 0x10, 0x28, 0x44, 0xEE, 0x00, 0x00, //"x"
  124.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0xA0, 0xC0, 0x00, //"y"
  125.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x44, 0x88, 0x10, 0x20, 0x42, 0x84, 0xFC, 0x00, 0x00, //"z"
  126.   0x00, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x00, //"{"
  127.   0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, //"|"
  128.   0x00, 0xC0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC0, 0x00, //"}"
  129.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"~"
  130. #endif
  131.   0x00, };

  132.   struct typFNT_GB162
  133. {
  134.     unsigned char Index[3];
  135.     unsigned char Msk[32];
  136. };

  137. #define HANZI_num   12
  138. const struct typFNT_GB162 hanzi[] =
  139.         {
  140. #if USE_ONCHIP_FLASH_FONT

  141.             "感", 0x00,0x28,0x00,0x24,0x3F,0xFE,0x20,0x20,0x2F,0xA4,0x20,0x24,0x2F,0xA8,0x28,0x98,0x28,0x92,0x4F,0xAA,0x40,0x46,0x80,0x82,0x01,0x00,0x48,0x84,0x48,0x12,0x87,0xF2,//感0
  142.             "谢", 0x01,0x08,0x42,0x08,0x27,0x88,0x24,0x88,0x07,0xBE,0x04,0x88,0xE7,0x88,0x24,0xC8,0x24,0xA8,0x2F,0xA8,0x21,0x88,0x2A,0x88,0x34,0x88,0x28,0x88,0x02,0xA8,0x01,0x10,//谢1
  143.             "安", 0x02,0x00,0x01,0x00,0x3F,0xFC,0x20,0x04,0x42,0x08,0x02,0x00,0x02,0x00,0xFF,0xFE,0x04,0x20,0x08,0x20,0x18,0x40,0x06,0x40,0x01,0x80,0x02,0x60,0x0C,0x10,0x70,0x08,//安2
  144.             "信", 0x08,0x40,0x08,0x20,0x0B,0xFE,0x10,0x00,0x10,0x00,0x31,0xFC,0x30,0x00,0x50,0x00,0x91,0xFC,0x10,0x00,0x10,0x00,0x11,0xFC,0x11,0x04,0x11,0x04,0x11,0xFC,0x11,0x04,//信3
  145.             "可", 0x00,0x00,0x7F,0xFE,0x00,0x10,0x00,0x10,0x1F,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x1F,0x10,0x11,0x10,0x00,0x10,0x00,0x10,0x00,0x50,0x00,0x20,//可4
  146.             "赠", 0x00,0x88,0x7C,0x48,0x44,0x50,0x55,0xFC,0x55,0x24,0x55,0xAC,0x55,0x74,0x55,0x24,0x55,0xFC,0x54,0x00,0x54,0xF8,0x10,0x88,0x28,0xF8,0x24,0x88,0x44,0xF8,0x80,0x88,//赠5
  147.             "送", 0x02,0x08,0x21,0x08,0x11,0x10,0x17,0xFC,0x00,0x40,0x00,0x40,0xF0,0x40,0x17,0xFE,0x10,0x40,0x10,0xA0,0x10,0x90,0x11,0x08,0x12,0x08,0x28,0x00,0x47,0xFE,0x00,0x00,//送6
  148.             "开", 0x00,0x00,0x7F,0xFC,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0xFF,0xFE,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x40,0x20,//开7
  149.             "发", 0x01,0x00,0x11,0x10,0x11,0x08,0x22,0x00,0x3F,0xFC,0x02,0x00,0x04,0x00,0x07,0xF8,0x0A,0x08,0x09,0x08,0x11,0x10,0x10,0xA0,0x20,0x40,0x40,0xA0,0x03,0x18,0x1C,0x06,//发8
  150.             "板", 0x10,0x08,0x10,0x1C,0x11,0xE0,0x11,0x00,0xFD,0x00,0x11,0xFC,0x31,0x44,0x39,0x44,0x55,0x44,0x55,0x28,0x91,0x28,0x11,0x10,0x11,0x10,0x12,0x28,0x12,0x44,0x14,0x82,//板9

  151.           "%", 0x00, 0x00, 0x00, 0x44, 0xA4, 0xA8, 0xA8, 0xB0, 0x54, 0x1A, 0x2A, 0x2A, 0x4A, 0x44, 0x00, 0x00,/*"%",0*/ //新增加的要放在这个“%前面,不然会报错”
  152. #endif
  153.           0x00, };

  154. void spi_init();
  155. void Lcd_init();
  156. void Lcd_reset();
  157. void Lcd_WriteCmd(u8 data);
  158. void Lcd_WriteData(u8 data);
  159. void set_background(u16 color);
  160. void set_frame_size(u16 x_start, u16 x_end, u16 y_start, u16 y_end);
  161. void Show_Ch_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s);


  162. void set_scan_direction(u8 data)
  163. {
  164.     Lcd_WriteCmd(LCD_MADCTL);
  165.     Lcd_WriteData(data);
  166. }

  167. void Show_Ch_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s)
  168. {
  169.     u8 i, j;
  170.     u16 k, x0;
  171.     u16 index = 0;
  172.     x0 = x;

  173.     while (*(s + index))
  174.     {
  175.         if ((*(s + index)) < 128)
  176.         {
  177.             k = *(s + index);
  178.             if (k == 13)
  179.             {
  180.                 x = x0;
  181.                 y += 16;
  182.             }
  183.             else
  184.             {
  185.                 if (k > 32)
  186.                     k -= 32;
  187.                 else
  188.                     k = 0;

  189.                 set_frame_size (x, x + 8, y, y + 16);
  190.                 TFT_DC_Set;
  191.                 TFT_CS_Reset;
  192.                 for (i = 0; i < 16; i++)
  193.                 {
  194.                     for (j = 0; j < 8; j++)
  195.                     {
  196.                         if (asc16[k * 16 + i] & (0x80 >> j))
  197.                         {
  198.                             bflb_spi_poll_send(spi0,fc >> 8);
  199.                             bflb_spi_poll_send(spi0,fc);
  200.                         }
  201.                         else
  202.                         {
  203.                             bflb_spi_poll_send(spi0,bc >> 8);
  204.                             bflb_spi_poll_send(spi0,bc);
  205.                         }
  206.                     }
  207.                 }
  208.                 TFT_CS_Set;
  209.                 x += 8;
  210.             }
  211.             index++;
  212.         }
  213.         else
  214.         {
  215.                 for (k=0;k<HANZI_num;k++)
  216.                         {
  217.                             if ((hanzi[k].Index[0]==*(s))&&(hanzi[k].Index[1]==*(s+1))&&(hanzi[k].Index[2]==*(s+2)))
  218.                             {
  219.                     set_frame_size (x, x + 16, y, y + 16);
  220.                     TFT_DC_Set;
  221.                     TFT_CS_Reset;
  222.                                     for(i=0;i<16;i++)
  223.                                     {
  224.                                                 for(j=0;j<8;j++)
  225.                                             {
  226.                                                     if(hanzi[k].Msk[i*2]&(0x80>>j))        
  227.                             {
  228.                                 bflb_spi_poll_send(spi0,fc >> 8);
  229.                                 bflb_spi_poll_send(spi0,fc);
  230.                             }
  231.                                                     else
  232.                             {
  233.                                 bflb_spi_poll_send(spi0,bc >> 8);
  234.                                 bflb_spi_poll_send(spi0,bc);
  235.                                                     }
  236.                                             }
  237.                                                 for(j=0;j<8;j++)
  238.                                             {
  239.                                                     if(hanzi[k].Msk[i*2+1]&(0x80>>j))        
  240.                             {
  241.                                 bflb_spi_poll_send(spi0,fc >> 8);
  242.                                 bflb_spi_poll_send(spi0,fc);
  243.                             }
  244.                                                     else
  245.                                                     {
  246.                                 bflb_spi_poll_send(spi0,bc >> 8);
  247.                                 bflb_spi_poll_send(spi0,bc);
  248.                                                     }
  249.                                             }
  250.                                     }
  251.                     TFT_CS_Set;
  252.                                 }
  253.                     }
  254.                         s+=3;x+=16;
  255.                 }
  256.     }
  257. }

  258. void spi_init()
  259. {
  260.     gpio = bflb_device_get_by_name("gpio");
  261.     /* spi mosi */
  262.     bflb_gpio_init(gpio, MOSI_PIN, GPIO_FUNC_SPI0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  263.     /* spi miso */
  264.     bflb_gpio_init(gpio, MISO_PIN, GPIO_FUNC_SPI0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  265.     /* spi cs */
  266.     bflb_gpio_init(gpio, CS_PIN, GPIO_FUNC_SPI0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  267.     /* spi clk */
  268.     bflb_gpio_init(gpio, CLK_PIN, GPIO_FUNC_SPI0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
  269.     //res
  270.     bflb_gpio_init(gpio, RES_PIN, GPIO_OUTPUT | GPIO_PULLUP);
  271.     // dc
  272.     bflb_gpio_init(gpio, DC_PIN, GPIO_OUTPUT | GPIO_PULLUP);
  273.     // blk
  274.     bflb_gpio_init(gpio, BLK_PIN, GPIO_OUTPUT | GPIO_PULLUP);

  275.     struct bflb_spi_config_s spi_cfg =
  276.     {
  277.         .freq = FREQUARY * 1000 * 1000,
  278.         .role = SPI_ROLE_MASTER,
  279.         .mode = SPI_MODE3,
  280.         .data_width = SPI_DATA_WIDTH_8BIT,
  281.         .bit_order = SPI_BIT_MSB,
  282.         .byte_order = SPI_BYTE_LSB,
  283.         .tx_fifo_threshold = 0,
  284.         .rx_fifo_threshold = 0,
  285.     };
  286.     spi0 = bflb_device_get_by_name("spi0");
  287.     bflb_spi_init(spi0, &spi_cfg);

  288.     bflb_spi_feature_control(spi0, SPI_CMD_SET_CS_INTERVAL, 0);
  289. }

  290. void set_frame_size(u16 x_start, u16 x_end, u16 y_start, u16 y_end)
  291. {
  292.     x_end-=1;
  293.     y_end-=1;
  294.     Lcd_WriteCmd(LCD_CASET);
  295.     Lcd_WriteData(x_start>>8);
  296.     Lcd_WriteData(x_start);
  297.     Lcd_WriteData(x_end>>8);
  298.     Lcd_WriteData(x_end);

  299.     Lcd_WriteCmd(LCD_RASET);
  300.     Lcd_WriteData(y_start>>8);
  301.     Lcd_WriteData(y_start);
  302.     Lcd_WriteData(y_end>>8);
  303.     Lcd_WriteData(y_end);
  304.     Lcd_WriteCmd(LCD_RAMWR);
  305. }

  306. void set_background(u16 color)
  307. {
  308.     u8 i,j;
  309.     set_frame_size(0,0xA0,0x00,0x80);
  310.     TFT_DC_Set;
  311.     TFT_CS_Reset;
  312.     for(i = 0; i < 128; i ++)
  313.     {
  314.         for(j = 0; j < 160; j ++)
  315.         {
  316.             bflb_spi_poll_send(spi0,color >> 8);
  317.             bflb_spi_poll_send(spi0,color);
  318.         }
  319.     }
  320.     TFT_CS_Set;
  321. }

  322. void Lcd_WriteCmd(u8 data)
  323. {
  324.     TFT_DC_Reset;
  325.     TFT_CS_Reset;
  326.     bflb_spi_poll_send(spi0,data);
  327.     TFT_CS_Set;
  328. }

  329. void Lcd_WriteData(u8 data)
  330. {
  331.     TFT_DC_Set;
  332.     TFT_CS_Reset;
  333.     bflb_spi_poll_send(spi0,data);
  334.     TFT_CS_Set;
  335. }

  336. void Lcd_reset()
  337. {
  338.     TFT_RES_Set;
  339.     bflb_mtimer_delay_ms(60);
  340.     TFT_RES_Reset;
  341.     bflb_mtimer_delay_ms(120);
  342.     TFT_RES_Set;
  343.     bflb_mtimer_delay_ms(60);
  344. }

  345. void Lcd_init()
  346. {
  347.     spi_init();
  348.     Lcd_reset();
  349.     TFT_BLK_Set;
  350.     bflb_mtimer_delay_ms(60);
  351.     Lcd_WriteCmd(0x11);//Sleep exit
  352.         bflb_mtimer_delay_ms(120);
  353.         
  354.         //ST7735R Frame Rate
  355.         Lcd_WriteCmd(0xB1);
  356.         Lcd_WriteData(0x01);
  357.         Lcd_WriteData(0x2C);
  358.         Lcd_WriteData(0x2D);
  359.         Lcd_WriteCmd(0xB2);
  360.         Lcd_WriteData(0x01);
  361.         Lcd_WriteData(0x2C);
  362.         Lcd_WriteData(0x2D);
  363.         Lcd_WriteCmd(0xB3);
  364.         Lcd_WriteData(0x01);
  365.         Lcd_WriteData(0x2C);
  366.         Lcd_WriteData(0x2D);
  367.         Lcd_WriteData(0x01);
  368.         Lcd_WriteData(0x2C);
  369.         Lcd_WriteData(0x2D);
  370.         Lcd_WriteCmd(0xB4); //Column inversion
  371.         Lcd_WriteData(0x07);
  372.         
  373.         //ST7735R Power Sequence
  374.         Lcd_WriteCmd(0xC0);
  375.         Lcd_WriteData(0xA2);
  376.         Lcd_WriteData(0x02);
  377.         Lcd_WriteData(0x84);
  378.         Lcd_WriteCmd(0xC1);
  379.         Lcd_WriteData(0xC5);
  380.         Lcd_WriteCmd(0xC2);
  381.         Lcd_WriteData(0x0A);
  382.         Lcd_WriteData(0x00);
  383.         Lcd_WriteCmd(0xC3);
  384.         Lcd_WriteData(0x8A);
  385.         Lcd_WriteData(0x2A);
  386.         Lcd_WriteCmd(0xC4);
  387.         Lcd_WriteData(0x8A);
  388.         Lcd_WriteData(0xEE);
  389.         Lcd_WriteCmd(0xC5); //VCOM
  390.         Lcd_WriteData(0x0E);
  391.         Lcd_WriteCmd(0x36); //MX, MY, RGB mode
  392.         Lcd_WriteData(0xC0);
  393.         
  394.         //ST7735R Gamma Sequence
  395.         Lcd_WriteCmd(0xe0);
  396.         Lcd_WriteData(0x0f);
  397.         Lcd_WriteData(0x1a);
  398.         Lcd_WriteData(0x0f);
  399.         Lcd_WriteData(0x18);
  400.         Lcd_WriteData(0x2f);
  401.         Lcd_WriteData(0x28);
  402.         Lcd_WriteData(0x20);
  403.         Lcd_WriteData(0x22);
  404.         Lcd_WriteData(0x1f);
  405.         Lcd_WriteData(0x1b);
  406.         Lcd_WriteData(0x23);
  407.         Lcd_WriteData(0x37);
  408.         Lcd_WriteData(0x00);         
  409.         Lcd_WriteData(0x07);
  410.         Lcd_WriteData(0x02);
  411.         Lcd_WriteData(0x10);
  412.         Lcd_WriteCmd(0xe1);
  413.         Lcd_WriteData(0x0f);
  414.         Lcd_WriteData(0x1b);
  415.         Lcd_WriteData(0x0f);
  416.         Lcd_WriteData(0x17);
  417.         Lcd_WriteData(0x33);
  418.         Lcd_WriteData(0x2c);
  419.         Lcd_WriteData(0x29);
  420.         Lcd_WriteData(0x2e);
  421.         Lcd_WriteData(0x30);
  422.         Lcd_WriteData(0x30);
  423.         Lcd_WriteData(0x39);
  424.         Lcd_WriteData(0x3f);
  425.         Lcd_WriteData(0x00);
  426.         Lcd_WriteData(0x07);
  427.         Lcd_WriteData(0x03);
  428.         Lcd_WriteData(0x10);  
  429.         Lcd_WriteCmd(0x2a);
  430.         Lcd_WriteData(0x00);
  431.         Lcd_WriteData(0x00);
  432.         Lcd_WriteData(0x00);
  433.         Lcd_WriteData(0x7f);
  434.         Lcd_WriteCmd(0x2b);
  435.         Lcd_WriteData(0x00);
  436.         Lcd_WriteData(0x00);
  437.         Lcd_WriteData(0x00);
  438.         Lcd_WriteData(0x9f);
  439.         
  440.         Lcd_WriteCmd(0xF0); //Enable test command  
  441.         Lcd_WriteData(0x01);
  442.         Lcd_WriteCmd(0xF6); //Disable ram power save mode
  443.         Lcd_WriteData(0x00);
  444.         
  445.         Lcd_WriteCmd(0x3A); //65k mode
  446.         Lcd_WriteData(0x05);
  447.         
  448.         Lcd_WriteCmd(0x29);//Display on         
  449. }

  450. int main(void)
  451. {
  452.     int i;
  453.     board_init();

  454.     Lcd_init();
  455.     set_scan_direction (0xA0);
  456.     set_background(0x0000);
  457.     Show_Ch_GBK16(0,0,0xffff,0x0000,"Hello Word!");
  458.     Show_Ch_GBK16(0,20,0xffff,0x0000,"感谢安信可");
  459.     Show_Ch_GBK16(0,40,0xffff,0x0000,"赠送开发板!");
  460.     while (1)
  461.     {
  462.     }
  463.     return 0;
  464. }
复制代码
按照上文进行编译,烧录,杜邦线接线图如下:
屏幕截图 2024-05-03 154701.png

运行成功

微信图片_20240503163016.jpg

完结撒花!!!!
B站视频链接:【【祖传点灯】安信可赠送核心板】https://www.bilibili.com/video/B ... 4ba122b163c354a4880

参考链接:
【LCD】使用M61-32s 驱动 SPI1.3寸屏幕 - 小安派S1&M61教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
零基础搭建小安派Windows 开发环境 - 小安派S1&M61教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
【祖传点灯】安信可Ai-M61-32S环境搭建&点灯 - 板子申请专区 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
屏幕截图 2024-05-03 161056.png
屏幕截图 2024-05-03 162541.png
屏幕截图 2024-05-03 113112.png
屏幕截图 2024-05-03 152559.png
屏幕截图 2024-05-03 152613.png
屏幕截图 2024-05-03 152926.png
回复

使用道具 举报

及辰 | 2024-5-3 21:28:43 | 显示全部楼层
完结撒花,如果有问题和代码需求可以私戳我
回复 支持 反对

使用道具 举报

1055173307 | 2024-5-20 10:25:39 | 显示全部楼层
回复

使用道具 举报

noonezero | 2024-6-7 18:39:54 | 显示全部楼层
厉害了
回复

使用道具 举报

楚华 | 2024-6-14 11:42:13 | 显示全部楼层
学习了
回复

使用道具 举报

timo | 2024-6-21 09:10:20 | 显示全部楼层
这个是什么屏幕驱动
回复 支持 反对

使用道具 举报

sansui | 2024-7-4 14:09:56 | 显示全部楼层
膜拜
回复

使用道具 举报

物联网 | 2024-7-25 13:51:30 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则