STM32七彩色带

来源:互联网 发布:mac 虚拟机 win10 编辑:程序博客网 时间:2024/05/19 22:45

stm32七彩色带代码生成(转载时,请标明出处)

1、首先要知道stm32屏幕显示选择的是RGB565还是RGB24

 RGB565

RGB5bit6bit5bit

RGB24

RGB8bit8bit8bit

这里使用的是RGB565格式的,即颜色的参数需要16Bit(2字节)
2、其次要了解一些颜色搭配的简单知识

红绿蓝为显示的三种原色,黄青品红为三种原色两两混合的次色,剩下的其余颜色为原色和次色的混合。

从上图我们可以看出,最明显的颜色是三种原色和三种次色。
因此我们定义,三种原色和三种次色的宏,颜色的宏定义可以百度直接查询到。
#define BLUE           0x001F//蓝
#define RED            0xF800 //红
#define MAGENTA        0xF81F //品红
#define GREEN          0x07E0 //绿
#define CYAN           0x07FF //青
#define YELLOW         0xFFE0 //黄
从上诉的宏定义可以看出,三种次色也是由三种原色两两相加所得。如 青(0x07FF) = 蓝 + 绿 (0x001F + 0x07E0);
所以,要显示七彩色带,需要将要显示的范围划分为6等分,起始点—等分点—终点按照 原色—次色—原色—次色的顺序依次排列。两个原色中间的次色是由两个原色相加而成即可。我现使用 红—黄—绿—青—蓝—品红—红 的顺序进行显示。
观察原色和次色之间的值变化,例如,红色到黄色,可以看出,红色不断累加一部分绿色可以得到黄色,黄色到绿色,可以看出,黄色一点点的减去红色可以得到绿色,因此,原色到次色,就是一种原色一点点加上另一种原色可以得到次色,次色到原色,次色慢慢减去合成改次色的其中一种原色,可以得到相应的另一种原色。
stm32,我选用的是RGB565格式的,其中红色 5 bit 绿色 6bit 蓝色 5 bit 也就是红色的值是从0-31,有32个,绿色由0-63,有64个,蓝色的值是从0-31,有32个,为了使得颜色的变化更加的均匀,我将颜色变化的步进次数定位32次,即红色和蓝色为每次加1或减1,绿色为每次加2或减2。
相应的变化 红色值变化为整体颜色值 加减0x0800,绿色值变化为整体颜色值 加减0x0040,蓝色值变化为整体颜色值 加减0x0001。
因此代码的实现如下
for(i=0;i<32;i++)
{
color = RED+0x40*i;
GUI_Box(0+i, 16, 1+i, 32, color);
}
for(i=0;i<32;i++)
{
color = YELLOW-0x800*i;
GUI_Box(31+i, 16, 32+i, 32, color);
}
for(i=0;i<32;i++)
{
color = GREEN+i;
GUI_Box(63+i, 16, 64+i, 32, color);
}
for(i=0;i<32;i++)
{
color = CYAN-0x40*i;
GUI_Box(95+i, 16, 96+i, 32, color);
}
for(i=0;i<32;i++)
{
color = BLUE+0x800*i;
GUI_Box(127+i, 16, 128+i, 32, color);
}
for(i=0;i<32;i++)
{
color = MAGENTA-i;
GUI_Box(159+i, 16, 160+i, 32, color);
}
color为RGB颜色值,GUI_Box(xstart, ystart, xend, yend, Writecolor);函数为在xstart, ystart, xend, yend四个点围成的区域内都显示Writecolor颜色。
以上程序比较容易理解,但是移植相对较为复杂。并且程序相对较长。以后在优化代码,增加可移植性。

原创粉丝点击