数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 612|回复: 21

[C51] STC32G单片机硬件LCM接口16位并口驱动3.5寸ST7796彩屏 分享源码

[复制链接]
发表于 2025-8-11 11:29:40 | 显示全部楼层 |阅读模式
本帖最后由 慕名而来 于 2025-8-11 11:29 编辑

前些时有心想仿制STC老梁的示波器玩玩,就上网找了一个并口屏,STC官网上有视频展示16位并口刷新速度可以达到视频级刷屏效果,只是原文用的是ILI9481驱动的屏而我入手的是ST7796驱动的屏,我相中这块屏的地方是它引出了M0、M1、M2引脚,在底板上通过电阻配置这三个引脚的电平可以实现mcu8bit/16bit并口及SPI串口多种接口驱动模式,新屏入手总是心情激动跃跃欲试,经过几天的努力并在高人的指点下终于搞定了,在此分享源码、如果谁有兴趣就一起玩玩吧。

单片机的型号为:STC32G12K128
它的LCM接口又叫做TFT彩屏接口(8/16位I8080/M6800接口),使用这个接口需要配置相关寄存器,其中1-4个寄存器用于定义引脚、使能接口、使能中断、接口模式的配置,第5个寄存器是输出/输入数据寄存器,无需配置直接使用就可以了,详见下列图片:





使用硬件LCM接口时,虽然上述图片上的东西看着挺复杂的,但是配置上述提到的寄存器其实只需要两行代码:

  1. //----16BIT-8080-硬件LCM接口初始化------
  2. void LCM_Config(void)
  3. {
  4.     LCMIFCFG = 0x82;//BD7=1 (使能LCM接口中断),B3、B2        =00 (16bit总线时P2=高8位、P0=低8位),B1=1 (16bit接口),B0=0 (I8080接口模式)
  5.     LCMIFCFG2 = 0x09;        //RS:P45,RD:P44,WR:P42; Setup Time=2,HOLD Time=1
  6.     LCMIFSTA = 0x00;//清除LCM中断标志
  7. }
复制代码



配置好了上述寄存器后接下来要用到的就是所有LCD屏驱动中都有的两个基础函数;
1.写指令函数
  1. //LCM接口中断模式发送指令、数据的相关函数
  2. //----写指令函数------------------------
  3. void LCD_WR_REG(u8 cmd)
  4. {
  5.     LCMIFDATH = 0;
  6.     LCMIFDATL = cmd;  //(低8位=cmd)
  7.     LCD_CS_CLR();
  8.     LCMIFCR = 0x84;  //使能LCM接口、发送"写命令"脉冲
  9. }
复制代码

2.写数据函数:

  1. //----写8bit数据函数-------------------
  2. void  LCD_WR_DATA(u8 dat)
  3. {
  4.     LCMIFDATH = 0;
  5.     LCMIFDATL = dat;//(低8位=dat)
  6.     LCD_CS_CLR();
  7.     LCMIFCR = 0x85;  //使能LCM接口、发送"写数据"脉冲
  8. }
复制代码


还有一个经常用到的就是写16位数据的函数:
  1. //----写入16bit颜色数据函数------------
  2. //输出R-5BIT,G-6BIT,B-5BIT
  3. void LCD_RGB_DATA(u16 dat)
  4. {
  5.     LCMIFDATH = ((u8)(dat >> 8));        //发送数据高8位字节
  6.     LCMIFDATL = ((u8)dat);                        //发送数据低8位字节
  7.     LCD_CS_CLR();
  8.     LCMIFCR = 0x85;  //使能LCM接口、发送"写数据"脉冲
  9. }
复制代码

使用STC32G硬件LCM接口驱动ST7796彩屏有两种驱动方式,1.查询方式,可不开启LCM接口中断。2.中断方式,需要开启LCM接口中断并且配备中断函数。我分享的代码中两种方式的代码都有,可以根据用途选择使用那种驱动方式,对于我的这块屏幕感觉使用中断方式显示更加稳定,这段代码在调试时因为开启了中断而没有匹配中断函数很久没有调好,后来到相关论坛求问并得到了详细的指点后才实现了刷屏在此一并谢过。

完整代码如下:
1. .c文件

  1. #include "LCD.h"
  2. #include "delay.h"
  3. //--------------------------------------------------

  4. //--------------------------------------------------
  5. unsigned char code shu_zi_32[] =
  6. {
  7. //32*32数码数字
  8.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0,
  9.     0x03, 0x7F, 0xFF, 0xB0, 0x07, 0x80, 0x00, 0x78, 0x07, 0xC0, 0x00, 0xF8, 0x07, 0xC0, 0x00, 0xF8,
  10.     0x07, 0xC0, 0x00, 0xF8, 0x0F, 0xC0, 0x01, 0xF8, 0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x80, 0x01, 0xF0,
  11.     0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x00, 0x01, 0xF0, 0x06, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00,
  12.     0x0E, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x03, 0xE0,
  13.     0x1F, 0x00, 0x03, 0xE0, 0x3F, 0x00, 0x03, 0xE0, 0x3E, 0x00, 0x07, 0xE0, 0x3E, 0x00, 0x07, 0xC0,
  14.     0x3E, 0x00, 0x07, 0xC0, 0x3E, 0x00, 0x07, 0xC0, 0x3C, 0x00, 0x07, 0xC0, 0x1B, 0xFF, 0xFB, 0xC0,
  15.     0x07, 0xFF, 0xFD, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0

  16.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
  17.     0x00, 0x00, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00,
  18.     0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00,
  19.     0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
  20.     0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00,
  21.     0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00,
  22.     0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00,
  23.     0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //1

  24.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xC0,
  25.     0x00, 0xFF, 0xFF, 0xB0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8,
  26.     0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0,
  27.     0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0xFF, 0xFD, 0xE0, 0x01, 0xFF, 0xFE, 0xC0,
  28.     0x0E, 0xFF, 0xFE, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
  29.     0x1F, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
  30.     0x3E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x1B, 0xFF, 0xFE, 0x00,
  31.     0x07, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //2

  32.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0,
  33.     0x00, 0x7F, 0xFF, 0xB0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8,
  34.     0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0,
  35.     0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0xFF, 0xFE, 0xE0, 0x01, 0xFF, 0xFF, 0x00,
  36.     0x00, 0xFF, 0xFE, 0xC0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0,
  37.     0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xC0,
  38.     0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x03, 0xFF, 0xFB, 0xC0,
  39.     0x07, 0xFF, 0xFD, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //3

  40.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  41.     0x03, 0x00, 0x00, 0x30, 0x07, 0x80, 0x00, 0x78, 0x07, 0xC0, 0x00, 0xF8, 0x07, 0xC0, 0x00, 0xF8,
  42.     0x07, 0xC0, 0x00, 0xF8, 0x0F, 0xC0, 0x01, 0xF8, 0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x80, 0x01, 0xF0,
  43.     0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x00, 0x01, 0xF0, 0x06, 0xFF, 0xFE, 0xE0, 0x01, 0xFF, 0xFF, 0x00,
  44.     0x00, 0xFF, 0xFE, 0xC0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0,
  45.     0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xC0,
  46.     0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x03, 0xC0,
  47.     0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //4

  48.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0,
  49.     0x03, 0x7F, 0xFF, 0x80, 0x07, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00,
  50.     0x07, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
  51.     0x0F, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00,
  52.     0x00, 0xFF, 0xFE, 0xC0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0,
  53.     0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xC0,
  54.     0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x03, 0xFF, 0xFB, 0xC0,
  55.     0x07, 0xFF, 0xFD, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //5

  56.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xC0,
  57.     0x03, 0x7F, 0xFF, 0x80, 0x07, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00,
  58.     0x07, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
  59.     0x0F, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00,
  60.     0x0E, 0xFF, 0xFE, 0xC0, 0x1F, 0x00, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x03, 0xE0,
  61.     0x1F, 0x00, 0x03, 0xE0, 0x3F, 0x00, 0x03, 0xE0, 0x3E, 0x00, 0x07, 0xE0, 0x3E, 0x00, 0x07, 0xC0,
  62.     0x3E, 0x00, 0x07, 0xC0, 0x3E, 0x00, 0x07, 0xC0, 0x3C, 0x00, 0x07, 0xC0, 0x1B, 0xFF, 0xFB, 0xC0,
  63.     0x07, 0xFF, 0xFD, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //6

  64.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0x80,
  65.     0x00, 0xFF, 0xFF, 0x60, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0,
  66.     0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0,
  67.     0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,
  68.     0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0,
  69.     0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0x80,
  70.     0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x80,
  71.     0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //7

  72.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xA0,
  73.     0x03, 0x7F, 0xFF, 0x70, 0x07, 0x80, 0x00, 0xF8, 0x07, 0xC0, 0x00, 0xF8, 0x07, 0xC0, 0x00, 0xF8,
  74.     0x07, 0xC0, 0x00, 0xF8, 0x0F, 0xC0, 0x01, 0xF0, 0x0F, 0xC0, 0x01, 0xF0, 0x0F, 0x80, 0x01, 0xF0,
  75.     0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x00, 0x01, 0xE0, 0x06, 0xFF, 0xFE, 0xC0, 0x01, 0xFF, 0xFF, 0x00,
  76.     0x06, 0xFF, 0xFE, 0xC0, 0x0F, 0x00, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x03, 0xE0,
  77.     0x1F, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x03, 0xE0, 0x3E, 0x00, 0x07, 0xC0,
  78.     0x3E, 0x00, 0x07, 0xC0, 0x3E, 0x00, 0x07, 0xC0, 0x3C, 0x00, 0x07, 0xC0, 0x1B, 0xFF, 0xFB, 0x80,
  79.     0x07, 0xFF, 0xFD, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //8

  80.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xA0,
  81.     0x03, 0x7F, 0xFF, 0x70, 0x07, 0x80, 0x00, 0xF8, 0x07, 0xC0, 0x00, 0xF8, 0x07, 0xC0, 0x00, 0xF8,
  82.     0x07, 0xC0, 0x00, 0xF8, 0x0F, 0xC0, 0x01, 0xF0, 0x0F, 0xC0, 0x01, 0xF0, 0x0F, 0x80, 0x01, 0xF0,
  83.     0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x00, 0x01, 0xE0, 0x06, 0xFF, 0xFE, 0xC0, 0x01, 0xFF, 0xFF, 0x00,
  84.     0x00, 0xFF, 0xFE, 0xC0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0,
  85.     0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xC0,
  86.     0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x03, 0xFF, 0xFB, 0x80,
  87.     0x07, 0xFF, 0xFD, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //9

  88.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  89.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  90.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  91.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00,
  92.     0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  93.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  94.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  95.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //.

  96.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  97.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  98.     0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00,
  99.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  100.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  101.     0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
  102.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  103.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //:
  104. };
  105. /*
  106. //----16BIT-8080-硬件LCM接口初始化------
  107. void LCM_Config(void)
  108. {
  109.         LCMIFCFG = 0x02;//BD7=0 (不使能LCM接口中断),B3、B2        =00 (16bit总线时P2=高8位、P0=低8位),B1=1 (16bit接口),B0=0 (I8080接口模式)
  110.         LCMIFCFG2 = 0x09;        //RS:P45,RD:P44,WR:P42; Setup Time=2,HOLD Time=1
  111.         LCMIFSTA = 0x00;//清除LCM中断标志
  112. }
  113. //LCM接口查询模式发送指令、数据的相关函数
  114. //----写指令函数------------------------
  115. void LCD_WR_REG(u8 cmd)
  116. {
  117. LCMIFDATH = 0;
  118. LCMIFDATL = cmd;  //(低8位=cmd)
  119. LCD_CS_CLR();
  120. LCMIFCR = 0x84;  //使能LCM接口、发送"写命令"脉冲
  121. while(!LCMIFSTA);
  122. LCMIFSTA=0x00;
  123. LCD_CS_SET();
  124. }
  125. //----写8bit数据函数-------------------
  126. void  LCD_WR_DATA(u8 dat)
  127. {
  128. LCMIFDATH = 0;
  129. LCMIFDATL = dat;//(低8位=dat)
  130. LCD_CS_CLR();
  131. LCMIFCR = 0x85;  //使能LCM接口、发送"写数据"脉冲
  132. while(!LCMIFSTA);
  133. LCMIFSTA=0x00;
  134. LCD_CS_SET();
  135. }
  136. //----写入16bit颜色数据函数------------
  137. //输出R-5BIT,G-6BIT,B-5BIT
  138. void LCD_RGB_DATA(u16 dat)
  139. {
  140. LCMIFDATH = ((u8)(dat>>8));        //发送数据高8位字节
  141. LCMIFDATL = ((u8)dat);                        //发送数据低8位字节
  142. LCD_CS_CLR();
  143. LCMIFCR = 0x85;  //使能LCM接口、发送"写数据"脉冲
  144. while(!LCMIFSTA);
  145. LCMIFSTA=0x00;
  146. LCD_CS_SET();
  147. }
  148. */


  149. //----16BIT-8080-硬件LCM接口初始化------
  150. void LCM_Config(void)
  151. {
  152.     LCMIFCFG = 0x82;//BD7=1 (使能LCM接口中断),B3、B2        =00 (16bit总线时P2=高8位、P0=低8位),B1=1 (16bit接口),B0=0 (I8080接口模式)
  153.     LCMIFCFG2 = 0x09;        //RS:P45,RD:P44,WR:P42; Setup Time=2,HOLD Time=1
  154.     LCMIFSTA = 0x00;//清除LCM中断标志
  155. }
  156. //LCM接口中断模式发送指令、数据的相关函数
  157. //----写指令函数------------------------
  158. void LCD_WR_REG(u8 cmd)
  159. {
  160.     LCMIFDATH = 0;
  161.     LCMIFDATL = cmd;  //(低8位=cmd)
  162.     LCD_CS_CLR();
  163.     LCMIFCR = 0x84;  //使能LCM接口、发送"写命令"脉冲
  164. }
  165. //----写8bit数据函数-------------------
  166. void  LCD_WR_DATA(u8 dat)
  167. {
  168.     LCMIFDATH = 0;
  169.     LCMIFDATL = dat;//(低8位=dat)
  170.     LCD_CS_CLR();
  171.     LCMIFCR = 0x85;  //使能LCM接口、发送"写数据"脉冲
  172. }
  173. //----写入16bit颜色数据函数------------
  174. //输出R-5BIT,G-6BIT,B-5BIT
  175. void LCD_RGB_DATA(u16 dat)
  176. {
  177.     LCMIFDATH = ((u8)(dat >> 8));        //发送数据高8位字节
  178.     LCMIFDATL = ((u8)dat);                        //发送数据低8位字节
  179.     LCD_CS_CLR();
  180.     LCMIFCR = 0x85;  //使能LCM接口、发送"写数据"脉冲
  181. }
  182. //----LCM中断函数----------------------
  183. void LCM_Interrupt(void) interrupt 59
  184. {
  185.     LCMIFSTA = 0x00;
  186.     LCD_CS_SET();
  187. }

  188. //----ST7796液晶屏初始化(简化版)---------------
  189. void LCD_Init(void)
  190. {

  191.     LCD_RST = 1;
  192.     delay_ms(50);
  193.     LCD_RST = 0;
  194.     delay_ms(50);
  195.     LCD_RST = 1;
  196.     delay_ms(50);

  197.     LCD_WR_REG(0x11);            // 退出睡眠
  198.     delay_ms(120);               

  199.     LCD_WR_REG(0x36);                        // 屏显模式
  200.     LCD_WR_DATA(0x28);                // 横屏 0x2a=x,0x2b=y //屏幕横放、接线口在左侧,上至下扫描&向上显示字符(正显)

  201.     LCD_WR_REG(0x3A);            // 像素格式
  202.     LCD_WR_DATA(0x55);    // 16-bit(RGB565)

  203.     LCD_WR_REG(0x29);
  204.     delay_ms(100);

  205. }

  206. //---------------------------------------------------------
  207. void LCD_SetPos(u16 x0, u16 x1, u16 y0, u16 y1)
  208. {
  209. //横屏显示
  210.     LCD_WR_REG(0x2a);
  211.     LCD_WR_DATA((u8)(x0 >> 8));                //起始列地址高8位SC(15:8]
  212.     LCD_WR_DATA((u8)x0);        //起始列地址低8位SC[7:0]
  213.     LCD_WR_DATA((u8)(x1 >> 8));                //终止列地址高8位EC[15:8]
  214.     LCD_WR_DATA((u8)x1);        //终止列地址低8位EC[7:0]
  215.     LCD_WR_REG(0x2b);
  216.     LCD_WR_DATA((u8)(y0 >> 8));                //行地址同上操作
  217.     LCD_WR_DATA((u8)y0);
  218.     LCD_WR_DATA((u8)(y1 >> 8));
  219.     LCD_WR_DATA((u8)y1);
  220.     LCD_WR_REG(0x2c);//开始写入GRAM;地址指针累加
  221. }
  222. //----全屏刷新一种颜色----------------------------------------------------
  223. void ClearScreen(u16 color)
  224. {
  225.     uint i, j;
  226.     LCD_SetPos(0, 480 - 1, 0, 320 - 1);        //给出起始与终止坐标

  227.     for(i = 0; i < 320; i++)                        //
  228.     {
  229.         for(j = 0; j < 480; j++) //横屏显示
  230.             LCD_RGB_DATA(color);
  231.     }
  232. }
  233. //====32*32数码字型显示函数==================================================
  234. //使用单片机内部存储的32*32特殊字型数组,bit mode
  235. void Put32_32(uint x, uint y, uchar shuzi)//, uint fColor
  236. {
  237.     uchar i, j, m;
  238.     LCD_SetPos(x, x + 32 - 1, y, y + 32 - 1);

  239.     for(i = 0; i < 128; i++)
  240.     {
  241.         m = shu_zi_32[shuzi * 128 + i];

  242.         for(j = 0; j < 8; j++)
  243.         {
  244.             if((m & 0x80) == 0x80)
  245.             {
  246.                 LCD_RGB_DATA(Black);
  247.             }
  248.             else
  249.             {
  250.                 LCD_RGB_DATA(White);
  251.             }

  252.             m <<= 1;
  253.         }
  254.     }
  255. }
