本文來源電子發燒友社區,作者:李先生, 帖子地址: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文章
127瀏覽量
1184 -
NiobeU4
+關注
關注
3文章
31瀏覽量
520
發布評論請先 登錄
相關推薦
有獎丨米爾 全志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程序員節·智能應用新生態”活動順利舉辦。開鴻智谷
開鴻智谷亮相OpenHarmony開發者大會,與生態共創開源新篇章!
5月25日,以“鴻心聚力智引未來”為主題的OpenHarmony開發者大會2024(以下簡稱大會)在深圳成功舉辦。開鴻智谷獲得多項獎項及授牌
拓維信息及旗下開鴻智谷同獲華為HarmonyOS開發服務商認證
近日,拓維信息及旗下開鴻智谷雙雙通過華為HarmonyOS開發服務商認證,成為華為“鴻蒙服務商先鋒計劃”認證級伙伴。秉持共同發展、共創價值的合作理念,拓維信息、
國內首批 | 開鴻智谷多名講師獲“鴻蒙原生應用開發培訓講師”資格認證
2023年3月4日-5日,鴻蒙生態服務(深圳)有限公司(以下簡稱“鴻蒙生態服務公司”)組織了國內首批“鴻蒙原生應用開發培訓講師”認證,開鴻智谷
評論