浅谈Uc1698u的写数据模式LC[7:6]=10b,64K-Color

Uc1698u有32-Gray模式,64K-color,可以生成32灰阶黑白图片,别有一番韵味,显示模式只能取LC[7:6]=10b,2个字节写3个像素点,下面上取160*160图片代码:
void bmptest(uchar *pic)
{
		unsigned char i,j,k,m;
		unsigned char BmpDataRAM[24]={0}; //定义缓存,存放3个字节24位点数状态
		
		LCD_CursorX(0);
	  LCD_CursorY(0);
	  SetWindows(0,0,162,160);
	
		for(m=0;m<160;m++)		//160行
		{
			for(j=0;j<6;j++)		//160160每一行有6个24位,外加2个字节
		{
				for(k=0;k<3;k++)		//3个字节
			{
				 for(i=0;i<8;i++)		//检测1个字节中8位状态,并赋值给缓存0或1
				{
					if(*pic & (0x80>>i))  BmpDataRAM[i+k*8]=1;	//检测高位到低位,并赋值给缓存0或1
						else BmpDataRAM[i+k*8]=0;
				}
					pic++;		//取模数据地址加1
			}
			  for(i=0;i<24;i++)		//因24位缓存数据全是0或1,更换为RGB显示数据RRRRRGGGGGGBBBBB
			{
				if(i%3==0 || i%3==2) //判断是第0位还是第2位,RB数据
				{
					if(BmpDataRAM[i]) BmpDataRAM[i]=0x1f;  //R和B数据各占5位
					else {BmpDataRAM[i]=0;}
				}
				if(i%3==1) //判断是不是第1位,G数据
				{
					if(BmpDataRAM[i]) BmpDataRAM[i]=0x3f;  //G数据占6位
					else BmpDataRAM[i]=0;
				}
			}
				for(i=0;i<8;i++)  //调用缓存数据,写24个点
				{
						LCD_DataWrite(BmpDataRAM[i*3]<<3 | BmpDataRAM[i*3+1]>>3);
						LCD_DataWrite(BmpDataRAM[i*3+1]<<5 | BmpDataRAM[i*3+2]);
				}
		 }
			for(k=0;k<2;k++)		//每一行检测写完6个字节后,还多余2个字节,要单独处理这2个字节,16个点因不够3整除
			{
				 for(i=0;i<8;i++)		//方法同上,缓存存放2个字节的点位状态
				{
					if(*pic & (0x80>>i))  BmpDataRAM[i+k*8]=1;
						else BmpDataRAM[i+k*8]=0;
				}
					pic++;
			}
			for(i=0;i<16;i++)		//判断状态,转换为显示数据
			{
				if(i%3==0 || i%3==2) //判断是第0位还是第2位,RB数据
				{
					if(BmpDataRAM[i]) BmpDataRAM[i]=0x1f;		//R或B的显示数据
					else BmpDataRAM[i]=0;
				}
				if(i%3==1) 		//判断是不是第1位,G数据
				{
					if(BmpDataRAM[i]) BmpDataRAM[i]=0x3f;		//G的显示数据
					else BmpDataRAM[i]=0;
				}
			}
			for(i=0;i<6;i++)	//第一行还剩余2个字节,16个点,2个字节写3个点,要写6次
			{
					LCD_DataWrite(BmpDataRAM[i*3]<<3 | BmpDataRAM[i*3+1]>>3);
					LCD_DataWrite(BmpDataRAM[i*3+1]<<5 | BmpDataRAM[i*3+2]);
			}		
	 }
		pic=0;
	
}32灰阶图片,144*144像素代码:
void bmpgraytest(uchar *p)
{
	 unsigned int i;
	 uchar GrayDataR,GrayDataGH,GrayDataGL,GrayDataB;
	
	 LCD_CursorX(0);
	 LCD_CursorY(0);
	 SetWindows(0,0,144,144);
	
	 LCD_CmdWrite(0xaf); 	//32-shade on
	 DelayMs(50);
	
	for(i=0;i<6912;i++)
	{
		 GrayDataR = ((*p & 0xff)/8)<<3;p++;
		 GrayDataGH = ((*p & 0xff)/4)>>3;
		 GrayDataGL = ((*p & 0xff)/4)<<5;p++;
		 GrayDataB = ((*p & 0xff)/8)&0x1f;p++;

		 LCD_DataWrite(GrayDataR | GrayDataGH);
		 LCD_DataWrite(GrayDataGL | GrayDataB);
	}
}
灰阶图片取模工具借助BmpConvert.exe



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值