复制代码


2. .h文件:

  1. #ifndef __LCD_H
  2. #define __LCD_H
  3. #include <STC32G.h>

  4. //----RGB-16bit色值表--------------------
  5. #define White                0xFFFF
  6. #define Black                0x0000
  7. #define Red                        0xF800
  8. #define Yellow        0xFFE0
  9. #define Blue                0x001F
  10. #define Green                0x07E0
  11. #define Blue2                0x051F
  12. #define Magenta        0xF81F
  13. #define Cyan                0x7FFF

  14. //-----16bit-8080总线端口配置--------------------------------------
  15. //使用LCM硬件接口完成相关寄存器配置后无需再次定义以下接口引脚
  16. //sbit LCD_RS  = P4^5;
  17. //sbit LCD_RD  = P4^4;
  18. //sbit LCD_WR  = P4^2;
  19. //sfr         LCD_BUS_H = 0xA0;        //P0--0x80,P1=0x90,P2=0xA0,P3=0x0B0, P6= 0xE8
  20. //sfr         LCD_BUS_L = 0x80;        //P0--0x80,P1=0x90,P2=0xA0,P3=0x0B0, P6= 0xE8
  21. //LCD屏的CS、RST引脚不在LCM接口控制范围内、需要单独定义引脚
  22. sbit LCD_CS  = P1^1;
  23. sbit LCD_RST = P1^0;
  24. /**** LCD基本操作宏定义 ***********/
  25. #define LCD_CS_SET()                LCD_CS = 1
  26. #define LCD_CS_CLR()                LCD_CS = 0
  27. #define LCD_RST_SET()                LCD_RST = 1
  28. #define LCD_RST_CLR()                LCD_RST = 0
  29. #define LCD_RS_SET()                LCD_RS = 1
  30. #define LCD_RS_CLR()                LCD_RS = 0
  31. #define LCD_WR_SET()                LCD_WR = 1
  32. #define LCD_WR_CLR()                LCD_WR = 0
  33. #define LCD_RD_SET()                LCD_RD = 1
  34. #define LCD_RD_CLR()                LCD_RD = 0
  35. #define LCD_WriteWord(n)         LCD_BUS_H = (u8)(n>>8); LCD_BUS_L = (u8)n; NOP1();        LCD_WR_CLR(); NOP1();        LCD_WR_SET();        NOP1();        
  36. #define        LCD_WR_PULSE()                NOP1();        LCD_WR_CLR(); NOP1();        LCD_WR_SET()
  37. //-----------声明函数---------------------------------
  38. void LCM_Config(void);
  39. void LCD_WR_REG(u8 dat);
  40. void LCD_WR_DATA(u8 dat);
  41. void LCD_RGB_DATA(u16 dat);
  42. void LCD_SetPos(u16 x0,u16 x1,u16 y0,u16 y1);
  43. void ClearScreen(uint bColor);
  44. void Put32_32(uint x, uint y, uchar shuzi);//, uint fColor

  45. #endif
