📄 pg160128.c
字号:
//-----------------------------------------------------------------
INT8U LCD_Write_Data(INT8U dat)
{
if(Status_BIT_3() == 0) return 1;
Write_Data(dat);
return 0; //成功时返回0
}
//-----------------------------------------------------------------
// 读数据
//-----------------------------------------------------------------
INT8U LCD_Read_Data()
{
if(Status_BIT_01() == 0) return 1;
return Read_LCD_Data();
}
//-----------------------------------------------------------------
// 设置当前地址
//-----------------------------------------------------------------
void Set_LCD_POS(INT8U row, INT8U col)
{
INT16U Pos;
Pos = row * LCD_WIDTH + col;
LCD_Write_Command_P2(LC_ADD_POS,Pos % 256, Pos / 256);
gCurRow = row;
gCurCol = col;
}
//-----------------------------------------------------------------
// 清屏
//-----------------------------------------------------------------
void Clear_Screen()
{
INT16U i;
LCD_Write_Command_P2(LC_ADD_POS,0x00,0x00); //置地址指针
LCD_Write_Command(LC_AUT_WR); //自动写
for(i = 0;i < 0x2000; i++)
{
Status_BIT_3();
LCD_Write_Data(0x00); //写数据
}
LCD_Write_Command(LC_AUT_OVR); //自动写结束
LCD_Write_Command_P2(LC_ADD_POS,0x00,0x00); //重置地址指针
gCurRow = 0;
gCurCol = 0;
}
//-----------------------------------------------------------------
// LCD初始化
//-----------------------------------------------------------------
char LCD_Initialise()
{
LCD_Write_Command_P2(LC_TXT_STP,0x00,0x00); //文本显示区首地址
LCD_Write_Command_P2(LC_TXT_WID,LCD_WIDTH,0x00); //文本显示区宽度
LCD_Write_Command_P2(LC_GRH_STP,0x00,0x00); //图形显示区首地址
LCD_Write_Command_P2(LC_GRH_WID,LCD_WIDTH,0x00); //图形显示区宽度
LCD_Write_Command(LC_CUR_SHP | 0x01); //光标形状
LCD_Write_Command(LC_MOD_OR); //显示方式设置
LCD_Write_Command(LC_DIS_SW | 0x08);
return 0;
}
//-----------------------------------------------------------------
// ASCII及汉字显示(rev表示是否反白)
//-----------------------------------------------------------------
void Disp_Str_at_xy(INT8U x,INT8U y,char buf[],INT8U len, INT8U rev)
{
char c1,c2,cData;
INT8U i = 0,j,k,uLen = strlen(buf);
while(i < len && i < uLen)
{
c1 = buf[i]; c2 = buf[i+1];
Set_LCD_POS(y, x / 8);
//ASCII字符显示
if((c1 & 0x80) == 0x00)
{
if(c1 < 0x20)
{
switch(c1)
{
case 0x0D:
case 0x0A: i++; x = 0; //回车或换行
if(y < 112) y += HZ_CHR_HEIGHT;
continue;
case 0x08: i++; //退格
if(y > ASC_CHR_WIDTH) y -= ASC_CHR_WIDTH;
cData = 0x00;
break;
}
}
//从Flash程序ROM中读取字符点阵并显示
for(j = 0; j < ASC_CHR_HEIGHT; j++)
{
if(c1 >= 0x1F)
{
cData = ASC_MSK[(c1 - 0x1F) * ASC_CHR_HEIGHT + j];
if (rev) cData = ~cData;
Set_LCD_POS( y + j , x / 8);
if( (x % 8) == 0)
{
LCD_Write_Command(LC_AUT_WR);
LCD_Write_Data(cData);
LCD_Write_Command(LC_AUT_OVR);
}
else OutToLCD(cData, x, y + j);
}
Set_LCD_POS(y + j, x / 8);
}
x += ASC_CHR_WIDTH;
}
//中文字符显示
else
{
//在字库中查找汉字
for(j = 0;j < sizeof(GB_16)/sizeof(GB_16[0]);j++)
{
if(c1 == GB_16[j].inner_CODE[0] && c2 == GB_16[j].inner_CODE[1])
break;
}
//从中文点阵库中读取点阵并显示
for(k = 0;k < HZ_CHR_HEIGHT; k++)
{
Set_LCD_POS(y + k, x / 8);
if(j < sizeof(GB_16)/sizeof(GB_16[0]))
{
c1 = GB_16[j].Msk[k*2];
c2 = GB_16[j].Msk[k*2+1];
}
else c1 = c2 = 0;
if((x % 8) == 0)
{
LCD_Write_Command(LC_AUT_WR);
if (rev) c1 = ~c1;
LCD_Write_Data(c1);
LCD_Write_Command(LC_AUT_OVR);
}
else
{
if (rev) c1 = ~c1;
OutToLCD(c1, x, y + k);
}
if(((x + 2 + HZ_CHR_WIDTH / 2) % 8) == 0)
{
LCD_Write_Command(LC_AUT_WR);
if (rev) c2 = ~c2;
LCD_Write_Data(c2);
LCD_Write_Command(LC_AUT_OVR);
}
else
{
if (rev) c2 = ~c2;
OutToLCD(c2,x + 2 + HZ_CHR_WIDTH / 2,y + k);
}
}
x += HZ_CHR_WIDTH; i++;
}
i++;
}
}
//-----------------------------------------------------------------
// 输出起点x不是8的倍数时,原字节分成两部分输出到LCD
//-----------------------------------------------------------------
void OutToLCD(INT8U Dat,INT8U x,INT8U y)
{
}
//-----------------------------------------------------------------
// 绘点函数
// 参数:点的坐标,模式1/0分别为显示与清除点
//-----------------------------------------------------------------
void Pixel(INT8U x,INT8U y, INT8U Mode)
{
}
//-----------------------------------------------------------------
// 两数交换
//-----------------------------------------------------------------
void Exchange(INT8U *a, INT8U *b)
{
}
//-----------------------------------------------------------------
// 绘制直线函数
// 参数:起点与终点坐标,模式为显示(1)或清除(0),点阵不超过255*255)
//-----------------------------------------------------------------
void Line(INT8U x1,INT8U y1, INT8U x2,INT8U y2, INT8U Mode)
{
INT8U x,y; //绘点坐标
float k,b; //直线斜率与偏移
if( fabs(y1 - y2) <= fabs( x1 - x2) )
{
}
else
{
}
}
//-----------------------------------------------------------------
// 绘制图像(图像数据来自于Flash程序ROM空间)
//-----------------------------------------------------------------
void Draw_Image(INT8U *G_Buffer, INT8U Start_Row, INT8U Start_Col)
{
INT16U i,j,W,H;
//图像行数控制(G_Buffer的前两个字节分别为图像宽度与高度)
W = G_Buffer[1];
for(i = 0;i < W;i++)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -