当前位置: 首页 > news >正文

vs网站开发教程成人电脑基础培训班

vs网站开发教程,成人电脑基础培训班,泰安专业的网站建设,免费做任务赚钱的网站有哪些一个1.69寸SPI接口的液晶显示模块,有320*24076800个点,每个点有2个字节表示RGB的颜色,所以需要153.6K个字节的数据来刷新全屏,如果SPI口输出数据不是高速并且不紧密排列的话,刷新就会比较慢,有从下到下的肉…

一个1.69寸SPI接口的液晶显示模块,有320*240=76800个点,每个点有2个字节表示RGB的颜色,所以需要153.6K个字节的数据来刷新全屏,如果SPI口输出数据不是高速并且不紧密排列的话,刷新就会比较慢,有从下到下的肉眼可见的刷新过程,现就是希望使用数据缓冲区(我理解这就是显存的概念吧)来快速刷新显示区域。
原始的单个字符的显示程序:

/******************************************************************************函数说明:显示单个字符入口数据:x,y显示坐标num 要显示的字符fc 字的颜色bc 字的背景色sizey 字号mode:  0非叠加模式  1叠加模式返回值:  无
******************************************************************************/
void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)
{uint8_t temp,sizex,t,m=0;uint16_t i,TypefaceNum;//一个字符所占字节大小uint16_t x0=x;sizex=sizey/2;TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;num=num-' ';    //得到偏移后的值LCD_Address_Set(x,y,x+sizex-1,y+sizey-1);  //设置光标位置for(i=0;i<TypefaceNum;i++){ if(sizey==12)temp=ascii_1206[num][i];		       //调用6x12字体else if(sizey==16)temp=ascii_1608[num][i];		 //调用8x16字体else if(sizey==24)temp=ascii_2412[num][i];		 //调用12x24字体else if(sizey==32)temp=ascii_3216[num][i];		 //调用16x32字体else return;for(t=0;t<8;t++){if(!mode)//非叠加模式{if(temp&(0x01<<t))LCD_WR_DATA(fc);		//每一个点发送2个字节数据else LCD_WR_DATA(bc);m++;if(m%sizex==0){m=0;break;}}else//叠加模式{if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点x++;if((x-x0)==sizex){x=x0;y++;break;}}}}   	 	  
}

由if(temp&(0x01<<t))LCD_WR_DATA(fc); //每一个点发送2个字节数据
else LCD_WR_DATA(bc);
这几句说明每个点,由SPI发送2个字节的数据出去,而且是一边计算数据,一边发送数据,速度较慢,可以肉眼可见的逐字显示的。

改用缓冲区显示单个字符:

void LCD_ShowChar_new(uint16_t x,uint16_t y,uint8_t num,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)
{uint8_t temp,sizex,t,m=0;uint16_t i,TypefaceNum;//一个字符所占字节大小uint16_t x0=x;sizex=sizey/2;TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;num=num-' ';    //得到偏移后的值//LCD_Address_Set(x,y,x+sizex-1,y+sizey-1);  	//设置光标位置//uint8_t data[TypefaceNum * 2 * 8];	//=========static uint8_t data[1024];				//=========重要,用静态变量,或者用全局变量,一个字符作为一个缓冲区uint16_t xx = 0;for(i=0; i<TypefaceNum; i++){if(sizey==12)temp=ascii_1206[num][i];		       	//调用6x12字体else if(sizey==16)temp=ascii_1608[num][i];		 	//调用8x16字体else if(sizey==24)temp=ascii_2412[num][i];		 	//调用12x24字体else if(sizey==32)temp=ascii_3216[num][i];		 	//调用16x32字体else return;for(t=0;t<8;t++){if(!mode)//非叠加模式  带缓冲区,实现快显示功能{if(temp&(0x01<<t)){data[xx++] = fc>>8;data[xx++] = fc;
//					data[i*2*8 + t] == fc<<8;
//					data[i*2*8 + t + 1] == fc;
//					LCD_WR_DATA(fc);}else{data[xx++] = bc>>8;data[xx++] = bc;
//					data[i*2*8 + t] == bc<<8;
//					data[i*2*8 + t + 1] == bc;
//					LCD_WR_DATA(bc);}m++;if(m%sizex==0){m=0;break;}}else//叠加模式{if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点x++;if((x-x0)==sizex){x=x0;y++;break;}}}}while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);    	//等待SPI发送完成LCD_Address_Set(x,y,x+sizex-1,y+sizey-1);  //设置光标位置//while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);    	//等待SPI发送完成HAL_SPI_Transmit_DMA(&hspi1, &data, TypefaceNum * 2 * 8);		//这句有严重问题,会死机,OK
//	while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);    	//等待SPI发送完成}

使用缓冲区的方法还是和全屏刷新一样,先把数据都放在数组,然后一次性SPI口发送出去。
缓冲区的大小是按照32字体大小的字符来计算,32字体是 16*32=512个点,1024个字节,所以使用data是1024个字节的缓冲区,这个缓冲区必须是静态或者全局的(这个问题困扰了我好久,一开始就是显示不正常,或者死机),我的理解是SPI要取数据发送,但缓冲区没有了,被系统回收了。
使用缓冲区后,字符显示都是直接显示,不再是一个一个字符逐个显示的感觉了

http://www.hrbkazy.com/news/48388.html

相关文章:

  • 如何做网站授权网站建设情况
  • 外贸公司用什么建网站什么是seo关键词优化
  • 网站备案容易吗合肥seo外包平台
  • 网站建设意向书学生个人网页设计模板
  • 做网站 绑定域名长春最专业的seo公司
  • 上海做网站公空间刷赞网站推广
  • 网站在线客服聊天系统2024年重启核酸
  • 信息查询类网站是怎么做的推广方法有哪几种
  • 厦门 外贸商城网站建设云计算培训费用多少钱
  • 具有价值的做pc端网站辽阳网站seo
  • 有动效得网站廊坊seo优化
  • 网站建设的过程包括几个阶段网络销售每天做什么
  • adobe做网站关键词点击价格查询
  • 医疗器械网站制作seo搜索引擎优化师
  • 网站案例分析湖南推广团队在哪里找
  • 做网站是不是很简单太原seo网站排名
  • 网站所属权软文营销的写作技巧有哪些
  • 做京东网站的摘要网站推广技巧和方法
  • 盐山网站建设河南做网站的
  • 怎么做网站外链关键词排名点击工具
  • 商业网站建设软件南宁推广软件
  • 百度关键词优化专家班级优化大师使用心得
  • 最新电大网站开发维护竞价推广账户托管费用
  • 有了域名和空间怎么做网站网络推广渠道
  • 爬知乎文章做网站外贸推广优化公司
  • rp做网站企业网络营销策略案例
  • 汽车网站模版刚刚刚刚刚刚刚刚刚刚刚刚刚刚刚
  • 建设政府网站app东莞百度搜索网站排名
  • 做的网站如何改标题中国免费域名注册平台
  • 电子商务网站建设购物车北京网站建设开发公司