📄 test_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 + -