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

【Linux下6818開發(fā)板(ARM)】在液晶屏上顯示RGB顏色和BMP圖片

這篇具有很好參考價(jià)值的文章主要介紹了【Linux下6818開發(fā)板(ARM)】在液晶屏上顯示RGB顏色和BMP圖片。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  • (??? ),hello我是祐言
  • 博客主頁:C語言基礎(chǔ),Linux基礎(chǔ),軟件配置領(lǐng)域博主??
  • 快上??,一起學(xué)習(xí)!
  • 送給讀者的一句雞湯??:
  • 集中起來的意志可以擊穿頑石!
  • 作者水平很有限,如果發(fā)現(xiàn)錯(cuò)誤,可在評(píng)論區(qū)指正,感謝??

????????在嵌入式系統(tǒng)的開發(fā)中,我們經(jīng)常需要在液晶屏上顯示一些信息,如文本、圖片等。在本篇文章中,我將解析兩個(gè)C語言的例程,這些例程分別用于在液晶屏上顯示不同的RGB顏色和顯示BMP圖片。

一、在液晶屏上顯示RGB顏色

????????RGB顏色想必大家都懂吧,簡單介紹一下:

????????RGB是一種用于表示顏色的色彩模型,它是英文單詞"Red(紅色)"、"Green(綠色)"和"Blue(藍(lán)色)"的縮寫。在RGB色彩模型中,每種顏色由紅色、綠色和藍(lán)色三個(gè)分量的不同強(qiáng)度組成,通過調(diào)整這三個(gè)分量的數(shù)值,可以得到各種不同的顏色。

????????在RGB色彩模型中,每個(gè)顏色分量的取值范圍通常是0到255。數(shù)值為0表示沒有該顏色分量,而數(shù)值為255表示該顏色分量的最大強(qiáng)度。因此,RGB顏色可以用一個(gè)三元組(R, G, B)來表示,其中R表示紅色分量的強(qiáng)度,G表示綠色分量的強(qiáng)度,B表示藍(lán)色分量的強(qiáng)度。

????????例如,純紅色的RGB顏色表示為(255, 0, 0),即紅色分量為最大強(qiáng)度,而綠色和藍(lán)色分量均為0。類似地,純綠色的RGB顏色表示為(0, 255, 0)純藍(lán)色的RGB顏色表示為(0, 0, 255),我們通常在編程中用0x00ff0000的十六進(jìn)制表示紅色

????????通過調(diào)整RGB顏色的三個(gè)分量的數(shù)值,可以得到各種不同的顏色,包括所有可見的顏色。由于RGB色彩模型在計(jì)算機(jī)圖形和顯示技術(shù)中得到廣泛應(yīng)用,所以它是最常用的色彩模型之一。

????????下面來看一下綜合例程:

//在屏幕上交替的顯示紅綠藍(lán)三色
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <errno.h>		
#include <time.h>		
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <linux/fb.h>		//幀緩沖設(shè)備的結(jié)構(gòu)體定義在這個(gè)里面

#define LCDDEV		"/dev/fb0"			
#define LCDSIZE  800*480*4

struct color {
    unsigned int red;
    unsigned int green;
    unsigned int blue;
};
	
void input_color(int *lcd_buf, int color)
{
	int x, y;
	for ( y=0; y<480; y++)
	{
		for(x=0; x<800; x++)
		{
			lcd_buf[y*800 + x] = color;	
		}
	}
}

void output_color(int color)
{
	// 1. 打開液晶屏設(shè)備
	int lcd_fd = open(LCDDEV, O_RDWR);
	if(lcd_fd == -1)
	{
		perror("open lcd fail");
		exit(errno);
	}
	
	// 給液晶屏文件映射一塊內(nèi)存
	// void *mmap(void *addr, size_t len, int prot, int flags,int fildes, off_t off); 
	int *fb = mmap(NULL, LCDSIZE, PROT_READ|PROT_WRITE, MAP_SHARED, lcd_fd, 0);
	if(fb == MAP_FAILED)
	{
		perror("mmap fail");
		exit(errno);
	}
	
	int lcd_buf[800*480] ={0}; 
	
	input_color(lcd_buf,color);
	
	memcpy(fb,lcd_buf,LCDSIZE);
	
	
	// 3. 關(guān)閉液晶屏
	munmap(fb, LCDSIZE);
	close(lcd_fd);

}				
int main(int argc, char *argv[])
{

    // 2. 初始化顏色值
    struct color rgb = { .red = 0x00ff0000, .green = 0x0000ff00, .blue = 0x000000ff };
	
	
	while(1)
	{
		output_color(rgb.red);
		sleep(1);
		output_color(rgb.green);
		sleep(1);
		output_color(rgb.blue);
		sleep(1);
		
	}
	
	return 0;
}

????????這個(gè)代碼的主要思路是,首先定義一個(gè)顏色結(jié)構(gòu)體,然后創(chuàng)建一個(gè)顏色緩沖區(qū),將顏色數(shù)據(jù)填充到緩沖區(qū)中,最后將緩沖區(qū)的內(nèi)容寫入到液晶屏設(shè)備中。

????????在代碼中,我們首先定義了一個(gè)顏色結(jié)構(gòu)體struct color,它包含了3個(gè)成員:紅色、綠色和藍(lán)色。然后,我們定義了一個(gè)input_color函數(shù),該函數(shù)的主要作用是將顏色數(shù)據(jù)填充到顏色緩沖區(qū)中。output_color函數(shù)則負(fù)責(zé)將顏色緩沖區(qū)的內(nèi)容寫入到液晶屏設(shè)備中。

? ? ? ? 在main函數(shù)中,我們首先初始化了顏色的值,然后在一個(gè)無限循環(huán)中,不斷的將紅色、綠色和藍(lán)色的顏色信息寫入到液晶屏設(shè)備中,每次寫入后暫停1秒。

【Linux下6818開發(fā)板(ARM)】在液晶屏上顯示RGB顏色和BMP圖片,6818開發(fā)板實(shí)戰(zhàn)(ARM),linux,運(yùn)維,服務(wù)器

二、在液晶屏上顯示BMP圖片

????????這個(gè)操作就像把大象放進(jìn)冰箱需要幾步這個(gè)問題一樣,第一步打開液晶屏,第二步導(dǎo)入bmp格式的圖片,第三步關(guān)閉液晶屏,順著這個(gè)思路我們很快就能寫出如下程序,當(dāng)然細(xì)節(jié)處怎么做到還需自己研究一下哦,其實(shí)很簡單,主要用到了像素轉(zhuǎn)換的思想

????????像素轉(zhuǎn)換代碼:color = bmp_buf[k] | bmp_buf[k+1]<<8 | bmp_buf[k+2]<<16;

  • 在這個(gè)循環(huán)中,我們使用ij變量遍歷每個(gè)像素點(diǎn)的行和列,同時(shí)使用k變量來遍歷bmp_buf緩沖區(qū),處理每個(gè)像素的BGR顏色數(shù)據(jù)。
  • 由于BMP圖像是BGR順序存儲(chǔ)的,我們通過位運(yùn)算將3個(gè)字節(jié)的顏色數(shù)據(jù)合成為一個(gè)32位的像素顏色值。
  • 位運(yùn)算操作的目的是將BGR顏色數(shù)據(jù)拼接成一個(gè)32位整數(shù)的顏色值,其中高8位為0(alpha通道,不透明度),接下來8位為紅色值,再接下來8位為綠色值,最低8位為藍(lán)色值。

? ? ? ? 另外還需搞清楚,BMP圖片的像素?cái)?shù)據(jù)是從左到右,從下到上存儲(chǔ)的,而液晶屏的讀取是從左往右,從上往下,剛好是上下顛倒。

#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <errno.h>		
#include <time.h>		
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <linux/fb.h>		//幀緩沖設(shè)備的結(jié)構(gòu)體定義在這個(gè)里面

#define LCDDEV		"/dev/fb0"			
	
void show_bmp(char *name)
{
	// 1. 打開液晶屏設(shè)備
	int lcd_fd = open(LCDDEV, O_RDWR);
	if(lcd_fd == -1)
	{
		perror("open lcd fail");
		exit(errno);
	}

	int bmp_fd = open(name, O_RDONLY);
	if(bmp_fd == -1)
	{
		perror("open bmp fail");
		exit(errno);
	}
	
	// 給液晶屏文件映射一塊內(nèi)存
	// void *mmap(void *addr, size_t len, int prot, int flags,int fildes, off_t off);
           // 
	int *fb = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE, MAP_SHARED, lcd_fd, 0);
	if(fb == MAP_FAILED)
	{
		perror("mmap fail");
		exit(errno);
	}

	// 先跳過54字節(jié)的文件頭和信息頭
	lseek(bmp_fd, 54, SEEK_SET);
	
	// 讀取位圖數(shù)據(jù)(圖像的BGR顏色數(shù)據(jù)))
	char bmp_buf[800*480*3] = {0};
	read(bmp_fd, bmp_buf, 800*480*3);
	
	int i, j, k = 0;
	int color = 0;
	
	//液晶屏的掃描方式是:從上到下,從左到右
	//而bmp圖像數(shù)據(jù)的存儲(chǔ)方式是:從左到右,從下到上
	//所以要反著寫入,就能解決翻轉(zhuǎn)問題
	for (i = 479; i >= 0; i--) {
		for (j = 0; j < 800; j++) {
			color = bmp_buf[k] | bmp_buf[k + 1] << 8 | bmp_buf[k + 2] << 16;// 像素轉(zhuǎn)換
			k += 3;
			fb[i * 800 + j] = color;// 寫入液晶屏
		}
	}

	
	munmap(fb, 800*480*4);
	close(bmp_fd);
	// 3. 關(guān)閉液晶屏
	close(lcd_fd);
	
}

	
		
int main(int argc, char *argv[])
{
		
	if (argc != 2) {
        printf("Usage: %s <picture> \n", argv[0]);
        return 1;
    }

	show_bmp(argv[1]);
	return 0;
}

????????例程的主要思路是,首先打開BMP圖片文件和液晶屏設(shè)備,然后讀取BMP圖片的像素?cái)?shù)據(jù),將這些像素?cái)?shù)據(jù)寫入到液晶屏的緩沖區(qū)中,最后將緩沖區(qū)的內(nèi)容寫入到液晶屏設(shè)備中。

????????在代碼中,我們首先打開了液晶屏設(shè)備和BMP圖片文件,然后創(chuàng)建了一個(gè)映射,這個(gè)映射將液晶屏設(shè)備的內(nèi)存映射到了進(jìn)程的地址空間。接著,我們從BMP圖片文件中讀取像素?cái)?shù)據(jù),將這些數(shù)據(jù)寫入到液晶屏的緩沖區(qū)中。最后,我們將緩沖區(qū)的內(nèi)容寫入到液晶屏設(shè)備中。

【Linux下6818開發(fā)板(ARM)】在液晶屏上顯示RGB顏色和BMP圖片,6818開發(fā)板實(shí)戰(zhàn)(ARM),linux,運(yùn)維,服務(wù)器

三、運(yùn)行

? ? ? ? 有了代碼那怎么運(yùn)行呢,其實(shí)之前的博客里也教過,但是還是湊點(diǎn)字?jǐn)?shù),多說說,只要需要用 rz -y命令把可執(zhí)行文件傳給開發(fā)板就行。

【Linux下6818開發(fā)板(ARM)】在液晶屏上顯示RGB顏色和BMP圖片,6818開發(fā)板實(shí)戰(zhàn)(ARM),linux,運(yùn)維,服務(wù)器

? ? ? ? ?什么?又不會(huì)編譯了,看這里:

????????【Linux下6818開發(fā)板(ARM)】在液晶屏上顯示RGB顏色和BMP圖片,6818開發(fā)板實(shí)戰(zhàn)(ARM),linux,運(yùn)維,服務(wù)器

