本文来源电子发烧友社区,作者:李先生, 帖子地址:https://bbs.elecfans.com/jishu_2307400_1_1.html
前言
话说没有艺术细胞的程序员不是好码农!
上一次我们进行了LCD的刷屏测试,我们觉得太单调了,程序员就应该玩点有艺术性的。这次我们使用LCD点阵画出各类具有艺术性的图像。
参见https://codegolf.stackexchange.com/
代码
有用到浮点算数运算,需要包含算术库
#include
代码如下
//图片尺寸:
#define DIM 130
//图片尺寸-1
#define DM1 (DIM-1)
#define _sq(x) ((x)*(x)) // 平方
#define _cb(x) abs((x)*(x)*(x)) // 立方的绝对值
#define _cr(x) (unsigned short)(pow((x),1.0/3.0)) // 立方根
unsigned char RD(int i,int j){
return (char)(_sq(cos(atan2(j-65,i-65)/2))*255);
}
unsigned char GR(int i,int j){
return (char)(_sq(cos(atan2(j-65,i-65)/2-2*acos(-1)/3))*255);
}
unsigned char BL(int i,int j){
return (char)(_sq(cos(atan2(j-65,i-65)/2+2*acos(-1)/3))*255);
}
unsigned char RD0(int i,int j)
{
float s=3./(j+99);
float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;
return ((int)((i+DIM)*s+y)%2+(int)((DIM*2-i)*s+y)%2)*127;
}
unsigned char GR0(int i,int j){
float s=3./(j+99);
float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;
return ((int)(5*((i+DIM)*s+y))%2+(int)(5*((DIM*2-i)*s+y))%2)*127;
}
unsigned char BL0(int i,int j){
float s=3./(j+99);
float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;
return ((int)(29*((i+DIM)*s+y))%2+(int)(29*((DIM*2-i)*s+y))%2)*127;
}
unsigned char RD1(int i, int j) {
#define r(n)(rand()%n)
static char c[DIM][DIM]; return!c[i][j] ? c[i][j] = !r(999) ? r(256) : RD((i + r(2)) % 1024, (j + r(2)) % 1024) : c[i][j];
}
unsigned char GR1(int i, int j) {
static char c[DIM][DIM]; return!c[i][j] ? c[i][j] = !r(999) ? r(256) : GR((i + r(2)) % 1024, (j + r(2)) % 1024) : c[i][j];
}
unsigned char BL1(int i, int j) {
static char c[DIM][DIM]; return!c[i][j] ? c[i][j] = !r(999) ? r(256) : BL((i + r(2)) % 1024, (j + r(2)) % 1024) : c[i][j];
}
unsigned char RD2(int i, int j) {
static double k; k += rand() / 1. / 0x7FFF; int l = k; l %= 512; return l > 255 ? 511 - l : l;
}
unsigned char GR2(int i, int j) {
static double k; k += rand() / 1. / 0x7FFF; int l = k; l %= 512; return l > 255 ? 511 - l : l;
}
unsigned char BL2(int i, int j) {
static double k; k += rand() / 1. / 0x7FFF; int l = k; l %= 512; return l > 255 ? 511 - l : l;
}
unsigned char RD3(int i, int j) {
return (unsigned char)sqrt((double)(_sq(i - DIM / 2) * _sq(j - DIM / 2)) * 2.0);
}
unsigned char GR3(int i, int j) {
return (unsigned char)sqrt((double)(
(_sq(i - DIM / 2) | _sq(j - DIM / 2)) *
(_sq(i - DIM / 2) & _sq(j - DIM / 2))
));
}
unsigned char BL3(int i, int j) {
return (unsigned char)sqrt((double)(_sq(i - DIM / 2) & _sq(j - DIM / 2)) * 2.0);
}
unsigned char RD4(int i, int j) {
static int r[DIM]; int p = rand() % 9 - 4; r[i] = i & r[i] ? (r[i] + r[i - 1]) / 2 : i ? r[i - 1] : 512; r[i] += r[i] + p > 0 ? p : 0; return r[i] ? r[i] < DIM ? r[i] : DM1 : 0;
}
unsigned char GR4(int i, int j) {
static int r[DIM]; int p = rand() % 7 - 3; r[i] = i & r[i] ? (r[i] + r[i - 1]) / 2 : i ? r[i - 1] : 512; r[i] += r[i] + p > 0 ? p : 0; return r[i] ? r[i] < DIM ? r[i] : DM1 : 0;
}
unsigned char BL4(int i, int j) {
static int r[DIM]; int p = rand() % 15 - 7; r[i] = i & r[i] ? (r[i] + r[i - 1]) / 2 : i ? r[i - 1] : 512; r[i] += r[i] + p > 0 ? p : 0; return r[i] ? r[i] < DIM ? r[i] : DM1 : 0;
}
void StartHdfSPITest(void)
{
static uint16_t gcolor = 0xFFFF;
LcdInit();
while (1) {
for(int i=0;ifor(int j=0;jstatic unsigned short color[3];
color[0] = RD(i,j)&255;
color[1] = GR(i,j)&255;
color[2] = BL(i,j)&255;
uint16_t c = (color[0]>>3) << 11;
c |= (color[1]>>2) << 5;
c |= (color[2]>>3) << 0;
lcd_draw_point(i,j,c);
}
}
LcdPush();
LOS_Msleep(2000);
for(int i=0;ifor(int j=0;jstatic unsigned short color[3];
color[0] = RD1(i,j)&255;
color[1] = GR1(i,j)&255;
color[2] = BL1(i,j)&255;
uint16_t c = (color[0]>>3) << 11;
c |= (color[1]>>2) << 5;
c |= (color[2]>>3) << 0;
lcd_draw_point(i,j,c);
}
}
LcdPush();
LOS_Msleep(2000);
for(int i=0;ifor(int j=0;jstatic unsigned short color[3];
color[0] = RD2(i,j)&255;
color[1] = GR2(i,j)&255;
color[2] = BL2(i,j)&255;
uint16_t c = (color[0]>>3) << 11;
c |= (color[1]>>2) << 5;
c |= (color[2]>>3) << 0;
lcd_draw_point(i,j,c);
}
}
LcdPush();
LOS_Msleep(2000);
for(int i=0;ifor(int j=0;jstatic unsigned short color[3];
color[0] = RD3(i,j)&255;
color[1] = GR3(i,j)&255;
color[2] = BL3(i,j)&255;
uint16_t c = (color[0]>>3) << 11;
c |= (color[1]>>2) << 5;
c |= (color[2]>>3) << 0;
lcd_draw_point(i,j,c);
}
}
LcdPush();
LOS_Msleep(2000);
for(int i=0;ifor(int j=0;jstatic unsigned short color[3];
color[0] = RD4(i,j)&255;
color[1] = GR4(i,j)&255;
color[2] = BL4(i,j)&255;
uint16_t c = (color[0]>>3) << 11;
c |= (color[1]>>2) << 5;
c |= (color[2]>>3) << 0;
lcd_draw_point(i,j,c);
}
}
LcdPush();
LOS_Msleep(2000);
}
}
;j++)>;i++)>;j++)>;i++)>;j++)>;i++)>;j++)>;i++)>;j++)>;i++)>
效果
总结
代码中有大量的浮点运算,本身也可以作为CPU性能的一个对比测试,同时也可以测试刷屏的速率。从效果来看CPU的性能是不错的,刷频效果也可以,后面就正式开始LVGL的移植了。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
开鸿智谷
+关注
关注
2文章
125浏览量
1152 -
NiobeU4
+关注
关注
3文章
31浏览量
508
发布评论请先 登录
相关推荐
有奖丨米尔 全志T536开发板免费试用
米尔与全志合作发布的新品基于全志T536应用处理器的MYD-LT536-GK开发板免费试用活动来啦~~米尔提供了3块价值750元的MYD-LT536-GK开发板发起
追加名额丨米尔瑞芯微RK3576开发板有奖试用
米尔与瑞芯微合作发布的新品基于瑞芯微RK3576应用处理器的MYD-LR3576开发板免费试用活动加码啦~~米尔追加了2块价值849元的MYD-LR3576开发板发起
润开鸿受邀参加华为云开发者日南京站
近日,华为云开发者日“1024程序员节专场主题活动”南京站成功举办。江苏润和软件股份有限公司旗下子公司江苏润开鸿数字科技有限公司(以下简称“润开
有奖丨米尔 瑞芯微RK3576开发板免费试用
米尔与瑞芯微合作发布的新品基于瑞芯微RK3576应用处理器的MYD-LR3576开发板免费试用活动来啦~~米尔提供了7块价值849元的MYD-LR3576开发板发起
AI编程工具会不会抢程序员饭碗
AI编程工具可辅助编程,减少手动编码,提升效率,对程序员有积极影响也有挑战。程序员需深化技能、拓宽知识应对。长远看,AI与人类程序员将共生共荣。
开鸿智谷用技术助力构建鸿蒙世界的基石
10月24-26日,由湖南省工业和信息化厅、湖南湘江新区管理委员会指导,长沙市工业和信息化局、长沙信息产业园管委会、CSDN主办的长沙“1024程序员节·智能应用新生态”活动顺利举办。开鸿智谷
【AG32开发板体验连载】网络摄像头
图是 AGM 开发板,核心处理器为 AGM32VF407VGT6,1M Flash + 128K SRAM,还附带了 USB 线等线材,开盒即用
【入门篇】
AGM32VF407VGT6
发表于 10-11 14:54
开鸿智谷亮相OpenHarmony开发者大会,与生态共创开源新篇章!
5月25日,以“鸿心聚力智引未来”为主题的OpenHarmony开发者大会2024(以下简称大会)在深圳成功举办。开鸿智谷获得多项奖项及授牌
拓维信息及旗下开鸿智谷同获华为HarmonyOS开发服务商认证
近日,拓维信息及旗下开鸿智谷双双通过华为HarmonyOS开发服务商认证,成为华为“鸿蒙服务商先锋计划”认证级伙伴。秉持共同发展、共创价值的合作理念,拓维信息、
国内首批 | 开鸿智谷多名讲师获“鸿蒙原生应用开发培训讲师”资格认证
2023年3月4日-5日,鸿蒙生态服务(深圳)有限公司(以下简称“鸿蒙生态服务公司”)组织了国内首批“鸿蒙原生应用开发培训讲师”认证,开鸿智谷
评论