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

📄 lcd.c

📁 这是三星公司的arm7 s3c44b0x芯片的所有外设中断程序
💻 C
字号:
//44BTEST : lcd.c
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "..\inc\def.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\lcdlib.h"
#include "..\inc\glib.h"
#include "..\inc\lcd.h"


void Wave_test();
void Test_LcdMono(void);
void Test_LcdG4(void);
void Test_LcdG16(void);
void Test_LcdColor(void);
void Test_LcdMono(void)
{
	int i,j;
	Lcd_Init(MODE_MONO);
	Glib_Init(MODE_MONO);
	Uart_Printf("[Mono(1bit/1pixel) LCD Test]: Press Any Key!\n");
	Glib_ClearScr(0);
	for(j=0;j<LCD_YSIZE;j+=16)
	for(i=0;i<LCD_XSIZE;i+=16)
	Glib_FilledRectangle(i,j,i+15,j+15,((j+i)/16)%2);
	Uart_Printf("Mono test 1. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	Glib_FilledRectangle(160,0,319,239,1);
	Uart_Printf("Mono test 2. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	Glib_Rectangle(0,0,319,239,1); // #0
	Glib_Line(0,0,319,239,1); // 00
	Glib_Line(0,239,319,0,1);
	Glib_Rectangle(0+320,0,319+320,239,1); // 0#
	Glib_Line(0+320,0,319+320,239,1); // 00
	Glib_Line(0+320,239,319+320,0,1);
	Glib_FilledRectangle(50+320,50,269+320,189,1);
	Glib_Rectangle(0,0+240,319,239+240,1); // 00
	Glib_Line(0,0+240,319,239+240,1); // #0
	Glib_Line(0,239+240,319,0+240,1);
	Glib_FilledRectangle(50,50+240,269,189+240,1);
	Glib_Rectangle(0+320,0+240,319+320,239+240,1); // 00
	Glib_Line(0+320,0+240,319+320,239+240,1); // 0#
	Glib_Line(0+320,239+240,319+320,0+240,1);
	Glib_Rectangle(50+320,50+240,269+320,189+240,1);
	Uart_Printf("Virtual Screen Test(Mono). Press any key[ijkm\\r]!\n");
	MoveViewPort(MODE_MONO);
	Lcd_MoveViewPort(0,0,MODE_MONO);
}
void Test_LcdG4(void)
{
	int i,j,k;
	
	Lcd_Init(MODE_G4);
	Lcd_DispON();
	Glib_Init(MODE_G4);
	Uart_Printf("[4gray(2bit/1pixel) LCD Test]: Press Any Key!\n");
	Glib_ClearScr(0);
	Uart_Printf("\n Do you want to tets wave?");
	if(Uart_Getch() == 'y')	
		Wave_test();
	j=0;
	for(i=0;i<320;i+=80)
		Glib_FilledRectangle(0+i,0,79+i,239,j++);
	Uart_Printf("4 gray mode test 1. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	j=0;
	for(i=0;i<320;i+=80)
	{
		Glib_FilledRectangle(0+i,0,79+i,119,j);
		Glib_FilledRectangle(0+i,120,79+i,239,3-j);
		j++;
	}
	Uart_Printf("4 gray mode test 2. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	j=0;
	for(i=0;i<240;i+=60)
	{
		Glib_FilledRectangle(i,i,i+59,i+59,j);
		j++;
	}
	Uart_Printf("4 gray mode test 3. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	k=0;
	for(i=160;i<480;i+=80)
	{
		for(j=120;j<360;j+=60)
		{
			Glib_FilledRectangle(i,j,i+79,j+59,k%4);
			k++;
		}
		k+=2;;
	}
	// #0
	// 00
	Glib_Rectangle(0,0,319,239,3);
	Glib_Line(0,0,319,239,3);
	Glib_Line(0,239,319,0,3);
	// 0#
	// 00
	Glib_Rectangle(0+320,0,319+320,239,3);
	Glib_Line(0+320,0,319+320,239,3);
	Glib_Line(0+320,239,319+320,0,3);
	// 00
	// #0
	Glib_Rectangle(0,0+240,319,239+240,3);
	Glib_Line(0,0+240,319,239+240,3);
	Glib_Line(0,239+240,319,0+240,3);
	// 00
	// 0#
	Glib_Line(0+320,0+240,319+320,239+240,3);
	Glib_Line(0+320,239+240,319+320,0+240,3);
	Glib_Rectangle(50+320,50+240,269+320,189+240,3);
	Uart_Printf("Virtual Screen Test(4 gray). Press any key[ijkm\\r]!\n");
	MoveViewPort(MODE_G4);
	Lcd_MoveViewPort(0,0,MODE_G4);
}

void Test_LcdG16(void)
{
	int i,j,k;
	Lcd_Init(MODE_G16);
	Glib_Init(MODE_G16);
	Uart_Printf("[16 gray(4bit/1pixel) LCD Test]: Press Any Key!\n");
	Glib_ClearScr(0);
	j=0;
	for(i=0;i<320;i+=20)
		Glib_FilledRectangle(0+i,0,19+i,239,j++);
	Uart_Printf("16 gray mode test 1. Press any key!\n");
	Uart_Getch();
	Uart_Printf("16 gray color viewing. Press any key 16 times.\n");
	j=0;
	Glib_ClearScr(0);
	for(i=0;i<16;i++)
	{
		Glib_FilledRectangle(0,0,319,239,i);
		Uart_Printf("Color num=%d\n",i);
		Uart_Getch();
	}
	Glib_ClearScr(0);
	j=0;
	for(i=0;i<320;i+=20)
	{
		Glib_FilledRectangle(0+i,0,19+i,119,j);
		Glib_FilledRectangle(0+i,120,19+i,239,15-j);
		j++;
	}
	Uart_Printf("16 gray mode test 2. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	j=0;
	for(i=0;i<240;i+=30)
	{
		Glib_FilledRectangle(i,i,i+29,i+29,j);
		Glib_FilledRectangle(i+110,i,i+29+110,i+29,j+8);
		j++;
	}
	Uart_Printf("4 gray mode test 3. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	k=0;
	for(i=160;i<480;i+=40)
	{
		for(j=120;j<360;j+=30)
		{
			Glib_FilledRectangle(i,j,i+39,j+29,k%16);
			k++;
		}
	}
	// #0
	// 00
	Glib_Rectangle(0,0,319,239,15);
	Glib_Line(0,0,319,239,15);
	Glib_Line(0,239,319,0,15);
	// 0#
	// 00
	Glib_Rectangle(0+320,0,319+320,239,15);
	Glib_Line(0+320,0,319+320,239,15);
	Glib_Line(0+320,239,319+320,0,15);
	// 00
	// #0
	Glib_Rectangle(0,0+240,319,239+240,15);
	Glib_Line(0,0+240,319,239+240,15);
	Glib_Line(0,239+240,319,0+240,15);
	// 00
	// 0#
	Glib_Rectangle(0+320,0+240,319+320,239+240,15);
	Glib_Line(0+320,0+240,319+320,239+240,15);
	Glib_Line(0+320,239+240,319+320,0+240,15);
	Glib_Rectangle(50+320,50+240,269+320,189+240,15);
	Uart_Printf("Virtual Screen Test(16 gray). Press any key[ijkm\\r]!\n");
	MoveViewPort(MODE_G16);
	Lcd_MoveViewPort(0,0,MODE_G16);
}
void Test_LcdColor(void)
{
	int i,j,k;
	rPDATE=rPDATE&~(1<<5)|(1<<5); //GPE5=H
	rPCONE=rPCONE&~(3<<10)|(1<<10); //GPE5=output
	rPCONC=rPCONC&~(0xff<<8)|(0xff<<8); //GPC[4:7] => VD[7:4]
	Uart_Printf("[(240x3)x320 COLOR STN LCD TEST]\n");
	Uart_Printf(" R:0 ... 7 \n");
	Uart_Printf("G:0 B0:1 B0:1 B0:1 \n");
	Uart_Printf("G:. 2:3 2:3 2:3 \n");
	Uart_Printf("G:. B0:1 B0:1 B0:1 \n");
	Uart_Printf("G:. 2:3 2:3 2:3 \n");
	Uart_Printf("G:. B0:1 B0:1 B0:1 \n");
	Uart_Printf("G:7 2:3 2:3 2:3 \n");
	Lcd_Init(MODE_COLOR);
	Glib_Init(MODE_COLOR);
	Glib_ClearScr(0);
	for(j=0;j<320;j++)
	{
		for(i=0;i<240;i++)
		{ //RRRGGGBB
			PutPixel( i,j,((i/30)<<5)+((j/40)<<2)+((i/15)&0x1)+(((j/20)&0x1)<<1) );
		}
	}
	Uart_Printf("256 color mode test 1. Press any key!\n");
	Uart_Getch();
	Glib_ClearScr(0);
	k=0;
	for(i=160;i<480;i+=20)
	{
		for(j=120;j<360;j+=15)
		{
			Glib_FilledRectangle(i,j,i+19,j+14,k);
			k++;
		}
	}
	// #0
	// 00
	Glib_Rectangle(0,0,319,239,255);
	Glib_Line(0,0,319,239,255);
	Glib_Line(0,239,319,0,255);
	// 0#
	// 00
	Glib_Rectangle(0+320,0,319+320,239,255);
	Glib_Line(0+320,0,319+320,239,255);
	Glib_Line(0+320,239,319+320,0,255);
	// 00
	// #0
	Glib_Rectangle(0,0+240,319,239+240,255);
	Glib_Line(0,0+240,319,239+240,255);
	Glib_Line(0,239+240,319,0+240,255);
	// 00
	// 0#
	Glib_Rectangle(0+320,0+240,319+320,239+240,255);
	Glib_Line(0+320,0+240,319+320,239+240,255);
	Glib_Line(0+320,239+240,319+320,0+240,255);
	Glib_Rectangle(50+320,50+240,269+320,189+240,255);
	Uart_Printf("Virtual Screen Test(256 color). Press any key[ijkm\\r]!\n");
	MoveViewPort(MODE_COLOR);
	Lcd_MoveViewPort(0,0,MODE_COLOR);
}


void MoveViewPort(int depth)
{
	int vx=0,vy=0,vd;
	vd=(depth==1)*16+(depth==4)*8+(depth==16)*4+(depth==256)*2;
	while(1)
	{
		switch(Uart_Getch())
		{
		case 'i':
			if(vy>=vd)vy-=vd;
			break;
		case 'j':
			if(vx>=vd)vx-=vd;
			break;
		case 'k':
			if(vx<=SCR_XSIZE-LCD_XSIZE-vd)vx+=vd;
			break;
		case 'm':
			if(vy<=(SCR_YSIZE-LCD_YSIZE-vd))vy+=vd;
			break;
		case '\r':
			return;
		default:
			break;
		}
		Uart_Printf("vx=%3d,vy=%3d\n",vx,vy);
		Lcd_MoveViewPort(vx,vy,depth);
	}
}
/************************ for only test **********************/
#define BUFFER0_PREPARED (0)
#define BUFFER1_PREPARED (1)
#define BUFFER0_USED (2)
#define BUFFER1_USED (3)
#define M5D(n) ((n) & 0x1fffff)
#define MVAL (13)
unsigned int (*frameBuffer256_2)[SCR_XSIZE/4];
void MoveViewPort2(int depth)
{
	int vx=0,vy=0,vd;
	U32 addr;
	char key;
	int state=BUFFER0_USED;
	vd=(depth==1)*16+(depth==4)*8+(depth==16)*4+(depth==256)*2;
	while(1)
	{
		while(1)
		{
			key=Uart_GetKey();
			if(key!=0)break;
			if(state==BUFFER1_USED)
			{//set the frame buffer as BUFFER1
				state=BUFFER0_PREPARED;
				while((rLCDCON1>>22)==0); // if x>64
				addr=(U32)frameBuffer256+(vx/1)+vy*(SCR_XSIZE/1);
				rLCDSADDR1= (0x3<<27) | ( (addr>>22)<<21 ) | M5D(addr>>1);
				// 256-color, LCDBANK, LCDBASEU
				rLCDSADDR2= M5D(((addr+(SCR_XSIZE*LCD_YSIZE))>>1)) | (MVAL<<21);
			}
			if(state==BUFFER0_USED)
			{//set the frame buffer as BUFFER0
			state=BUFFER1_PREPARED;
			while((rLCDCON1>>22)==0); // if x>64
			addr=(U32)frameBuffer256_2+(vx/1)+vy*(SCR_XSIZE/1);
			rLCDSADDR1= (0x3<<27) | ( (addr>>22)<<21 ) | M5D(addr>>1);
			// 256-color, LCDBANK, LCDBASEU
			rLCDSADDR2= M5D(((addr+(SCR_XSIZE*LCD_YSIZE))>>1)) | (MVAL<<21);
			}
			if((rLCDCON1>>22)==0)
			{
			if(state==BUFFER0_PREPARED)state=BUFFER0_USED;
			if(state==BUFFER1_PREPARED)state=BUFFER1_USED;
			}
		}
		switch(key)
		{
		case 'i':
			if(vy>=vd)vy-=vd;
			break;
		case 'j':
			if(vx>=vd)vx-=vd;
			break;
		case 'k':
			if(vx<=SCR_XSIZE-LCD_XSIZE-vd)vx+=vd;
			break;
		case 'm':
			if(vy<=(SCR_YSIZE-LCD_YSIZE-vd))vy+=vd;
			break;
		case '\r':
			return;
		default:
			break;
		}
		Uart_Printf("vx=%3d,vy=%3d\n",vx,vy);
		Lcd_MoveViewPort(vx,vy,depth);
	}
}


void Test_LcdColor2(void)
{
	int i,j,k;
	rPDATE=rPDATE&~(1<<5)|(1<<5); //GPE5=H
	rPCONE=rPCONE&~(3<<10)|(1<<10); //GPE5=output
	rPCONC=rPCONC&~(0xff<<8)|(0xff<<8); //GPC[4:7] => VD[7:4]
	Uart_Printf("[(240x3)x320 Color STN Virtual Screen & 2 Frame Buffers Test]\n");
	Lcd_Init(MODE_COLOR);
	frameBuffer256_2=(unsigned int (*)[SCR_XSIZE/4])malloc(SCR_XSIZE/1*SCR_YSIZE);
	if((U32)frameBuffer256==0x0)return;
	if((U32)frameBuffer256_2==0x0)return;
	Glib_Init(MODE_COLOR);
	Glib_ClearScr(0);
	Glib_ClearScr(0);
	k=0;
	for(i=160;i<480;i+=20)
	{
		for(j=120;j<360;j+=15)
		{
			Glib_FilledRectangle(i,j,i+19,j+14,k);
			k++;
		}
	}
	// #0
	// 00
	Glib_Rectangle(0,0,319,239,255);
	Glib_Line(0,0,319,239,255);
	Glib_Line(0,239,319,0,255);
	// 0#
	// 00
	Glib_Rectangle(0+320,0,319+320,239,255);
	Glib_Line(0+320,0,319+320,239,255);
	Glib_Line(0+320,239,319+320,0,255);
	// 00
	// #0
	Glib_Rectangle(0,0+240,319,239+240,255);
	Glib_Line(0,0+240,319,239+240,255);
	Glib_Line(0,239+240,319,0+240,255);
	// 00
	// 0#
	Glib_Rectangle(0+320,0+240,319+320,239+240,255);
	Glib_Line(0+320,0+240,319+320,239+240,255);
	Glib_Line(0+320,239+240,319+320,0+240,255);
	Glib_Rectangle(50+320,50+240,269+320,189+240,255);
	for(i=0;i<720/4;i++)
	{
		for(j=0;j<960;j++)
		{
			frameBuffer256_2[j][i]=frameBuffer256[j][i];
		}
	}
	Uart_Printf("Virtual Screen Test(256 color). Press any key[ijkm\\r]!\n");
	MoveViewPort2(MODE_COLOR);
	Lcd_MoveViewPort(0,0,MODE_COLOR);
}

void Wave_test()
{
	int i,y,j;
	double s;
	U16 addr0[320];
	Uart_Printf("    \nNow begin wave test! \n");
	Uart_Printf("    \nIf you want to stop, please press 'E' or 'e'\n");
	for(j = 0;j < 200;j++){
		for(i = 0;i < 320;i++){
//			y = rand()%200 + 10;
			s = sin((double)i);
			y = (int)( s*20);
			if(i > 0){
				Glib_Line(i,0,i,240,0);
				Glib_Line(i - 1,addr0[i - 1],i,y ,3);
			}
			addr0[i] = y;

		}
	}		
}

⌨️ 快捷键说明

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