📄 lcd.c
字号:
#include <fcntl.h>
#include <asm/page.h>
#include <sys/mman.h>
#include "test-lcd.h"
const UCHAR g_ucAscii8x16[]= /* ascii table */
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xce,0xde,0xf6,0xe6,0xc6,
0xc6,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x78,0x18,
0x18,0x18,0x18,0x18,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,
0xc6,0x06,0x0c,0x18,0x30,0x60,0xc6,0xfe,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7c,0xc6,0x06,0x06,0x3c,0x06,0x06,0xc6,0x7c,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,
0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xc0,0xc0,0xc0,0xfc,
0x06,0x06,0xc6,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x60,
0xc0,0xc0,0xfc,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xfe,0xc6,0x06,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7c,0xc6,0xc6,0xc6,0x7c,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7e,0x06,
0x06,0x0c,0x78,0x00,0x00,0x00,0x00
};
int fb_open(PFBDEV pFbdev)
{
pFbdev->fb = open(pFbdev->dev, O_RDWR);
if(pFbdev->fb < 0)
{
printf("Error opening %s: %m. Check kernel config\n", pFbdev->dev);
return FALSE;
}
if (-1 == ioctl(pFbdev->fb,FBIOGET_VSCREENINFO,&(pFbdev->fb_var)))
{
printf("ioctl FBIOGET_VSCREENINFO\n");
return FALSE;
}
if (-1 == ioctl(pFbdev->fb,FBIOGET_FSCREENINFO,&(pFbdev->fb_fix)))
{
printf("ioctl FBIOGET_FSCREENINFO\n");
return FALSE;
}
//map physics address to virtual address
pFbdev->fb_mem_offset = (UINT32T)(pFbdev->fb_fix.smem_start) & (~PAGE_MASK);
pFbdev->fb_mem = (UINT32T *)mmap(0, pFbdev->fb_fix.smem_len + pFbdev->fb_mem_offset,
PROT_READ | PROT_WRITE, MAP_SHARED, pFbdev->fb, 0);
//fbp=pFbdev->fb_mem+pFbdev->fb_mem_offset;//????
if(-1L ==(long)pFbdev->fb_mem)
{
printf("mmap error! mem:%d offset:%d\n", pFbdev->fb_mem, pFbdev->fb_mem_offset);
return FALSE;
}
return TRUE;
}
//close frame buffer
int fb_close(PFBDEV pFbdev)
{
close(pFbdev->fb);
pFbdev->fb=-1;
}
//get display depth
int get_display_depth(PFBDEV pFbdev)
{
if(pFbdev->fb<=0)
{
printf("fb device not open, open it first\n");
return FALSE;
}
return pFbdev->fb_var.bits_per_pixel;
}
void Lcd_DspAscII8X16(USHORT x0, USHORT y0, UCHAR ForeColor, UCHAR * s,FBDEV fbdev)
{
INT16T i,j,k,x,y,xx;
UCHAR qm;
INT32T ulOffset;
INT8T ywbuf[16],temp[2];
for(i = 0; i < strlen((const char*)s); i++)
{
if((UINT8T)*(s+i) >= 161)
{
temp[0] = *(s + i);
temp[1] = '\0';
return;
}
else
{
qm = *(s+i);
ulOffset = (INT32T)(qm+1) * 16;
if(ulOffset==752)
ulOffset=0;
else
ulOffset-=768;
for (j = 0; j < 16; j ++)
{
ywbuf[j] = g_ucAscii8x16[ulOffset + j];
}
for(y = 0; y < 16; y++)
{
for(x = 0; x < 8; x++)
{
k = x % 8;
if (ywbuf[y] & (0x80 >> k))
{
xx = x0 + x + i*8;
//PutPixel( xx, y + y0, (UINT8T)ForeColor);
fb_memset((void *)fbdev.fb_mem + fbdev.fb_mem_offset+(y0+y)*320+xx,ForeColor, 1);
}
}
}
}
}
}
void PutPixel(USHORT x0, USHORT y0, UCHAR ForeColor,FBDEV fbdev)
{
memset((void *)fbdev.fb_mem + fbdev.fb_mem_offset+y0*SCR_XSIZE_CSTN+x0, ForeColor, 1);
}
void displaySpace(USHORT x0, USHORT y0,FBDEV fbdev,UCHAR Color)
{
int i,j;
for(i=0;i<16;i++)
{
for(j=0;j<8;j++)
{
PutPixel(x0+j,y0+i,Color,fbdev);
}
}
}
//full screen clear
void fb_memset (void *addr, int c, size_t len)
{
memset(addr, c, len);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -