思路总结:
(STM32 cortex M3 -- 数码相框)
1. 静态显示一张图片:
遍历所有像素点,一一显示。
2. 图片放大显示:
假如要放大为原来的四倍那么大,即长和宽都是原来的二倍。一 二、三 四.......两行两行,
两列两列的像素值完全一样。
3. 图片缩小显示:
跟放大相反,还拿四倍为例。在行像素上,隔一行取一行,隔一列取一列。
4. 百叶窗效果:
把静态显示图片分块显示,按列为单位变化。
5. 逐渐变黑:
16真彩色的图片,红绿蓝的二进制分别是五六五。改变红绿蓝的色度值,越小就越黑,当全为
零的时候就是黑屏了。逐渐减小实现渐变。
6. 半透明设置:
图片像素隔一行显示一行。这样一半本章图片,一半前张图片,达到半透明效果。
7. 逐渐变白:
事实证明用变黑的反过程是不好用的。我们可以先白色清屏。然后写一张图片的像素点越来越
稀少。均匀减少。每一次写之前都白色清屏。这样就达到逐渐变白的效果了。并且还可以根据
像素稀少程度表示不同的透明度。
部分例程代码如下:
void display_liu(void)
{
int i;
unsigned int dd;
LCD_Clear(White);
address_set(0,0,239,319);
for(i=0; i<76800;i++)
{
dd=(0x00|xiaoxiao[i*2+1])<<8;
dd =
dd|xiaoxiao[i*2];
//把8位合并成16位的。
LCD_WriteRAM(dd);
}
Delay(0xaffff);
Delay(0xaffff);
Delay(0x5ffff);
}
void big_liu(void)
{
int i, t = 0, k = 0;
unsigned int dd;
LCD_Clear(White);
for(i=19200; i<57600;i++)
{
if(i20>=80
&& i20<240)
{
if(t
>= 319)
{
t
= 0;
k
+= 2;
}
address_set(k,t,k,319);
dd=(0x00|xiaoxiao[i*2+1])<<8;
dd =
dd|xiaoxiao[i*2];
//把8位合并成16位的。
LCD_WriteRAM(dd);
LCD_WriteRAM(dd);
address_set(k+1,t,k+1,319);
LCD_WriteRAM(dd);
LCD_WriteRAM(dd);
t += 2;
}
}
Delay(0xaffff);
Delay(0xaffff);
Delay(0x5ffff);
}
void small_liu(void)
{
int i;
unsigned int dd;
LCD_Clear(White);
address_set(0,0,119,159);
for(i = 0; i < 38400; i++)
{
if(i0 == 0)
i += 160;
dd=(0x00|xiaoxiao[i*4+1])<<8;
dd =
dd|xiaoxiao[i*4];
//把8位合并成16位的。
LCD_WriteRAM(dd);
}
address_set(0,160,119,319);
for(i = 0; i < 38400; i++)
{
if(i0 == 0)
i += 160;
dd=(0x00|xiaoxiao[i*4+1])<<8;
dd =
dd|xiaoxiao[i*4];
//把8位合并成16位的。
LCD_WriteRAM(dd);
}
address_set(120,0,239,159);
for(i = 0; i < 38400; i++)
{
if(i0 == 0)
i += 160;
dd=(0x00|xiaoxiao[i*4+1])<<8;
dd =
dd|xiaoxiao[i*4];
//把8位合并成16位的。
LCD_WriteRAM(dd);
}
address_set(120,160,239,319);
for(i = 0; i < 38400; i++)
{
if(i0 == 0)
i += 160;
dd=(0x00|xiaoxiao[i*4+1])<<8;
dd =
dd|xiaoxiao[i*4];
//把8位合并成16位的。
LCD_WriteRAM(dd);
}
Delay(0xaffff);
Delay(0xaffff);
Delay(0x5ffff);
}
void baiye(void)
{
int i,j,k,t;
unsigned int dd;
LCD_Clear(White);
for(j = 0; j < 40;
j++)
//每一叶写40列
{
for(k = 0; k <
6;
k++)
//写六叶的每一列
{
address_set(k*40+j,0,(k+1)*40+j-1,319);
for(i = 0; i
<320 ;
i++)
//写一列
{
t
= i+k*40*320+j*320;
dd
= (0x00|xiaoxiao[t*2+1])<<8;
dd
=
dd|xiaoxiao[t*2];
LCD_WriteRAM(dd);
}
}
Delay(0x0ffff);
}
}
unsigned int modify_liu(unsigned char a,unsigned b,int k)
{
unsigned char aa = a, bb = b;
unsigned int ab[] =
{0x7bef,0x39e7,0x18e3,0x0861,0x0020,0x0000};
unsigned int dd;
dd =
(0x00|bb)<<8;
dd = dd|aa;
dd >>= k;
dd &= ab[k-1];
return dd;
}
void qian_liu(void)
{
int k, i;
unsigned int dd;
LCD_Clear(White);
for