📄 dc.c
字号:
/******************************************************************************
******************************************************************************/
#include "..\main\include.h"
#include "Ascii.h"
#include "hzk16.h"
#include "hzk24.h"
//#include "include.h"
/*
D0D0D0D0D0D0D0D0 D7D6D5D4D3D2D1D0
D1D1D1D1D1D1D1D1 D7D6D5D4D3D2D1D0
D2D2D2D2D2D2D2D2 D7D6D5D4D3D2D1D0
D3D3D3D3D3D3D3D3 <---> D7D6D5D4D3D2D1D0
D4D4D4D4D4D4D4D4 D7D6D5D4D3D2D1D0
D5D5D5D5D5D5D5D5 D7D6D5D4D3D2D1D0
D6D6D6D6D6D6D6D6 D7D6D5D4D3D2D1D0
D7D7D7D7D7D7D7D7 D7D6D5D4D3D2D1D0
*/
//将8*8 Y方向阵列做 X方向转换
void YtoX8x8(uint8 *object, uint8 *source)
{
uint8 x, y;
uint8 temp;
memset(object, 0, 8);
for (x = 0; x < 8; x++)
{
temp=source[x];
for (y = 0; y < 8; y++)
{
if(isBit8(temp, y))
SetBit8(object[y], 7-x);
}
}
}
//将8*16 Y方向阵列做 X方向转换(用于8*16 ASCII)
void YtoX8x16(uint8 * p)
{uint8 temp[16];
memcpy(temp, p, 16);
YtoX8x8(p, temp);
YtoX8x8(p+8, temp+8);
}
//将16*16 Y方向阵列做 X方向转换(主要用于16*16 汉字)
/*
16*16 Y方向阵列做 X方向转换,数组编号做如下变化
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 8
1 9
2 10
3 11
4 12
5 13
6 14
7 15
------------------------
16 24
17 25
18 26
19 27
20 28
21 29
22 30
23 31
*/
void YtoX16x16(uint8 * p)
{uint8 temp[32];
uint8 i;
YtoX8x8(temp, p);
YtoX8x8(temp+8, p+8);
YtoX8x8(temp+16, p+16);
YtoX8x8(temp+24, p+24);
for(i=0; i<8; i++)//重新排列为8X8矩阵
{
p[i*2]=temp[i];
p[i*2+1]=temp[8+i];
p[16+i*2]=temp[16+i];
p[16+i*2+1]=temp[24+i];
}
}
//将24*24 Y方向阵列做 X方向转换(主要用于24*24 汉字)
/*
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
-----------------------------------------------------------------------
0 8 16
1 9 17
2 10 18
3 11 19
4 12 20
5 13 21
6 14 22
7 15 23
---------------------------------------
24 32 40
25 33 41
26 34 42
27 35 43
28 36 44
29 37 45
30 38 46
31 39 47
---------------------------------------
48 56 64
49 57 65
50 58 66
50 59 67
52 60 68
53 61 69
54 62 70
55 63 71
---------------------------------------
*/
void YtoX24x24(uint8 * p)
{uint8 temp[72];
uint8 i;
YtoX8x8(temp, p);
YtoX8x8(temp+8, p+8);
YtoX8x8(temp+16, p+16);
YtoX8x8(temp+24, p+24);
YtoX8x8(temp+32, p+32);
YtoX8x8(temp+40, p+40);
YtoX8x8(temp+48, p+48);
YtoX8x8(temp+56, p+56);
YtoX8x8(temp+64, p+64);
for(i=0; i<8; i++)//重新排列为8X8矩阵
{
p[i*3]=temp[i];
p[i*3+1]=temp[8+i];
p[i*3+2]=temp[16+i];
p[24+i*3]=temp[24+i];
p[24+i*3+1]=temp[32+i];
p[24+i*3+2]=temp[40+i];
p[48+i*3]=temp[48+i];
p[48+i*3+1]=temp[56+i];
p[48+i*3+2]=temp[64+i];
}
}
/****************************************************************
函数名:LCD写1个8*16 ASCII字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/8个ASCII字符,竖向能显示20行
返回值:无
*****************************************************************/
void LCDWriteEN(u16 x, u16 y, u16 CharColor, u8 ASCIICode)
{
u8* pbuf;
u8 buf[16];
u16 ix, iy;
//GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
GetASCIICode(buf, ASCIICode, 16);//取这个字符的显示代码
//YtoX8x16(buf);//只有字库方向是纵向字节倒序才需要
pbuf = buf;
for(iy=0; iy<16; iy++)//写16行
{
for(ix=0; ix<8; ix++)//写1行中的8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
y++;
}
}
/****************************************************************
函数名:LCD写1个16*24 ASCII字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/16个ASCII字符,竖向能显示20行
返回值:无
*****************************************************************/
void LCDWriteEN24(u16 x, u16 y, u16 CharColor, u8 ASCIICode)
{
u8* pbuf;
u8 buf[48];
u16 ix, iy;
//GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
GetASCIICode(buf, ASCIICode, 24);//取这个字符的显示代码
pbuf = buf;
for(iy=0; iy<24; iy++)//写24行
{
for(ix=0; ix<8; ix++)//写1行中的8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//写1行中的右8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+8, y, CharColor);
}
}
pbuf++;
y++;
}
}
/****************************************************************
函数名:LCD写1个16*16 汉字字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示30个ASCII字符,竖向能显示20行
返回值:无
*****************************************************************/
void LCDWriteCN(u16 x, u16 y, u16 CharColor, u8 *p)
{
u8* pbuf;
u8 buf[32];
u16 ix, iy;
GetChineseCode(buf, p);//取这个字符的显示代码
//YtoX16x16(buf);//只有字库方向是纵向字节倒序才需要
pbuf = buf;
for(iy=0; iy<16; iy++)//写16行
{
for(ix=0; ix<8; ix++)//写1行中的左8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//写1行中的右8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+8, y, CharColor);
}
}
pbuf++;
y++;
}
}
/****************************************************************
函数名:LCD写1个16*16 汉字字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/16个ASCII字符,竖向能显示20行
返回值:无
*****************************************************************/
void LCDWriteCN24(u16 x, u16 y, u16 CharColor, u8 *p)
{
u8* pbuf;
u8 buf[72];
u16 ix, iy;
GetChineseCode24(buf, p);//取这个字符的显示代码
//YtoX24x24(buf);//只有字库方向是纵向字节倒序才需要
pbuf = buf;
for(iy=0; iy<24; iy++)//写24行
{
for(ix=0; ix<8; ix++)//写1行中的左8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//写1行中的中8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+8, y, CharColor);
}
}
pbuf++;
for(ix=0; ix<8; ix++)//写1行中的右8列
{
if( isBit8(*pbuf, 7-ix)==0 )
{
;
}
else
{
DrawPixel(x+ix+16, y, CharColor);
}
}
pbuf++;
y++;
}
}
/************************************************************
函数名:LCD写字符串函数8*16ASCII,16*16汉字
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~240-1
y,纵向坐标,由上到下分别为0~320-1
CharColaor,字符的颜色
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -