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

📄 test_ppi.c

📁 驱动ppi
💻 C
字号:
#include "Hardware.h"
#include "init.h"
#include <stdio.h>
#include <cdefBf531.h>
#include <ccblkfn.h>


#define RESET_LCD		*(volatile unsigned short *)0x202000a0

void memcrp(void)
{
int i;
RGB *addr=Display.pScreen;
	for(i=0;i<80;i++)
	addr[0x4b00+i]=addr[i];
}

static void SetPixel(unsigned short x, unsigned short y, RGB color)
{
RGB *addr;
    addr=Display.pScreen+80*y+(x>>2);
    *addr|= (color<<((3-(x % 4))));
}

void Line(int x0, int y0, int x1, int y1, RGB color, int style)
{
int i;
int x, y, dx, dy, e;

	dx=x1-x0;
	dy=y1-y0;
	x=x0; y=y0;
	if (abs(dx)>=abs(dy))
	{
		e=-dx;
		for (i=0; i<dx; i++)
		{
			if ((x-x0)%style==0)
				SetPixel(x, y, color);
			x++;
			e=e+2*abs(dy);
			if (e>=0)
			{
				if (dy<0) 
					y--;
				else
					y++;
				e=e-2*dx;
			}
	
		}
	}
	else
	{
		e=-dy; 
		for (i=0; i<dy; i++)
		{
			if ((y-y0)%style==0)
				SetPixel(x, y, color);
			y++;
			e=e+2*abs(dx);
			if (e>=0)
			{
				if (dx<0)
					x--;
				else
					x++;
				e=e-2*dy;
			}
	
		}
	}

} 

void FillRect(short x0, short y0, short x1, short y1, RGB color)
{
unsigned short m,n;
unsigned char p;
RGB *addr;
	addr=Display.pScreen+y0*X_RESOLUTION+(x0/4);
	for (m=0; m<y1-y0; m++)
	{
		n=0;
		if(x1/4==x0/4)//起始和终点的两个点在同一个地址段
		{
			p=x1%4<<4|x0%4;
			switch(p)
			{
				//case 0: addr[n]=color?0x0f:0x00;n++;break;
				case 0x10: addr[n]=color?(0x0c|addr[n]):(0x03&addr[n]);n++;break;
				case 0x20: addr[n]=color?(0x0e|addr[n]):(0x01&addr[n]);n++;break;
				case 0x30: addr[n]=color?0x0f:0x00;n++;break;
				case 0x21: addr[n]=color?(0x06|addr[n]):(0x09&addr[n]);n++;break;
				case 0x31: addr[n]=color?(0x07|addr[n]):(0x08&addr[n]);n++;break;
				case 0x32: addr[n]=color?(0x03|addr[n]):(0x0c&addr[n]);n++;break;
				default: ;
			}
		}
		else//起始和终点的两个点在不同地址段
		{
			switch(x0%4)
			{
				//case 0: addr[n]=color?0x0f:0x00;n++;break;
				case 1: addr[n]=color?0x07|addr[n]:0x08&addr[n];n++;break;//addr[n]=(color<<2)|(color<<1)|color|addr[n];
				case 2: addr[n]=color?0x03|addr[n]:0x0c&addr[n];n++;break;//addr[n]=(color<<1)|color|addr[n];
				case 3: addr[n]=color|addr[n];n++;break;
				default: ;
			}
			for(;n<x1/4-x0/4;n++)
			addr[n]=color?0x0f:0x00;//addr[n]=color|(color<<1)|(color<<2)|(color<<3);
			switch (x1%4)
			{

				case 1: addr[n]=color?0x08|addr[n]:0x07&addr[n];n++;break;//addr[n]=color<<3|addr[n];
				case 2: addr[n]=color?0x0c|addr[n]:0x03&addr[n];n++;break;//addr[n]=(color<<3)|(color<<2)|addr[n];
				case 3: addr[n]=color?0x0e|addr[n]:0x01&addr[n];n++;break;//addr[n]=(color<<3)|(color<<2)|(color<<1)|addr[n];
				default: ;
				  	
			}
		}
		addr+=X_RESOLUTION;
	}
}
			
#pragma noreturn
void main(void)
{

	//硬件部件初始化
	InitSDRAM();
    InitInterrupt();
    RESET_LCD=1;
    ssync();
    RESET_LCD=0;    
    
   	//绘制启动界面
    RESET_LCD=1;
    ssync();

   	//显示启动界面
   	

  //  FillRect(4, 0, 6, 4, WHITE_COLOR);

    /*	FillRect(2, 30, 150, 50, WHITE_COLOR);
	FillRect(3, 60, 200, 100, WHITE_COLOR);
	FillRect(4, 110, 250, 140, WHITE_COLOR);
	setpixel(0,0,WHITE_COLOR);*/

	Line(0,239,320,239,WHITE_COLOR,1);
	//Line(8,0,8,100,WHITE_COLOR);

	//Line(0,0,319,0,WHITE_COLOR,1);
/*	Line(0,239,320,239,WHITE_COLOR,1);
	Line(4,0,6,0,WHITE_COLOR,1);
	//Line(0,0,0,239,WHITE_COLOR,1);
	Line(170,4,170,240,WHITE_COLOR,1);
	Line(120,0,120,240,WHITE_COLOR,1);
	Line(310,230,310,230,WHITE_COLOR,1);
	Line(300,2,300,239,WHITE_COLOR,1);
	Line(310,3,310,240,WHITE_COLOR,1);
	//FillRect(1, 0,  3, 2,  WHITE_COLOR,1);
	FillRect(1, 3, 2, 5, WHITE_COLOR,1);*/
	//test();
	memcrp();
   	InitDPT();

 
  	while (1)
    {   	
    	//memcrp();
    	UpdateLCD();

    }

}

⌨️ 快捷键说明

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