复制代码

3. 主函数文件:


  1. #include "STC32G.h"
  2. #include "ST7796.h"
  3. #include "LCD.h"
  4. #include "delay.h"
  5. //=============================================
  6. void main()
  7. {
  8. EAXSFR();//使能P_SW2
  9. GPIO_set();//所有I/O口初始化(准双向口)
  10. WTST = 0;
  11. P2M0 = 0xff; //P2口推挽输出做高8位数据输出口
  12. P2M1 = 0x00;
  13. P0M0 = 0xff; //P0口推挽输出做低8位数据输出口
  14. P0M1 = 0x00;         
  15. P4M0 |= 0x34; //P4.5、P4.4、P4.2推挽输出
  16. P4M1 &= ~0x34;  
  17. P1M0 |= 0x03;        //P1.0、P1.1推挽输出
  18. P1M1 &= ~0x03;
  19. P0PU = 0xff; //P0各口配置4k上拉电阻
  20. P2PU = 0xff; //P2各口配置4k上拉电阻
  21. P1PU |= 0x03;//P1.0、P1.1配置4k上拉电阻
  22. P4PU |= 0x34;//P4.5、P4.4、P4.2配置4k上拉电阻
  23. EA = 1;
  24. LCM_Config();
  25. LCD_Init();   //TFT初始化
  26. ClearScreen(Blue);//清屏、显示白屏
  27. while(1)
  28. {
  29. Put32_32(100, 100, 7);
  30. delay_ms(1000);
  31. /*
  32. ClearScreen(Red);
  33. delay_ms(1000);
  34. ClearScreen(Green);
  35. delay_ms(1000);
  36. ClearScreen(Blue);
  37. delay_ms(1000);
  38. ClearScreen(Yellow);
  39. delay_ms(1000);
  40. ClearScreen(White);
  41. delay_ms(1000);
  42. */
  43.     }
  44. }
复制代码


屏幕图片如下:






本帖子中包含更多资源

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

x

打赏

参与人数 2家元 +138 收起 理由
家睦 + 120
deyafe + 18 優秀文章

查看全部打赏

发表于 2025-8-11 11:48:27 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2025-8-11 11:49:55 | 显示全部楼层
蛮漂亮

谢谢分享
回复 支持 反对

使用道具 举报

发表于 2025-8-11 12:38:44 | 显示全部楼层

谢谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2025-8-11 13:13:52 | 显示全部楼层
谢谢楼主分享。
回复 支持 反对

使用道具 举报

发表于 2025-8-11 15:50:31 | 显示全部楼层
近几年的stc单片机能比AVR的强了嘛?
回复 支持 反对

使用道具 举报

发表于 2025-8-11 17:55:40 来自手机浏览器 | 显示全部楼层
32的和stc8h8k64的引脚对应?可以替换吗?
我趁红包买了8h8k的,刚玩通了硬件spi
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-11 18:23:25 | 显示全部楼层
nokia5320 发表于 2025-8-11 17:55
32的和stc8h8k64的引脚对应?可以替换吗?
我趁红包买了8h8k的,刚玩通了硬件spi ...

这个不能替换,STC32的程序需要用C251编译而8H8K用C51编译。下图这里不一样:

