买了个自带液晶显示屏的开发板,很好玩。

这是广告图片效果。

这是我改程序改出来的效果。
参考链接
https://www.waveshare.net/wiki/RP2040-Touch-LCD-1.28
这个arduino下载开发板库,感觉很快。比espressif快多了。
调试记录
样例程序很好,陀螺仪的,还有触摸画点的功能演示。所以我想做一个能设置时间的电子表,看起来没有WIFI模块,所以就不整网络授时了。
使用时遇到了些问题,烧录不进去了。一直报错,我以为是坏了,烧不进去别的程序了。后来推断是因为我乱改程序,在LOOP函数里头添加了好多分配内存回收内存的程序。烧进去一遍以后,就烧不进去了。所以我问了客服怎么解决,同时我又找了些资料,有没有强制烧录的办法,我先当这个板子没坏。。。。果然有办法。
就是断电,按住BOOT键,再上电,再松手,就能烧录了。之后把程序LOOP函数里全删除就好了。
LCD函数研究
1、看起来这个提供的样例,没有那种像操作TFTLCD那种,即时性的,单点修改的函数。就是它需要预先生成个矩阵 BlackImage,在这个矩阵里编辑完了,在一次性输入到lcd上,LCD_1IN28_Display(BlackImage);这就很费劲。
BlackImage是个在setup函数里的局部变量,那我在回调函数Touch_INT_callback里咋用?所以我就把BlackImage改成全局变量。
2、回调函数可以让LCD显示内容,但是setup里头的while里头画LCD与其会发生冲突阻塞,导致黑屏。。。。所以我又删掉了回调函数里的LCD绘制。
3、对于时分秒的变量,我本来用的uint16_t但是发现小于0就变成了255,所以变量改成int了。
4、延时是个问题,绘制其实会消耗很多毫秒,如果直接绘制完 DEV_Delay_ms(1000)那看起来像是两秒。所以用了 LTIMSE=millis(); uint32_t pp=millis(); DEV_Delay_ms(1000-pp+LTIMSE); 这样比较近似,结果验证了一个晚上,也差不出几秒,用一个月就难说了。
5、这个显示屏说是240x240的分辨率,其实要砍掉四个角。比对像素时候比较费劲。程序自带的字体也比较少,16、24像素的,字体取模程序很好用。
程序
#include "LCD_Test.h"
void Touch_INT_callback();
uint8_t flag = 0;
int Hour = 0;
int Min = 12;
int Sec = 30;
uint32_t LTIMSE = 0;
UWORD *BlackImage;
int Mode_0Over_1Hou_2Min_3Sec = 0;
void setup() {
// put your setup code here, to run once:
if (DEV_Module_Init() != 0)
Serial.println("GPIO Init Fail!");
else
Serial.println("GPIO Init successful!");
LCD_1IN28_Init(HORIZONTAL);
DEV_SET_PWM(0);
LCD_1IN28_Clear(WHITE);
DEV_SET_PWM(100);
UDOUBLE Imagesize = LCD_1IN28_HEIGHT * LCD_1IN28_WIDTH * 2;
//UWORD *BlackImage;
if ((BlackImage = (UWORD *)malloc(Imagesize)) == NULL) {
Serial.println("Failed to apply for black memory...");
exit(0);
}
// /*1.Create a new image cache named IMAGE_RGB and fill it with white*/
Paint_NewImage((UBYTE *)BlackImage, LCD_1IN28.WIDTH, LCD_1IN28.HEIGHT, 0, WHITE);
Paint_SetScale(65);
Paint_Clear(WHITE);
Paint_SetRotate(ROTATE_0);
Paint_Clear(WHITE);
// /* GUI */
Serial.println("drawing...\r\n");
// /*2.Drawing on the image*/
#if 1
//Paint_DrawPoint(50, 41, BLACK, DOT_PIXEL_1X1, DOT_FILL_RIGHTUP); // 240 240
// Paint_DrawPoint(50, 46, BLACK, DOT_PIXEL_2X2, DOT_FILL_RIGHTUP);
// Paint_DrawPoint(50, 51, BLACK, DOT_PIXEL_3X3, DOT_FILL_RIGHTUP);
//Paint_DrawPoint(50, 56, BLACK, DOT_PIXEL_4X4, DOT_FILL_RIGHTUP);
//Paint_DrawPoint(50, 61, BLACK, DOT_PIXEL_5X5, DOT_FILL_RIGHTUP);
//Paint_DrawLine(60, 40, 90, 70, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
//Paint_DrawLine(60, 70, 90, 40, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
//Paint_DrawRectangle(60, 40, 90, 70, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
//Paint_DrawRectangle(100, 40, 130, 70, BLUE, DOT_PIXEL_2X2, DRAW_FILL_FULL);
//Paint_DrawLine(135, 55, 165, 55, CYAN, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
//Paint_DrawLine(150, 40, 150, 70, CYAN, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
//Paint_DrawCircle(150, 55, 15, GREEN, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
//Paint_DrawCircle(185, 55, 15, GREEN, DOT_PIXEL_1X1, DRAW_FILL_FULL);
//Paint_DrawNum(50, 80, 9.87654321, &Font20, 3, WHITE, BLACK);
Paint_DrawLine(35, 35, 205, 35, MAGENTA, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(205, 35, 205, 205, MAGENTA, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(35, 205, 205, 205, MAGENTA, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine

博主使用自带液晶显示屏的开发板制作设定时间的电子表,分享了开发过程。包括开发板库下载体验,调试时遇到烧录问题及解决办法,还对LCD函数进行研究并解决冲突、变量类型、延时等问题,最后介绍了手表基本功能及后续优化方向。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



