STM32七彩色带
来源:互联网 发布:mac 虚拟机 win10 编辑:程序博客网 时间:2024/05/19 22:45
stm32七彩色带代码生成(转载时,请标明出处)
1、首先要知道stm32屏幕显示选择的是RGB565还是RGB24
RGB565
RGB5bit6bit5bitRGB24
RGB8bit8bit8bit这里使用的是RGB565格式的,即颜色的参数需要16Bit(2字节)
2、其次要了解一些颜色搭配的简单知识
红绿蓝为显示的三种原色,黄青品红为三种原色两两混合的次色,剩下的其余颜色为原色和次色的混合。
从上图我们可以看出,最明显的颜色是三种原色和三种次色。
因此我们定义,三种原色和三种次色的宏,颜色的宏定义可以百度直接查询到。
#define BLUE 0x001F//蓝
#define RED 0xF800 //红
#define MAGENTA 0xF81F //品红
#define GREEN 0x07E0 //绿
#define CYAN 0x07FF //青
#define YELLOW 0xFFE0 //黄
#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 = 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颜色。
以上程序比较容易理解,但是移植相对较为复杂。并且程序相对较长。以后在优化代码,增加可移植性。
阅读全文
1 0
- STM32七彩色带
- 色带的含义
- OPENCV实现色带检测
- 七彩变换园环
- 鱼(七彩)
- 七彩的阳光
- 七彩舞动精灵
- 七彩复选框
- Android 屏幕七彩闪动
- Android屏幕七彩闪动
- 七彩霓虹灯 制作
- BZOJ 4771 七彩树
- BZOJ4771 七彩树
- 七彩蟒蛇绘制
- [BZOJ4771]七彩树
- BZOJ 4771 七彩树
- bzoj4771 七彩树
- 七彩光环制作
- Spring事务控制无效?
- 高并发
- Docker获取镜像
- YV12和YUY2的基本知识
- 【高性能Mysql】读书笔记
- STM32七彩色带
- 爱开源的微软是如何击败 Facebook、Google 成为 GitHub No.1 的?
- Volley原理分析
- Ubuntu下安装WeChat
- java注解,有什么用?
- 常用的Mysql数据库操作语句大全
- Spring的IOC原理[通俗解释一下]
- java容器之四_stack
- CSS Modules 用法教程