⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 showbmp_14_inv.c

📁 C语言下显示bmp的实例例程。希望能给大家参考一下
💻 C
字号:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include "lcd.h"	// LCD related Address#include "lcd_graphic_inv.h"		//lcd image function
#define Color 8//char buf[320*240];int main(int argc, char **argv){	FILE *fp;	int index=0;	char *bmp_image,*bmp_header;	BMP_HEADER *header;	int START_ADDR;

	//--------------------------------------------------------------------------	//  LCD Control & Frame Register Variables	//------------------------------------------------------	int ENBLCD, DisMode, ModeSel, INVCLK, INVLINE, INVFRAME, INVVD, CLKVAL;	// Control Register 1	int HorzVal, LineBlank, LineVal;			// Control Register 2	int SelfRef, WLH, WDLY, MMODE, MVAL, PageWidth, OffSize;// Control Register 3	int HActive, HHorzVal, TestMode, HorzVert, HoldVal;	// Control Register 4	int LCDBank, StartAddr, EndAddr;			// Frame Register 1, 2		int CntrlReg1, CntrlReg2, CntrlReg3, CntrlReg4;	int FrameReg1, FrameReg2;	//--------------------------------------------------------------------------	//  LCD Test Variables	//------------------------------------------------------	int PORT;	int PosX, PosY;		int HSIZE, VSIZE, BITS, DISMODE;	int Disp_Mode;	#define FRAME_BASE_ADDR		0x00	// Bank 0, Bank Address	#define TESTMODE		0	// if 0 : non test mode 						// else if 1 : test mode	unsigned char *buf;		if(strcmp(argv[1],"0")==0) Disp_Mode=0;			//color bar	else if(strcmp(argv[1],"1")==0) Disp_Mode=1;		//line	else if(strcmp(argv[1],"2")==0) Disp_Mode=2;		//fill	else if(strcmp(argv[1],"3")==0) Disp_Mode=3;		//korean famous female dance group	else if(strcmp(argv[1],"4")==0) Disp_Mode=4;		//Ferrari car	else if(strcmp(argv[1],"5")==0) Disp_Mode=5;		//Ferrari car	else if(strcmp(argv[1],"6")==0) Disp_Mode=6;		//Ferrari car	else if(strcmp(argv[1],"7")==0) Disp_Mode=7;		//Ferrari car	else if(strcmp(argv[1],"8")==0) Disp_Mode=8;		//Ferrari car	else if(strcmp(argv[1],"9")==0) Disp_Mode=9;		//Ferrari car	else Disp_Mode=10;							//color bar
	buf = (unsigned char *)malloc(320*240 + 4);
    if (buf == NULL) {
        printf("frame buffer allocation fail\n");
    }	START_ADDR=((int)buf>>2);


	switch(Disp_Mode){	case 0 :		color_bar(buf);		break;	case 1 : 		lcd_eraser(buf);		line(buf,10,120,310,120,Green_C);		break;	case 2 : 		lcd_eraser(buf);		rectangle(buf,30,30,290,210,Green_C);		break;	case 3 :		lcd_eraser(buf);		box(buf,40,40,280,200,Yellow_C);		break;	case 4 : 		lcd_eraser(buf);		bar(buf,40,0,280,50,0xfc);		bar(buf,40,50,280,100,0xca);		bar(buf,40,100,280,150,0xa7);		bar(buf,40,150,280,200,0xe3);		bar(buf,40,200,280,240,0x2f);		break;	case 5 :		lcd_eraser(buf);		line(buf,10,10,20,230,Red_C);		break;	case 6 :		lcd_eraser(buf);		ellipse(buf,80,120,50,2,Red_C);		ellipse(buf,160,120,50,2,Green_C);		ellipse(buf,240,120,50,2,Blue_C);		break;	case 7 :		lcd_eraser(buf);		circle(buf,80,120,50,Red_C);		circle(buf,160,120,50,Green_C);		circle(buf,240,120,50,Blue_C);		break;	case 8 :		lcd_eraser(buf);		rgb_bar(buf);		break;	case 9 :		if((fp=fopen("/home/image/ferrari.bmp","rb"))==NULL){			printf("open file error\n");			return 1;		}//		printf("file open ok.\n");		bmp_image=(unsigned char *)malloc(77878);		fread(bmp_image,1,77878,fp);		draw_bmp(buf, 0, 0, bmp_image);		fclose(fp);		break;	case 10 :#if 0		show_bmp(buf,0,0,argv[1]);#else		if((fp=fopen(argv[1],"rb"))==NULL){							printf("open file error\n");			return 1;		}		bmp_header=(unsigned char *)malloc(54);		fread(bmp_header,1,54,fp);		fclose(fp);				header=(BMP_HEADER *)malloc(sizeof(BMP_HEADER));		//------------------------------------------		// deal with the bmp file header		//------------------------------------------		header->bmp_id=(WORD)bmp_header[index++];		header->bmp_id+=(WORD)bmp_header[index++]<<8;		header->bmp_size=(DWORD)bmp_header[index++];		header->bmp_size+=(DWORD)bmp_header[index++]<<8;		header->bmp_size+=(DWORD)bmp_header[index++]<<16;		header->bmp_size+=(DWORD)bmp_header[index++]<<24;		header->reserv_1=(WORD)bmp_header[index++];		header->reserv_1=(WORD)bmp_header[index++]<<8;			header->reserv_2=(WORD)bmp_header[index++];		header->reserv_2=(WORD)bmp_header[index++]<<8;		header->offset=(DWORD)bmp_header[index++];		header->offset+=(DWORD)bmp_header[index++]<<8;		header->offset+=(DWORD)bmp_header[index++]<<16;		header->offset+=(DWORD)bmp_header[index++]<<24;
		if(header->bmp_id!=0x4d42){			printf("this is not bmp file\n");			return 1;		}		if(header->bmp_size>77878){			printf("the image file is too big\n");			return 1;		}		if((fp=fopen(argv[1],"rb"))==NULL){							printf("open file error\n");			return 1;		}		bmp_image=(unsigned char *)malloc(header->bmp_size);		fread(bmp_image,1,(header->bmp_size),fp);		draw_bmp(buf, 0, 0, bmp_image);		free(bmp_header);		free(bmp_image);		fclose(fp);			#endif	}		HSIZE = 320;	VSIZE = 240;	BITS = 8; 	DISMODE = 0x2;	//------------------------------------------------------	//	LCD Test Variables Setting	//----------------------------------	PORT  = (DISMODE == SINGLE_8BIT)? 8 : 4;		//--------------------------------------------------------------------------	//	LCD Control Register "1" Variables Setting	//----------------------------------	ENBLCD  = 1;						// 0 : DISABLE, 1 : ENABLE	DisMode = DISMODE;		switch(BITS) {	case 1 : ModeSel = DISPLAY_MONO; break;	case 2 : ModeSel = DISPLAY_2BIT; break;	case 4 : ModeSel = DISPLAY_4BIT; break;	case 8 : ModeSel = DISPLAY_8BIT; break;	}		INVCLK = INVLINE = INVFRAME = INVVD = 0;	CLKVAL = 14;		//--------------------------------------------------------------------------	//	LCD Control Register "2" Variables Setting	//--------------------------------------------------------------------------	HorzVal   	= (ModeSel == DISPLAY_8BIT)? ((HSIZE*3)/PORT-1) : (HSIZE/PORT-1);	LineBlank 	= 1; //zy	LineVal 	= VSIZE - 1;		//-------------------------------------------------	//	LCD Control Register "3" Variables Setting	//-------------------------------------------------	SelfRef = 0 ;		WLH 	= 0;	WDLY 	= 0;	MMODE 	= 0; 	MVAL 	= 0;		//------------------------------------------------------	//	Virtual Window Display	//PageWidth = HSIZE*BITS/32;	//OffSize   = HSIZE*BITS/32;	//------------------------------------------------------	//	Non-Virtual Window Display	PageWidth = 0;	OffSize   = 0;		//--------------------------------------------------------------------------	//	LCD Control Register "4" Variables Setting	//----------------------------------	HActive =  0;	HHorzVal = 0;	TestMode = 0;	HorzVert = 0;	HoldVal  = 0;		//--------------------------------------------------------------------------	//	LCD Frame Register Variables Setting	//----------------------------------	PosX = PosY = 0;   
	LCDBank = 0;
    StartAddr = START_ADDR;
    EndAddr = StartAddr + VSIZE*HSIZE*Color/32 - 1;
			//--------------------------------------------------------------------------	//  LCD Register Setting.	//----------------------------------	CntrlReg1 =  (1 <<28) |   (DisMode<<26) |  (ModeSel<<24) | (INVCLK<<23) |	            (INVLINE<<22) |  (INVFRAME<<21) |    (INVVD<<20) | (CLKVAL<<10);				CntrlReg2 = HorzVal<<21 | LineBlank<<10 |  LineVal;			CntrlReg3 = SelfRef<<31 |       WLH<<29 |     WDLY<<27 |    MMODE<<26 |	               MVAL<<18 | PageWidth<<10 |  OffSize;			CntrlReg4 = HActive<<19 |  HHorzVal<<8  | TestMode<<7  | HorzVert<<6  | HoldVal;		FrameReg1 = LCDBank<<23 | StartAddr;	FrameReg2 =                 EndAddr;//	printf("\n");		*LCDCON2=(long) CntrlReg2;	*LCDCON3=(long) CntrlReg3;	*LCDCON4=(long) CntrlReg4;	*LCDSADDR1=(long) FrameReg1;	*LCDSADDR2=(long) FrameReg2;	*LCDCON1=(long) CntrlReg1;//    *LCDCON1 = (*LCDCON1) | (1 <<28);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -