找回密码
 立即注册
楼主: ercircle

AiCube 图形化自动生成程序,TFT-彩屏@Ai8051U, 驱动 ST7735S,ST7739, ST7789

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:474
  • 最近打卡:2026-05-14 08:50:14

3

主题

53

回帖

1924

积分

金牌会员

积分
1924
发表于 2026-4-14 17:08:52 | 显示全部楼层
拉布*** 发表于 2026-4-14 17:05
原点坐标不对怎么设置,还有怎么手动配置AICUBE

我在尝试使用aibude配置8051U-32的MCU,不知道怎么配置QSPI外设
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2026-05-14 08:52:33
已绑定手机

108

主题

4397

回帖

9850

积分

荣誉版主

无情的代码机器

积分
9850
发表于 2026-4-14 17:31:55 | 显示全部楼层
拉布*** 发表于 2026-4-14 17:05
原点坐标不对怎么设置,还有怎么手动配置AICUBE,我在尝试使用stc8051u-34k64配置qspi,但是不知道配置步骤 ...


原点行列差值也是卖家提供,例程里可以搜EXAMPLE_LCD_X_GAP,EXAMPLE_LCD_Y_GAP

aicube教程:
程序自动生成器,AiCube-ISP V6.96T, STC89/15/STC8H/STC32/8051U - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯人工智能技术交流网站 - AI32位8051交流社区


qspi的你可以打开我上面那个工程参考
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2026-05-14 08:52:33
已绑定手机

108

主题

4397

回帖

9850

积分

荣誉版主

无情的代码机器

积分
9850
发表于 2026-4-15 17:28:28 | 显示全部楼层
拉布*** 发表于 2026-4-10 17:27
AI8051U可以测试一下?

画点,画线,画图最终都是矩阵填充,1x1,1xn,nxn
都可参考这个函数lcd_fill_area


具体实现可借鉴实验箱例程:
https://www.stcaimcu.com/data/do ... -DEMO-CODE-V1.2.zip
AI8051U-DEMO-CODE-V1.2\Ai8051U-32Bit\37.2-2.4寸ILI9341驱动TFT显示屏实验程序-带触摸功能,硬件I8080接口程序
截图202604151727231880.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:474
  • 最近打卡:2026-05-14 08:50:14

3

主题

53

回帖

1924

积分

金牌会员

积分
1924
发表于 2026-4-16 15:49:33 | 显示全部楼层
erci*** 发表于 2026-4-15 17:28
画点,画线,画图最终都是矩阵填充,1x1,1xn,nxn
都可参考这个函数lcd_fill_area

我现在基于你那个QSPI的工程,想添加一个这个函数LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd),但是不知道如何处理。


以下是官方例程里面的处理方式,

void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
{
    LCD_WR_REG(lcddev.setxcmd);   
    LCD_WR_DATA(xStar>>8);
    LCD_WR_DATA(0x00FF&xStar);        
    LCD_WR_DATA(xEnd>>8);
    LCD_WR_DATA(0x00FF&xEnd);

    LCD_WR_REG(lcddev.setycmd);   
    LCD_WR_DATA(yStar>>8);
    LCD_WR_DATA(0x00FF&yStar);        
    LCD_WR_DATA(yEnd>>8);
    LCD_WR_DATA(0x00FF&yEnd);   

    LCD_WriteRAM_Prepare();    //开始写入GRAM
}

点评

看lcd_fill_area函数实现,这段就是set windows,后两个参数意义不同罢了 比如width一般代表xend-xstart+1,[xstart,xend] 或 xend-xstart,[xstart,xend) [attachimg]135919[/attachimg]  详情 回复 发表于 2026-4-16 16:05
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2026-05-14 08:52:33
已绑定手机

108

主题

4397

回帖

9850

积分

荣誉版主

无情的代码机器

积分
9850
发表于 2026-4-16 16:05:14 | 显示全部楼层
拉布*** 发表于 2026-4-16 15:49
我现在基于你那个QSPI的工程,想添加一个这个函数LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd ...

看lcd_fill_area函数实现,这段就是set windows,后两个参数意义不同罢了

比如width一般代表xend-xstart+1,[xstart,xend] 或 xend-xstart,[xstart,xend)
截图202604161602175246.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:474
  • 最近打卡:2026-05-14 08:50:14

3

主题

53

回帖

1924

积分

金牌会员

积分
1924
发表于 2026-4-16 16:46:35 | 显示全部楼层
erci*** 发表于 2026-4-16 16:05
看lcd_fill_area函数实现,这段就是set windows,后两个参数意义不同罢了

比如width一般代表xend-xstart+ ...

//******************************************************************
//函数名:  LCD_SetWindows
//功能:    设置显示窗口
//输入参数:(xStar,yStar):窗口左上角起始坐标
//                            (xEnd,yEnd):窗口右下角结束坐标
//返回值:  无
//修改记录:无
//******************************************************************
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
{        
    u8 param[4];
    u32 i;
    u32 sum;
    u32 width,height;

    sum = (xEnd - xStar)*(yEnd - yStar);
    sum <<= 1;
    for(i=0;i<sizeof(lcd_buffer)/sizeof(lcd_buffer[0]);i++){
        lcd_buffer = RED>>0;//颜色不对,尝试调试此处
    }
    width =  (xEnd - xStar) + xStar -1 + EXAMPLE_LCD_X_GAP;
    height =  (yEnd - yStar) + yStar -1 + EXAMPLE_LCD_Y_GAP;
    xStar += EXAMPLE_LCD_X_GAP;
    yStar += EXAMPLE_LCD_Y_GAP;
    param[0] = xStar >> 8;
    param[1] = xStar & 0xff;
    param[2] = width >> 8;
    param[3] = width & 0xff;
    lcd_tx_param(LCD_CMD_CASET, param, 4);
    param[0] = yStar >> 8;
    param[1] = yStar & 0xff;
    param[2] = height >> 8;
    param[3] = height & 0xff;
    lcd_tx_param(LCD_CMD_RASET, param, 4);
//    lcd_tx_color_start(LCD_CMD_RAMWR);
//     while(sum)
//    {
//        if(sum <= sizeof(lcd_buffer)){
//            lcd_tx_color((u8*)lcd_buffer, (u8)sum);
//            sum = 0;
//        }else{
//            lcd_tx_color((u8*)lcd_buffer, sizeof(lcd_buffer));
//            sum -= sizeof(lcd_buffer);
//        }
//    }
//    lcd_tx_color_end();  


}

