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

📄 draw.c~

📁 用于控制嵌入式开发板上的屏幕显示点线圆等 这是基于frv开发板的
💻 C~
字号:
#include "myhead.h"int fd;
char * fbp;int start(void)
{
	struct fr400vdc_config cfg;

	int x[13]={0,320,1,1,1,0,240,1,1,1,0,0,6};
	cfg.pix_x=320;
	cfg.pix_y=240;
	cfg.pix_sz=3;
	cfg.skipbf=0;
	cfg.buf_unit_sz=320*240*3;
	cfg.buf_num=1;
	cfg.stop_immidiate=1;
	cfg.rd_count_buf_idx=1;
	memcpy(cfg.prm,x,13*4);
	//cfg.prm[13]={0,320,1,1,1,0,240,1,1,1,0,0,6};
	cfg.rddl=1;
	cfg.hls=0;
	cfg.pal=0;
	cfg.cscv=0;
	cfg.dbls=0;
	cfg.r601=0;
	cfg.tfop=0;
	cfg.dsm=0;
	cfg.dfp=0;
	cfg.die=1;
	cfg.enop=0;
	cfg.vsop=0;
	cfg.hsop=0;
	cfg.dsr=0;
	cfg.csron=0;
	cfg.dpf=1;
	cfg.dms=3;
	cfg.dma_mode=3;
	cfg.dma_ats=2;
	cfg.dma_rs=1;
	
	//cfg={320,240,3,0,320*240*3,1,1,1,{0,320,1,1,1,0,240,1,1,1,0,0,6},1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,3,3,2,1};
	fd=open("/dev/fr400cc_vdc",O_RDONLY | O_NONBLOCK);
	fbp=(char *)mmap(0,320*240*3,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

	ioctl(fd,VDCIOCSCFG,&cfg);
	ioctl(fd,VDCIOCSDAT,0);
	ioctl(fd,VDCIOCSTART,0);
	return 0;
}

int close(void)
{
	ioctl(fd,VDCIOCSTOP,0);
	return 0;
}

int background(char colour)
{	
	int i;
	switch(colour)
	{
		case 'w':for(i=0;i<320*240*3;i+=3)
					{	fbp[i]=0xFF;
						fbp[i+1]=0xFF;
						fbp[i+2]=0xFF;	
					}break;
		case 'r':for(i=0;i<320*240*3;i+=3)
					{	fbp[i]=0xFF;
					 	fbp[i+1]=0x00;
						fbp[i+2]=0x00;	
					}break;
		case 'g':for(i=0;i<320*240*3;i+=3)
					{	fbp[i]=0x00;
					 	fbp[i+1]=0xFF;
						fbp[i+2]=0x00;	
					}break;
		case 'b':for(i=0;i<320*240*3;i+=3)
					{	fbp[i]=0x00;
					 	fbp[i+1]=0x00;
						fbp[i+2]=0xFF;	
					}break;
		default:for(i=0;i<320*240*3;i+=3)
					{	fbp[i]=0x00;
					 	fbp[i+1]=0x00;
						fbp[i+2]=0x00;	
					}break;
	}
	return 0;			   
}


int drawdot(int x,int y,char colour)
{
	char *pointer;
	int colorcode;
	switch(colour)
	{
		case 'w':colorcode=0xFFFFFF;break;
		case 'r':colorcode=0xFF0000;break;
		case 'g':colorcode=0x00FF00;break;
		case 'b':colorcode=0x0000FF;break;		default:colorcode=0x000000;break;
	}
	pointer=(char*)&colorcode;
	fbp[(y*320+x)*3] = *pointer;	fbp[(y*320+x)*3+1] = *(pointer+1);	fbp[(y*320+x)*3+2] = *(pointer+2);//	*(char *)(fbp+(y*320+x)*3) = *pointer;
//	*(char *)(fbp+(y*320+x)*3+1) = *(pointer+1);
//	*(char *)(fbp+(y*320+x)*3+2) = *(pointer+2);
	return 0;
}


int drawline(int x1,int y1,int x2,int y2,char colour)
{	
	int i;
	int min, max;
	if(x1==x2) 
	{
	if(y1<y2) {min =y1;max =y2;}
	else {min=y2;max=y1;}
	for(i=min;i<=max;i++)	
	drawdot(x1,i,colour);
	}

	else if(y1==y2) 
	{
	if(x1<x2) {min =x1;max =x2;}
	else {min=x2;max=x1;}
	for(i=min;i<=max;i++)	
	drawdot(i,y1,colour);
	}

	else if(((y2-y1)*1.0/(x2-x1)<=1)&&((y2-y1)*1.0/(x2-x1)>=-1))
	{
	if (x1<x2) { min = x1; max = x2;}
	else {min = x2;max = x1;}
	for(i=min;i<=max;i++)
	drawdot(i, (int)((float)(y2-y1)*(float)(i-x1)/(x2-x1)+y1),colour);
	}

	else //((y2-y1)/(x2-x1)>1)
	{
	if(y1<y2) { min =y1;max =y2;}	
	else {min=y2;max=y1;}
	for(i=min;i<=max;i++)
	drawdot((int)((float)((i-y1)*(x2-x1))/(y2-y1)+x1),i,colour);
	}

	return 0;
}


/*int drawcircle(int x,int y,int r ,char colour)
{	
	int i;
	float pi=3.1415926;
	int n=r*r;
	for(i=0;i<n;i++)
	drawdot((int)(x+r*cos(2*i*pi/n)),(int)(y+r*sin(2*pi*i*n)),colour);
	return 0;
}*/

int circle(int x,int y,int r,char colour)
{
	int i,j;
	for(i=0;i<=320;i++)
	{    for(j=0;j<=240;j++)
	     {    if((((i-x)*(i-x)+(j-y)*(j-y)-r*r)>-r)&&(((i-x)*(i-x)+(j-y)*(j-y)-r*r)<r))
		    drawdot(i,j,colour);
                    }
	}	return 0;
}int fullcircle(int x,int y,int r,char colour){
	int i,j;
	for(i=0;i<=320;i++)
	{    for(j=0;j<=240;j++)
	     {    if(((i-x)*(i-x)+(j-y)*(j-y))<=r*r)
		    drawdot(i,j,colour);
                    }
	}
}int ellipse(int x,int y,int a,int b,char colour)
{
	int i,j;
	for(i=0;i<=320;i++)
	{    for(j=0;j<=240;j++)
	     {    if((((i-x)*(i-x)*b*b+(j-y)*(j-y)*a*a-a*a*b*b)>-a*a*b)&&(((i-x)*(i-x)*b*b+(j-y)*(j-y)*a*a-a*a*b*b)<a*a*b))
		    drawdot(i,j,colour);
                    }
	}	return 0;
}int num(char number){	switch(number)	{		case '0':{			drawline(120,40,200,40,'w');			drawline(120,200,200,200,'w');			drawline(120,40,120,120,'w');			drawline(120,120,120,200,'w');			drawline(200,40,200,120,'w');			drawline(200,120,200,200,'w');			}break;		case '1':{			drawline(200,40,200,120,'w');			drawline(200,120,200,200,'w');			}break;		case '2':{			drawline(120,40,200,40,'w');			drawline(120,120,200,120,'w');			drawline(120,200,200,200,'w');			drawline(120,120,120,200,'w');			drawline(200,40,200,120,'w');			}break;		case '3':{			drawline(120,40,200,40,'w');			drawline(120,120,200,120,'w');			drawline(120,200,200,200,'w');			drawline(200,40,200,120,'w');			drawline(200,120,200,200,'w');			}break;		case '4':{			drawline(120,120,200,120,'w');			drawline(120,40,120,120,'w');			drawline(200,40,200,120,'w');			drawline(200,120,200,200,'w');			}break;		case '5':{			drawline(120,40,200,40,'w');			drawline(120,120,200,120,'w');			drawline(120,200,200,200,'w');			drawline(120,40,120,120,'w');			drawline(200,120,200,200,'w');			}break;		case '6':{			drawline(120,40,200,40,'w');			drawline(120,120,200,120,'w');			drawline(120,200,200,200,'w');			drawline(120,40,120,120,'w');			drawline(120,120,120,200,'w');			drawline(200,120,200,200,'w');			}break;		case '7':{			drawline(120,40,200,40,'w');			drawline(200,40,200,120,'w');			drawline(200,120,200,200,'w');			}break;		case '8':{			drawline(120,40,200,40,'w');			drawline(120,120,200,120,'w');			drawline(120,200,200,200,'w');			drawline(120,40,120,120,'w');			drawline(120,120,120,200,'w');			drawline(200,40,200,120,'w');			drawline(200,120,200,200,'w');			}break;		case '9':{			drawline(120,40,200,40,'w');			drawline(120,120,200,120,'w');			drawline(120,200,200,200,'w');			drawline(120,40,120,120,'w');			drawline(200,40,200,120,'w');			drawline(200,120,200,200,'w');			}break;	}	return 0;}int gif(void){	int i,j;	//for(i=9;i>=0;i--)	num('9');	sleep(1);	background('r');	num('8');	sleep(1);	background('r');	num('7');	sleep(1);	background('r');	num('6');	sleep(1);	background('r');	num('5');	sleep(1);	background('r');	num('4');	sleep(1);	background('r');	num('3');	sleep(1);	background('r');	num('2');	sleep(1);	background('r');	num('1');	sleep(1);	background('r');	num('0');	sleep(1);	background('r');	for(j=10;j<=120;j+=10)	{circle(160,120,j,'w');sleep(1);}		for(i=10;i<=120;i+=10)	fullcircle(160,120,i,'b');	drawline(100,100,140,100,'w');	drawline(180,100,220,100,'w');	drawline(120,140,120,160,'w');	drawline(120,160,200,160,'w');	drawline(200,140,200,160,'w');	drawdot(160,120,'w');}int rainbrush(void){	int i,j;	for(i=0;i<=132;i+=8)	drawline(292-i,3*(292-i)/4,292-i+4,3*(292-i+4)/4,'b');	/*drawline(292-i+20,3*(292-i)/4+20,292-i+4+20,3*(292-i+4)/4+20,'w');	drawline(292-i,2*(292-i)/4,292-i+4,2*(292-i+4)/4,'w');	drawline(292-i,3*(292-i)/5,292-i+4,3*(292-i+4)/5,'w');	drawline(292-i,3*(292-i)/8,292-i+4,3*(292-i+4)/8,'w');	}*/	for(j=0;j<=50;j+=10)	{ellipse(160,120,2*j,1*j,'b');sleep(1);}	brush();}int brush(void){	int i;	float n;	float pi=3.1415926;		for(i=0;i<=720;i++)	{	n=2*pi/720*i;	drawline(160+160*cos(n),240-160*sin(n),160,240,'r');	}}

⌨️ 快捷键说明

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