国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32使用1.69寸液晶顯示模塊使用緩沖區(qū)實(shí)現(xiàn)快速刷新全屏顯示字符串功能

這篇具有很好參考價(jià)值的文章主要介紹了STM32使用1.69寸液晶顯示模塊使用緩沖區(qū)實(shí)現(xiàn)快速刷新全屏顯示字符串功能。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一個(gè)1.69寸SPI接口的液晶顯示模塊,有320*240=76800個(gè)點(diǎn),每個(gè)點(diǎn)有2個(gè)字節(jié)表示RGB的顏色,所以需要153.6K個(gè)字節(jié)的數(shù)據(jù)來刷新全屏,如果SPI口輸出數(shù)據(jù)不是高速并且不緊密排列的話,刷新就會比較慢,有從下到下的肉眼可見的刷新過程,現(xiàn)就是希望使用數(shù)據(jù)緩沖區(qū)(我理解這就是顯存的概念吧)來快速刷新顯示區(qū)域。
原始的單個(gè)字符的顯示程序:

/******************************************************************************
      函數(shù)說明:顯示單個(gè)字符
      入口數(shù)據(jù):x,y顯示坐標(biāo)
                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;//一個(gè)字符所占字節(jié)大小
	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);  //設(shè)置光標(biāo)位置
	for(i=0;i<TypefaceNum;i++)
	{ 
		if(sizey==12)temp=ascii_1206[num][i];		       //調(diào)用6x12字體
		else if(sizey==16)temp=ascii_1608[num][i];		 //調(diào)用8x16字體
		else if(sizey==24)temp=ascii_2412[num][i];		 //調(diào)用12x24字體
		else if(sizey==32)temp=ascii_3216[num][i];		 //調(diào)用16x32字體
		else return;
		for(t=0;t<8;t++)
		{
			if(!mode)//非疊加模式
			{
				if(temp&(0x01<<t))LCD_WR_DATA(fc);		//每一個(gè)點(diǎn)發(fā)送2個(gè)字節(jié)數(shù)據(jù)
				else LCD_WR_DATA(bc);
				m++;
				if(m%sizex==0)
				{
					m=0;
					break;
				}
			}
			else//疊加模式
			{
				if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//畫一個(gè)點(diǎn)
				x++;
				if((x-x0)==sizex)
				{
					x=x0;
					y++;
					break;
				}
			}
		}
	}   	 	  
}

由if(temp&(0x01<<t))LCD_WR_DATA(fc); //每一個(gè)點(diǎn)發(fā)送2個(gè)字節(jié)數(shù)據(jù)
else LCD_WR_DATA(bc);
這幾句說明每個(gè)點(diǎn),由SPI發(fā)送2個(gè)字節(jié)的數(shù)據(jù)出去,而且是一邊計(jì)算數(shù)據(jù),一邊發(fā)送數(shù)據(jù),速度較慢,可以肉眼可見的逐字顯示的。

改用緩沖區(qū)顯示單個(gè)字符:

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;//一個(gè)字符所占字節(jié)大小
	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);  	//設(shè)置光標(biāo)位置
	//uint8_t data[TypefaceNum * 2 * 8];	//=========
	static uint8_t data[1024];				//=========重要,用靜態(tài)變量,或者用全局變量,一個(gè)字符作為一個(gè)緩沖區(qū)
	uint16_t xx = 0;
	for(i=0; i<TypefaceNum; i++)
	{
		if(sizey==12)temp=ascii_1206[num][i];		       	//調(diào)用6x12字體
		else if(sizey==16)temp=ascii_1608[num][i];		 	//調(diào)用8x16字體
		else if(sizey==24)temp=ascii_2412[num][i];		 	//調(diào)用12x24字體
		else if(sizey==32)temp=ascii_3216[num][i];		 	//調(diào)用16x32字體
		else return;
		for(t=0;t<8;t++)
		{
			if(!mode)//非疊加模式  帶緩沖區(qū),實(shí)現(xiàn)快顯示功能
			{
				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);//畫一個(gè)點(diǎn)
				x++;
				if((x-x0)==sizex)
				{
					x=x0;
					y++;
					break;
				}
			}
		}
	}
	while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);    	//等待SPI發(fā)送完成
	LCD_Address_Set(x,y,x+sizex-1,y+sizey-1);  //設(shè)置光標(biāo)位置
	//while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);    	//等待SPI發(fā)送完成
	HAL_SPI_Transmit_DMA(&hspi1, &data, TypefaceNum * 2 * 8);		//這句有嚴(yán)重問題,會死機(jī),OK
//	while(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_BUSY_TX);    	//等待SPI發(fā)送完成

}

使用緩沖區(qū)的方法還是和全屏刷新一樣,先把數(shù)據(jù)都放在數(shù)組,然后一次性SPI口發(fā)送出去。
緩沖區(qū)的大小是按照32字體大小的字符來計(jì)算,32字體是 16*32=512個(gè)點(diǎn),1024個(gè)字節(jié),所以使用data是1024個(gè)字節(jié)的緩沖區(qū),這個(gè)緩沖區(qū)必須是靜態(tài)或者全局的(這個(gè)問題困擾了我好久,一開始就是顯示不正常,或者死機(jī)),我的理解是SPI要取數(shù)據(jù)發(fā)送,但緩沖區(qū)沒有了,被系統(tǒng)回收了。
使用緩沖區(qū)后,字符顯示都是直接顯示,不再是一個(gè)一個(gè)字符逐個(gè)顯示的感覺了文章來源地址http://www.zghlxwxcb.cn/news/detail-809135.html

到了這里,關(guān)于STM32使用1.69寸液晶顯示模塊使用緩沖區(qū)實(shí)現(xiàn)快速刷新全屏顯示字符串功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一文讀懂使用STM32驅(qū)動 LCD1602 液晶顯示屏(基于Mbed Studio平臺)

    一文讀懂使用STM32驅(qū)動 LCD1602 液晶顯示屏(基于Mbed Studio平臺)

    LCD (Liquid Crystal Display) 液晶顯示屏是一種廣泛使用的一種字符型液晶顯示模塊。其中型號1602表示每行顯示16個(gè)字符、一共2行。LCD1602相比于OLED最大的好處就是不用使用SPI或I2C等任何通信協(xié)議,而是由mbed直接將命令傳給LCD從而實(shí)現(xiàn)控制。 LCD1602主要參數(shù)如下: 顯示字符:16×2個(gè)

    2024年02月05日
    瀏覽(26)
  • STM32—LCD液晶顯示屏

    STM32—LCD液晶顯示屏

    目錄 LCD液晶顯示屏介紹 液晶的組成 ?物理特性 液晶顯示屏內(nèi)部構(gòu)造 ?顏色深度 點(diǎn)亮LCD顯示屏 查看原理圖 圖片顯示 保存到工程用戶代碼的Inc目錄下 參數(shù)為數(shù)組名 字符顯示? 漢字顯示 某些物質(zhì)在熔融狀態(tài)或被溶劑溶解之后,盡管失去固態(tài)物質(zhì)的剛性,卻獲得了液體的易流動

    2024年02月04日
    瀏覽(23)
  • LCD-STM32液晶顯示中英文-(7.字模及顯示原理)

    LCD-STM32液晶顯示中英文-(7.字模及顯示原理)

    目錄 字模介紹 什么是字模 字模的構(gòu)成 字模顯示原理 字模制作 如何制作字模 字模尋址公式 存儲字模文件 ????????有了編碼,我們就能在計(jì)算機(jī)中處理、存儲字符了,但是如果計(jì)算機(jī)處理完字符后直接以編碼的形式輸出,人類將難以識別。因此計(jì)算機(jī)與人交互時(shí),一般會

    2024年02月17日
    瀏覽(32)
  • STM32學(xué)習(xí)記錄0010——TFTLCD液晶顯示屏

    STM32學(xué)習(xí)記錄0010——TFTLCD液晶顯示屏

    《STM32不完全手冊》第18章 《ILI9341數(shù)據(jù)手冊》 TFT-LCD 即薄膜晶體管液晶顯示器。其英文全稱為:Thin Film Transistor-Liquid Crystal Display。TFT-LCD與無源 TN-LCD、STN-LCD 的簡單矩陣不同,它在液晶顯示屏的每一個(gè)象素上都設(shè)置有一個(gè)薄膜晶體管(TFT),可有效地克服非選通時(shí)的串?dāng)_,使

    2023年04月09日
    瀏覽(29)
  • LCD—STM32液晶顯示(1.顯示器簡介及LCD顯示原理)(6000字詳細(xì)介紹)

    LCD—STM32液晶顯示(1.顯示器簡介及LCD顯示原理)(6000字詳細(xì)介紹)

    目錄 顯示器簡介 液晶顯示器 液晶 像素 液晶屏缺點(diǎn) LED顯示器 OLED顯示器 顯示器的基本參數(shù) STM32板載液晶控制原理(不帶微控制器) 液晶控制原理 控制信號線(不帶液晶控制器) 液晶數(shù)據(jù)傳輸時(shí)序 顯存 總結(jié) 3.2寸液晶屏介紹(搭載液晶控制器) 3.2寸電阻觸摸屏實(shí)物 ILI9341液晶

    2024年02月17日
    瀏覽(35)
  • LCD—STM32液晶顯示(3.NOR FLASH時(shí)序結(jié)構(gòu)體)

    LCD—STM32液晶顯示(3.NOR FLASH時(shí)序結(jié)構(gòu)體)

    目錄 LCD結(jié)構(gòu)體配置 ?NOR FLASH時(shí)序結(jié)構(gòu)體 FSMC的NOR FLASH初始化結(jié)構(gòu)體 ????????與控制SRAM時(shí)一樣,控制FSMC使用NOR FLASH存儲器時(shí)主要是配置時(shí)序寄存器以及控制寄存器,利用ST標(biāo)準(zhǔn)庫的時(shí)序結(jié)構(gòu)體以及初始化結(jié)構(gòu)體可以很方便地寫入?yún)?shù)。 FSMC_AddressSetupTime 本成員設(shè)置地址建立

    2024年02月17日
    瀏覽(49)
  • LCD-STM32液晶顯示中英文-(5.字符編碼)

    LCD-STM32液晶顯示中英文-(5.字符編碼)

    目錄 字符編碼 字符編碼說明參考網(wǎng)站 字符編碼 ASCII編碼 ASCII編碼介紹 ASCII編碼表 中文編碼 1. GB2312標(biāo)準(zhǔn) 區(qū)位碼 ?2. GBK編碼 3. GB18030 各個(gè)標(biāo)準(zhǔn)的對比說明 4. Big5編碼 字符編碼及轉(zhuǎn)換測試:導(dǎo)航菜單 - 千千秀字 Unicode官網(wǎng):Index。 使用舉例: keil5設(shè)置編碼如下: ????????由于

    2024年02月17日
    瀏覽(20)
  • STM32之LCD液晶屏(ILI9341)顯示圖片

    STM32之LCD液晶屏(ILI9341)顯示圖片

    本文章基于STM32F103VET6,參考野火的驅(qū)動程序,用LCD液晶屏顯示靜態(tài)圖像。 有紕漏請指出,轉(zhuǎn)載請說明。 學(xué)習(xí)交流請發(fā)郵件 1280253714@qq.com 顯示一個(gè)像素點(diǎn) 將rgb888圖片轉(zhuǎn)為rgb555 輸出rgb555的C語言數(shù)組 數(shù)組的每一個(gè)元素對應(yīng)一個(gè)像素點(diǎn)的rgb三個(gè)通道的數(shù)據(jù),用stm32的FSMC模擬8080時(shí)

    2024年02月09日
    瀏覽(22)
  • LCD-STM32液晶顯示中英文-(6.unicode字符集)

    LCD-STM32液晶顯示中英文-(6.unicode字符集)

    目錄 Unicode字符集和編碼 UTF-32 UTF-16 UTF-8(重點(diǎn):必須掌握) BOM ANSI ????????由于各個(gè)國家或地區(qū)都根據(jù)使用自己的文字系統(tǒng)制定標(biāo)準(zhǔn),同一個(gè)編碼在不同的標(biāo)準(zhǔn)里表示不一樣的字符,各個(gè)標(biāo)準(zhǔn)互不兼容,而又沒有一個(gè)標(biāo)準(zhǔn)能夠囊括所有的字符,即無法用一個(gè)標(biāo)準(zhǔn)表達(dá)所有

    2024年02月16日
    瀏覽(23)
  • 基于 STM32 的語音識別智能家居控制系統(tǒng)的設(shè)計(jì)(LD3320語音識別芯片+ESP8266 WIFI模塊+DHT11溫濕度采集+MQ系列 煙霧及可燃?xì)怏w+蜂鳴器+步進(jìn)電機(jī)模擬窗簾+OLED液晶顯示+

    基于 STM32 的語音識別智能家居控制系統(tǒng)的設(shè)計(jì)(LD3320語音識別芯片+ESP8266 WIFI模塊+DHT11溫濕度采集+MQ系列 煙霧及可燃?xì)怏w+蜂鳴器+步進(jìn)電機(jī)模擬窗簾+OLED液晶顯示+

    ## **基于 STM32 的語音識別智能家居控制系統(tǒng)的設(shè)計(jì)(LD3320語音識別芯片+ESP8266 WIFI模塊(阿里云 或ONENET或局域網(wǎng))+DHT11溫濕度采集+MQ系列 煙霧及可燃?xì)怏w+蜂鳴器+步進(jìn)電機(jī)模擬窗簾+OLED液晶顯示+手機(jī)APP)** 本文采用LD3320語音識別芯片+ESP8266 WIFI模塊+DHT11溫濕度采集+MQ系列 煙霧及可

    2024年02月04日
    瀏覽(229)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包