? ? ? ? 傳統(tǒng)就是arm-linux-gcc ,那么快捷方法就是用alias命令把它變成一個(gè)快捷指令ag。?

四、總結(jié)

????????通過這兩個(gè)例程,我們可以看到在C語言中如何操作液晶屏設(shè)備,如何將顏色和圖片顯示到液晶屏上。這些例程提供了一個(gè)很好的起點(diǎn),讓我們能夠理解如何在嵌入式系統(tǒng)中進(jìn)行液晶屏的編程。希望這個(gè)文章能對(duì)你有所幫助,如果你有任何問題,歡迎在評(píng)論區(qū)留言。

????????更多C語言Linux系統(tǒng)相關(guān)文章,關(guān)注專欄:

? ?手撕C語言

? ? ? ? ? ? 玩轉(zhuǎn)linux文章來源地址http://www.zghlxwxcb.cn/news/detail-716266.html

??寫在最后

  • 今天的分享就到這啦~
  • 覺得博主寫的還不錯(cuò)的煩勞?一鍵三連喔~
  • ??感謝關(guān)注??

到了這里,關(guān)于【Linux下6818開發(fā)板(ARM)】在液晶屏上顯示RGB顏色和BMP圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(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之LCD液晶屏(ILI9341)顯示圖片

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

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

    2024年02月09日
    瀏覽(22)
  • 關(guān)于配置tft液晶屏?xí)r,屏幕不顯示遇到的問題

    關(guān)于配置tft液晶屏?xí)r,屏幕不顯示遇到的問題

    本人新手小白,在使用單片機(jī)配置tft屏幕時(shí),發(fā)現(xiàn)屏幕一直顯示白屏(如下圖)。但是仔細(xì)檢查多遍后都無法找到問題所在,于是在CSDN上搜索了很久都沒有發(fā)現(xiàn)類似問題的解決方法。無奈只能重新回到代碼上尋找原因,終于功夫不負(fù)有心人讓我找到了問題并成功解決。以下向

    2024年02月16日
    瀏覽(11)
  • 第八講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:顯示圖片

    第八講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:顯示圖片

    目錄 第一講 單片機(jī)最小系統(tǒng)STM32F103C6T6通過RA8889驅(qū)動(dòng)彩色液晶屏播放視頻 第二講 單片機(jī)最小系統(tǒng)STM32F103C6T6控制RA8889驅(qū)動(dòng)彩色液晶屏硬件框架 第三講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:如何初始化 第四講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:繪圖 第五講 單片機(jī)驅(qū)動(dòng)彩色液

    2024年01月22日
    瀏覽(22)
  • 第七講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:顯示文字:Part3.自建字庫

    第七講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:顯示文字:Part3.自建字庫

    目錄 第一講 單片機(jī)最小系統(tǒng)STM32F103C6T6通過RA8889驅(qū)動(dòng)彩色液晶屏播放視頻 第二講 單片機(jī)最小系統(tǒng)STM32F103C6T6控制RA8889驅(qū)動(dòng)彩色液晶屏硬件框架 第三講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:如何初始化 第四講 單片機(jī)驅(qū)動(dòng)彩色液晶屏 控制RA8889軟件:繪圖 第五講 單片機(jī)驅(qū)動(dòng)彩色液

    2024年01月21日
    瀏覽(27)
  • 51單片機(jī)LCD1602液晶屏顯示字符,字符串,(有)無符號(hào)整數(shù),十六進(jìn)制數(shù),二進(jìn)制數(shù)等

    51單片機(jī)LCD1602液晶屏顯示字符,字符串,(有)無符號(hào)整數(shù),十六進(jìn)制數(shù),二進(jìn)制數(shù)等

    LCD1602液晶顯示器是廣泛使用的一種字符型液晶顯示模塊。液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富、超薄輕巧等優(yōu)點(diǎn),在嵌入式應(yīng)用系統(tǒng)中得到越來越廣泛的應(yīng)用,這講中向大家介紹的LCD1602?液晶顯示模塊(其內(nèi)部控制器為HD44780?芯片),它可以顯示兩行,每行16?個(gè)字

    2024年02月04日
    瀏覽(33)
  • FPGA輸出lvds信號(hào)點(diǎn)亮液晶屏

    FPGA輸出lvds信號(hào)點(diǎn)亮液晶屏

    ????????該方案用于生成RGB信號(hào),通過lvds接口驅(qū)動(dòng)邏輯輸出,點(diǎn)亮并驅(qū)動(dòng)BP101WX-206液晶屏幕。 參考:下面為參考文章,內(nèi)容非常詳細(xì)。 Xilinx LVDS Output——原語調(diào)用_vivado原語_ShareWow丶的博客 http://t.csdn.cn/Zy37p ????????MMCM模塊為時(shí)鐘模塊,負(fù)責(zé)將系統(tǒng)時(shí)鐘變頻與輸出,產(chǎn)

    2024年02月09日
    瀏覽(21)
  • 物聯(lián)網(wǎng)開發(fā)筆記(89)- 使用Micropython開發(fā)ESP32開發(fā)板之合宙ESP32 C3開發(fā)板通過串口SPI控制st7789 TFT液晶屏1.3寸

    物聯(lián)網(wǎng)開發(fā)筆記(89)- 使用Micropython開發(fā)ESP32開發(fā)板之合宙ESP32 C3開發(fā)板通過串口SPI控制st7789 TFT液晶屏1.3寸

    一、目的 ??????? 這一節(jié)我們學(xué)習(xí)如何使用合宙的ESP32 C3開發(fā)板控制1.3寸彩色TFT顯示屏模塊,分辨率240*240,SPI接口,ST7789驅(qū)動(dòng)芯片。 二、環(huán)境 ??????? ESP32? C3 + Thonny + 1.3寸 st7789液晶屏模塊 + 幾根杜邦線 + Win10 接線方法: ? 三、st7789 TFT顯示屏驅(qū)動(dòng) st7789py.py ? 四、點(diǎn)亮

    2024年02月11日
    瀏覽(32)
  • 51單片機(jī)學(xué)習(xí)筆記-12LCD1602液晶屏

    51單片機(jī)學(xué)習(xí)筆記-12LCD1602液晶屏

    [toc] 注:筆記主要參考B站江科大自化協(xié)教學(xué)視頻“51單片機(jī)入門教程-2020版 程序全程純手打 從零開始入門”。 注:工程及代碼文件放在了本人的Github倉庫。 LCD1602(Liquid Crystal Display)液晶顯示屏是一種字符型液晶顯示模塊,可以顯示ASCII碼的標(biāo)準(zhǔn)字符和其它的一些內(nèi)置特殊字

    2024年02月11日
    瀏覽(32)
  • 【雕爺學(xué)編程】Arduino動(dòng)手做(113)---5110液晶屏模塊

    【雕爺學(xué)編程】Arduino動(dòng)手做(113)---5110液晶屏模塊

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡(luò)上廣泛流傳,其實(shí)Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實(shí)踐出真知(一定要?jiǎng)邮肿觯┑睦砟?,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動(dòng)手嘗試系列實(shí)驗(yàn),不管成功(程序走通)

    2024年02月09日
    瀏覽(23)
  • RK3568 OpenHarmony4.0適配HDMI液晶屏

    ????????先看下最終適配效果視頻: OpenHarmony_V40_HDMI液晶屏 ????????本文基于如下開發(fā)環(huán)境進(jìn)行開發(fā)調(diào)試: 處理器:RK3568 CPU:四核64位Cortex-A55,主頻最高達(dá)2.0GHz GPU:ARM G52 2EE,支持OpenGL ES 1.1/2.0/3.2,OpenCL 2.0,Vulkan 1.1,支持內(nèi)嵌高性能2D加速硬件 NPU:支持1T算力 多媒體

    2024年02月02日
    瀏覽(155)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包