//******************************************************************
//函数名:  LCD_ShowChar
//功能:    显示单个英文字符
//输入参数:(x,y):字符显示位置起始坐标
//                fc:前置画笔颜色
//                        bc:背景颜色
//                        num:数值(0-94)
//                        size:字体大小
//返回值:  无
//修改记录:无
//******************************************************************  
void LCD_ShowChar(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 size,u8 mode)
{  
    u8 temp;
    u8 pos,t;
    u16 colortemp=POINT_COLOR;      

    num=num-' ';//得到偏移后的值
    LCD_SetWindows(x,y,x+size/2-1,y+size-1);//设置单个文字显示窗口
//    if(!mode) //非叠加方式
//    {
//        for(pos=0;pos<size;pos++)
//        {
//            if(size==12)temp=asc2_1206[num].dat[pos];//调用1206字体
//            else temp=asc2_1608[num].dat[pos];         //调用1608字体
//            for(t=0;t<size/2;t++)
//            {                 
////                if(temp&0x01)LCD_WR_DATA_16Bit(fc);
////                else LCD_WR_DATA_16Bit(bc);
//                temp>>=1;
//               
//            }
//        }   
//    }else//叠加方式
//    {
        for(pos=0;pos<size;pos++)
        {
            if(size==12)temp=asc2_1206[num].dat[pos];//调用1206字体
            else temp=asc2_1608[num].dat[pos];         //调用1608字体
            for(t=0;t<size/2;t++)
            {   
                POINT_COLOR=fc;              
                if(temp&0x01)GUI_DrawPoint(x+t,y+pos);//画一个点   
                temp>>=1;
            }
        }
//    }
    POINT_COLOR=colortemp;   
    LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏                     
}




/***************************************************/目前显示异常
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:474
  • 最近打卡:2026-05-14 08:50:14

3

主题

53

回帖

1924

积分

金牌会员

积分
1924
发表于 2026-4-16 17:05:18 | 显示全部楼层
erci*** 发表于 2026-4-16 16:05
看lcd_fill_area函数实现,这段就是set windows,后两个参数意义不同罢了

比如width一般代表xend-xstart+ ...

我目前按照此方法构建了窗口显示和字符显示程序,目前显示效果不对,这个和字库函数有关系?
字库选自例程

点评

先刷线条和矩形 验证颜色和坐标窗口这些参数 字库一般要注意扫描方向,也就是你按窗口填充颜色的逻辑,从上到下从左到右这些  详情 回复 发表于 2026-4-16 17:17
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2026-05-14 08:52:33
已绑定手机

108

主题

4397

回帖

9850

积分

荣誉版主

无情的代码机器

积分
9850
发表于 2026-4-16 17:17:45 | 显示全部楼层
拉布*** 发表于 2026-4-16 17:05
我目前按照此方法构建了窗口显示和字符显示程序,目前显示效果不对,这个和字库函数有关系?
字库选自例 ...

先刷线条和矩形

验证颜色和坐标窗口这些参数
字库一般要注意扫描方向,也就是你按窗口填充颜色的逻辑,从上到下从左到右这些
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:474
  • 最近打卡:2026-05-14 08:50:14

3

主题

53

回帖

1924

积分

金牌会员

积分
1924
发表于 2026-4-16 17:28:22 | 显示全部楼层
erci*** 发表于 2026-4-16 17:17
先刷线条和矩形

验证颜色和坐标窗口这些参数

线条和矩形还有圆形都可以,我现在想添加字符和字符串,就遇到这个窗口显示问题了

点评

会用线条和矩形就会写字 最简单的画“一”: 你对比下你用线条和矩形画“一”方式 和 字库方式画“一”差异 另外看下字库工具讲解: 视频讲解,【字库生成工具】,数码管取模,AiCube-ISP-V6.95Y - 字库生成,图片  详情 回复 发表于 2026-4-16 17:39
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:535
  • 最近打卡:2026-05-14 08:52:33
已绑定手机

108

主题

4397

回帖

9850

积分

荣誉版主

无情的代码机器

积分
9850
发表于 2026-4-16 17:39:48 | 显示全部楼层
拉布*** 发表于 2026-4-16 17:28
线条和矩形还有圆形都可以,我现在想添加字符和字符串,就遇到这个窗口显示问题了 ...

会用线条和矩形就会写字

最简单的画“一”:
你对比下你用线条和矩形画“一”方式 和 字库方式画“一”差异

另外看下字库工具讲解:
视频讲解,【字库生成工具】,数码管取模,AiCube-ISP-V6.95Y - 字库生成,图片取模,串口绘图,串口助手,虚拟硬件,外部串行Flash编程 国芯人工智能技术交流网站 - AI32位8051交流社区


三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-14 16:45 , Processed in 0.122903 second(s), 92 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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