自己用C写了一个RGB转16位(RGB565)颜色的程序,供我32开发板上的TFT显示屏使用,现在分享出来

自己用C写了一个RGB转16位(RGB565)颜色的程序,供我32开发板上的TFT显示屏使用,现在分享出来
`
#include
#include
typedef unsigned char u8;

void aaa(u8 *a,u8 tx)
{int t;
for(t=0;t<8;t++)
{
if((tx&0x80)>>7)
a[t]=1;
else
a[t]=0;
tx<<=1;
}
}
void RGB_to_16bit(u8 *a,u8 *b)
{
int t,i,sum;
sum=0;
u8 c1[8];
u8 c2[8];
u8 c3[8];
u8 d[16];
aaa(c1,a[0]);
for(i=0;i<5;i++)d[i]=c1[i];
aaa(c2,a[1]);
for(;i<11;i++)d[i]=c2[i-5];
aaa(c3,a[2]);
for(;i<16;i++)d[i]=c3[i-11];
for(i=0;i<8;i++)
{
t=(int)d[i]*pow(2,7-i)+0.5;
sum=sum+t;
}
b[0]=sum;
sum=0;
for(i=0;i<8;i++)
{
t=(int)d[i+8]*pow(2,7-i)+0.5;
sum=sum+t;
}
b[1]=sum;
}

long fun(u8 s)
{
int i,t; //t记录临时加的数
long sum =0;
for(i=0;i<2;i++)
{
if(s[i]>=‘0’&&s[i]<=‘9’)
t=s[i]-‘0’;
if(s[i]>=‘a’&&s[i]<=‘z’)
t=s[i]-‘a’+10;
if(s[i]>=‘A’&&s[i]<=‘Z’)
t=s[i]-‘A’+10;
sum=sum
16+t;
}
return sum;
}
void Char_to_u8(u8 *a,u8 *a1)
{
u8 c1[2];
u8 c2[2];
u8 c3[2];
c1[0]=a[0];c1[1]=a[1];
c2[0]=a[2];c2[1]=a[3];
c3[0]=a[4];c3[1]=a[5];
a1[0]=fun(c1);
a1[1]=fun(c2);
a1[2]=fun(c3);
printf("%02X%02X%02X\n",a1[0],a1[1],a1[2]);
}

int main ()
{
u8 a[6];
u8 a1[3];
u8 b[2];
while(1){
printf(“请输入RGB:”);
scanf("%s", a);
Char_to_u8(a,a1);
RGB_to_16bit(a1,b);
printf(“0X%02X%02X\n”,b[0],b[1]);
}

}`

你可能感兴趣的:(自己用C写了一个RGB转16位(RGB565)颜色的程序,供我32开发板上的TFT显示屏使用,现在分享出来)