看看数据手册也能了解他俩的不同之处入下图:

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-8-12 02:41:49 | 显示全部楼层
请教下,按照 8bit-8080 接口的时序,对液晶执行写入无非就是:
  DATA=xxx,  RS=xxx,  WR=L,  WR=H

过了下代码, STC 硬件接口无非是把 RS=xxx,  WR=L,  WR=H 集成到了一条语句里,
甚至之后还要有额外的 while 等待执行完成。这样的硬件能提升多少效率?

感觉大头(加载指令、加载数据)都没怎么能加速啊
回复 支持 反对

使用道具 举报

发表于 2025-8-12 11:56:48 | 显示全部楼层
32G12K128驱动OLED12864,
1, 普通I/O模拟SPI
2, 硬件SPI接口方式+双页显示
使用普通IO模拟SPI接口方式来驱动OLED(SSD1306)显示屏,
可以不必研究STC有关SPI寄存器的定义和使用方法,
只要根据实际应用电路,定义引脚和显示方向即可。
因此使用非常简单、移植方便,适用于各种CPU型号的单片机。
回复 支持 反对

使用道具 举报

发表于 2025-8-12 13:32:07 | 显示全部楼层
先以屠龙刀三核心实验板为例, 后以 32G12K128_V9.62实验箱为例,
展示驱动显示的实际效果, 如图所示:
屠龙刀三驱动OLED:





V9.62实验箱驱动OLED: (设置显示方向与屠龙刀三相反)



这两者区别仅仅在于I/O接口和显示方向的定义不同, 其余完全相同.

演示主程序源码(屠龙刀三): 各函数功能测试见注释说明。

