拉布拉斯 发表于 2026-4-14 17:05
原点坐标不对怎么设置,还有怎么手动配置AICUBE
我在尝试使用aibude配置8051U-32的MCU,不知道怎么配置QSPI外设
拉布拉斯 发表于 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的你可以打开我上面那个工程参考
拉布拉斯 发表于 2026-4-10 17:27
AI8051U可以测试一下?
画点,画线,画图最终都是矩阵填充,1x1,1xn,nxn
都可参考这个函数lcd_fill_area
具体实现可借鉴实验箱例程:
https://www.stcaimcu.com/data/download/DemoCode/AI8051U-DEMO-CODE-V1.2.zip
AI8051U-DEMO-CODE-V1.2\Ai8051U-32Bit\37.2-2.4寸ILI9341驱动TFT显示屏实验程序-带触摸功能,硬件I8080接口程序
ercircle 发表于 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
}
拉布拉斯 发表于 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, 或 xend-xstart,[xstart,xend)
ercircle 发表于 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;
u32 i;
u32 sum;
u32 width,height;
sum = (xEnd - xStar)*(yEnd - yStar);
sum <<= 1;
for(i=0;i<sizeof(lcd_buffer)/sizeof(lcd_buffer);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 = xStar >> 8;
param = xStar & 0xff;
param = width >> 8;
param = width & 0xff;
lcd_tx_param(LCD_CMD_CASET, param, 4);
param = yStar >> 8;
param = yStar & 0xff;
param = height >> 8;
param = 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.dat;//调用1206字体
// else temp=asc2_1608.dat; //调用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.dat;//调用1206字体
else temp=asc2_1608.dat; //调用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);//恢复窗口为全屏
}
/***************************************************/目前显示异常
ercircle 发表于 2026-4-16 16:05
看lcd_fill_area函数实现,这段就是set windows,后两个参数意义不同罢了
比如width一般代表xend-xstart+ ...
我目前按照此方法构建了窗口显示和字符显示程序,目前显示效果不对,这个和字库函数有关系?
字库选自例程
拉布拉斯 发表于 2026-4-16 17:05
我目前按照此方法构建了窗口显示和字符显示程序,目前显示效果不对,这个和字库函数有关系?
字库选自例 ...
先刷线条和矩形
验证颜色和坐标窗口这些参数
字库一般要注意扫描方向,也就是你按窗口填充颜色的逻辑,从上到下从左到右这些
ercircle 发表于 2026-4-16 17:17
先刷线条和矩形
验证颜色和坐标窗口这些参数
线条和矩形还有圆形都可以,我现在想添加字符和字符串,就遇到这个窗口显示问题了
拉布拉斯 发表于 2026-4-16 17:28
线条和矩形还有圆形都可以,我现在想添加字符和字符串,就遇到这个窗口显示问题了 ...
会用线条和矩形就会写字
最简单的画“一”:
你对比下你用线条和矩形画“一”方式 和 字库方式画“一”差异
另外看下字库工具讲解:
视频讲解,【字库生成工具】,数码管取模,AiCube-ISP-V6.95Y - 字库生成,图片取模,串口绘图,串口助手,虚拟硬件,外部串行Flash编程 国芯人工智能技术交流网站 - AI32位8051交流社区