📄 showbmp_14_inv.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 + -