//********************************************************************************
// 名称: Main.C
// 基于: STC32G12K128 V9.62 实验箱  / 屠龙刀三核心实验板
// 实验: OLED 12864 显示屏 SSD1306 驱动
// 编程: 浦晓明(浦江一水) 2023-12-16
//********************************************************************************
#include "STC32G_SYS.H"
#include "SSD1306.H"
#include "pic.h"


/** 全局变量说明 设为全局,便于调试观察... **************/
//========================================================================
// 函数: void  delay_ms(unsigned int ms)
// 描述: 毫秒级延时函数。
// 参数: ms,要延时的ms数,自动适应主时钟.
//=====================================================================
void  delay_ms(unsigned int ms)
{ unsigned int i;
  do{ i = MAIN_Fosc / 6000;
      while(--i);
    } while(--ms);
}
/**** 主函数入口 ************************/
void main(void)
{
  SYS_Init();                   //系统初始化   
  OLED_Init();                 //初始化
  OLED_CLS();                //清屏
  OLED_Light(0);             //最低亮度(实际暗亮,不灭)
  OLED_Light(0xFF);        //最高亮度
  OLED_Light(0xCF);        //初始亮度(较最高略暗)
  OLED_HZ16(10,1,"单",0,1);  //测试汉字。 文本显示: X水平坐标0..127点(列) Y垂直坐标0..7页(行)
  OLED_HZ16(26,1,"片",0,1);
  OLED_HZ16(42,1,"机",0,1);
  OLED_A16(60,1,'O',0,1);     //8*16字符
  OLED_A08(68,2,'k',0,1);      //5*7字符
  OLED_String(10,4,"ABCDEFG",0,1);  //测试字符串...
  OLED_Str5x7(10,6,"0123456789ABCD",0,1);
  delay_ms(1000);
  //主循环...
  while(1)
  { OLED_BMP(0,0,128,8,OLED12864_IMG0[0],1); //显示BMP图片   图形显示: X水平坐标0..127点(列) Y垂直坐标0..63点(行)
    delay_ms(2000);
    OLED_BMP(0,0,128,8,OLED12864_IMG1[0],0);
    OLED_String(0,0,"STC32",0,1);                        //在图上叠加文字...
    delay_ms(2000);
    OLED_CLS();                                                  //清屏
    OLED_String(5,1,"单片机STC32G",0,1);            //中西文混合显示
    OLED_String(5,3,"单片机STC32G",1,1);            //反显
    OLED_Str5x7(16,6,"STC32G12K128",0,1);        //正显  
    OLED_Str5x7(16,7,"STC32G12K128",1,1);        //反显
    delay_ms(2000);
    OLED_CLS();                                                  //清屏
    OLED_LineH(10,10,108,0);                              //画一水平线(不刷新显示)
    OLED_LineV(10,10,44,0);                                //画一垂直线
    OLED_Line(10,10,118,54,0);                           //两点一线 不同方向画线...
    OLED_Line(10,54,118,10,0);                           //两点一线
    OLED_Line(118,54,118,10,0);                         //两点一线
    OLED_Line(118,54,10,54,0);                          //两点一线
    OLED_Box(0,0,127,63,1);                              //画一方框(立即刷新显示)
    OLED_Circle(64,32,30,1);                              //画一个圆(立即刷新显示)
    delay_ms(2000);
  }  
}

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-8-12 13:40:35 | 显示全部楼层
Ai8051U 视频级 刷 TFT 彩屏===不做电视,做智能设备的 TFT彩屏 显示足够了用的是 DMA-P2P, 外设直接送外设 去刷屏,不经过CPU !现在 刷彩屏,跟CPU无关了,CPU是休息的 !外设自己去干活Ai8051U 视频级 TFT彩屏 播放,QSPI-Flash, DMA-P2P直送,i8080并口TFT
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-12 14:43:49 | 显示全部楼层
t3486784401 发表于 2025-8-12 02:41
请教下,按照 8bit-8080 接口的时序,对液晶执行写入无非就是:
  DATA=xxx,  RS=xxx,  WR=L,  WR=H

多谢临帖,请教就不敢当了我只是简单的玩一玩单片机,经常看你的帖子感觉你才是内行,STC单片机的LCM接口我也是第一次试着玩一下,效率问题我搞不清楚,不开中断用查询方式时需要while等待中断请求标志出现后由软件清零再发送下一个数据,而中断方式工作时无需while等待的只需要在中断函数中清除标志就好了。
回复 支持 反对

使用道具 举报

发表于 2025-8-12 16:37:08 | 显示全部楼层
慕名而来 发表于 2025-8-12 14:43
多谢临帖,请教就不敢当了我只是简单的玩一玩单片机,经常看你的帖子感觉你才是内行,STC单片机的LCM接口 ...

谦虚了,能把 STC 新技术研究这么透彻也是很难得的。

按着 51 的设计,本来就支持硬件 8080 总线,换我大概就直接上 8080 总线了(MOVX @R0 或者 @DPTR);
RS 用总线高地址解决,总线低地址直接对接 8bit 数据口。

不过看样子 STC 是想把 MCU 接口的液晶直接整合成通用外设,这看起来任重而道远。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-12 19:49:31 | 显示全部楼层
t3486784401 发表于 2025-8-12 16:37
谦虚了,能把 STC 新技术研究这么透彻也是很难得的。

按着 51 的设计,本来就支持硬件 8080 总线,换我大 ...

我也是根据官网例程边学边用,一般实现了自己的控制后也就不深入琢磨了,分享一点学习心得也是为了和感兴趣的朋友交流探讨。
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
慕名而来 发表于 2025-8-12 19:49
我也是根据官网例程边学边用,一般实现了自己的控制后也就不深入琢磨了,分享一点学习心得也是为了和感兴 ...

单片机接彩屏液晶,纯硬件方案大多对接 RGB 接口液晶,把单片机一段内存直接映射成显存;
小一点的单片机,大多使用 MCU 接口液晶,分并口和串口总线,但大多数都要模拟时序。

还以为 STC 把 MCU 接口液晶也实现了纯硬件方案,细看来还是 8080 的升级版
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
本帖最后由 慕名而来 于 2025-8-13 09:55 编辑
t3486784401 发表于 2025-8-13 01:27
单片机接彩屏液晶,纯硬件方案大多对接 RGB 接口液晶,把单片机一段内存直接映射成显存;
小一点的单片机 ...

原来如此,STC作为51单片机即使再增强也无法驱动RGB接口的,多年前刚刚上手各种小彩屏时因为廉价的RGB接口屏较多也简单的了解了一点MCU直接驱动的方案,记得当时连STM32也很少有能做到的就放弃了,此后只找带MCU接口的屏幕买,也只有这种屏能使用51单片机来驱动,一般驱动速度也比较低,这次弄这个并口屏与这个单片机就是想试试最终采用LCM+LCM_DMA方案能有啥效果,目前来看仅使用LCM接口的刷屏效果还是不错的,毕竟这个接口在中断方式下简化了两个基础函数、再有1T模式速度与35MHz时钟的加持,速度是够用的,如果再加持DMA打包发送数据会大大减轻mcu的工作压力,我个人认为这款单片机别管标称了32或宣传的如何强大、只要把它放在51或251单片机的位置上用就真的没啥说的,有很多人把它和STM32相比较就不公平了。
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
羡慕有技术的人
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
慕名而来 发表于 2025-8-13 09:54
原来如此,STC作为51单片机即使再增强也无法驱动RGB接口的,多年前刚刚上手各种小彩屏时因为廉价的RGB接口 ...

是的,在硬件上 STC 确实有他的独到之处,要是能推动统一下 MCU 接口液晶就更好了。

我手头项目用 GD32F1 / F3 / F4 带彩屏,也还是 MCU 接口模拟时序,反正 CPU 足够快不差那么点时间。
倒是屏分辨率大到一定程度后(例如 >480x320),就很少有 MCU 接口屏了,毕竟 8080 总线会成为刷屏瓶颈。
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
t3486784401 发表于 2025-8-13 12:54
是的,在硬件上 STC 确实有他的独到之处,要是能推动统一下 MCU 接口液晶就更好了。

我手头项目用 GD32F ...

以前就关注你的帖子,比如:人芯合一:从NT7086液晶屏讲起,将320240把玩成各种意义上的模块(原创)
https://www.mydigit.cn/forum.php ... amp;fromuid=1505079
(出处: 数码之家)
你玩这些东西很有章法,可以说是路径清晰逻辑明确很专业,我只是从使用单片机入手学习单片机、学习编程的,只是用到哪里就了解到哪里学的不系统也不透彻,曾经也想入门STM32单片机但弄了一阵子后发现那些库实在麻烦就不理会了,现在玩的也少了就弄熟悉的STC单片机玩玩算了。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-20 03:01 , Processed in 0.140400 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表