📄 -
字号:
** 函数说明 :可以有半屏显示和全屏显示两种模式,可以自行修改
** 画图方式为从左到右扫描,从上到下,每写一个字节后行地址加一,每写玩16个字节,即128个点(如果半屏显示8个字节,64个点)列地址加一
** 点阵取点方式为从左到右,从上到下,高位在前,低为在后
** 入口参数 :绘画的图片的首地址
** 出口参数 :无
*********************************************************************************************************/
void PHO_Display(const unsigned char *s)
{
uchar COUNT3 = 0X02,COUNT1,COUNT2,LCD_X = 0X80,LCD_Y;
for (;COUNT3 != 0;COUNT3 --)
{
LCD_Y = 0X80; //上半屏
COUNT2 = 0X20;//32
for(;COUNT2 != 0;COUNT2 --)
{
// COUNT1 = 0X10;//8个16*16点阵单元 显示全屏
COUNT1 = 0X08;//4个16*16点阵单元 显示半屏 华师logo
Write_12864_Com(0x34);
Write_12864_Com(LCD_Y);
Write_12864_Com(LCD_X);
Write_12864_Com(0x30);
for (;COUNT1 != 0;COUNT1 --)
{
Write_12864_Data(*s ++);
}
LCD_Y += 1;
}
LCD_X = 0X88; //下半屏
}
Write_12864_Com(0x36);
Write_12864_Com(0x30);
}
/*另外一种打点画图程序*/
void img_displeft(const unsigned char *img) // 注意0---31,0---31上下分半
{
unsigned char i,j,m,n;
for(j = 0;j < 32;j ++)
{
for(i = 0;i < 4;i ++)
{
Write_12864_Com(0x34); //扩展指令,显示绘图
Write_12864_Com(0x80 + j); //更新坐标
Write_12864_Com(0x80 + i);
Write_12864_Com(0x30); //基本指令集
Write_12864_Data(img[j * 8 + i *2 ]); //高字节
Write_12864_Data(img[j * 8 + i * 2 + 1]); //低字节
}
}
for(n = 0;n < 32;n ++)
{
for(m = 0;m < 4;m ++)
{
Write_12864_Com(0x34); //扩展指令,显示绘图
Write_12864_Com(0x80 + n); //更新坐标
Write_12864_Com(0x88 + m);
Write_12864_Com(0x30); //基本指令集
Write_12864_Data(img[n * 8 + 256 + m * 2]); //高字节
Write_12864_Data(img[n * 8 + 256 + m * 2 + 1]); //低字节
}
}
Write_12864_Com(0x36); //扩充功能指令,开绘图开关。
}
/*********************************************************************************************************
** 函数功能 :整屏显示竖条
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void LcdFill_Vertical()
{
uchar x,y,i;
for(i=0;i<9;i=i+8)
for(y=0;y<0x20;y++)
{
for(x=0;x<8;x++)
{
Write_12864_Com(0x36); //扩充指令 绘图显示
Write_12864_Com(y+0x80); //行地址
Write_12864_Com(x+0x80+i); //列地址
Write_12864_Data(0x55); //写数据 D15-D8
Write_12864_Data(0x55); //写数据 D7-D0
Write_12864_Com(0x30);
}
}
}
/*********************************************************************************************************
** 函数功能 :整屏显示横条
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void LcdFill_Level()
{
uchar x,y,i;
uchar k;
for(i=0;i<9;i+=8)
for(y=0;y<0x20;y++)
{
if((y%2)==1) k=0xff;
else k=0;
for(x=0;x<8;x++)
{
Write_12864_Com(0x36); //扩充指令 绘图显示
Write_12864_Com(y+0x80); //行地址
Write_12864_Com(x+0x80+i); //列地址
Write_12864_Data(k);
Write_12864_Data(k);
Write_12864_Com(0x30);
}
}
}
/*********************************************************************************************************
** 函数功能 :整屏充满亮点或暗点
** 函数说明 :当i=0时显示上面128×32,当i=8时显示下面128×32
** 当i=0时显示上面128×32,当i=8时显示下面128×32
** 入口参数 :state: 0x00 正屏显示亮点
** state: 0xFF 正屏显示暗点
** 出口参数 :无
*********************************************************************************************************/
void Lcd_Fill(uchar state)
{
uchar x,y,i;
for(i=0;i<9;i=i+8)
for(y=0;y<0x20;y++)
{
for(x=0;x<8;x++)
{
Write_12864_Com(0x36); //扩充指令 绘图显示
Write_12864_Com(y+0x80); //行地址
Write_12864_Com(x+0x80+i); //列地址
Write_12864_Data(state); //写数据 D15-D8
Write_12864_Data(state); //写数据 D7-D0
Write_12864_Com(0x30);
}
}
}
/*********************************************************************************************************
** 函数功能 :清除12864内部的CGRAM
** 函数说明 :当屏幕之前通过CGRAM绘图,可以调用此函数来清除CGRAM中的内容
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void Clear_12864(void)
{
uchar COUNT3 = 0X02,COUNT1,COUNT2,LCD_X = 0X80,LCD_Y;
for (;COUNT3 != 0;COUNT3 --)
{
LCD_Y = 0X80;
COUNT2 = 0X20;//32
for(;COUNT2 != 0;COUNT2 --)
{
COUNT1 = 0X10;//16
Write_12864_Com(0x34);
Write_12864_Com(LCD_Y);
Write_12864_Com(LCD_X);
Write_12864_Com(0x30);
for (;COUNT1 != 0;COUNT1 --)
{
Write_12864_Data(0x00);
}
LCD_Y += 1;
}
LCD_X = 0X88;
}
Write_12864_Com(0x36);
Write_12864_Com(0x30);
}
/*********************************************************************************************************
** 函数功能 :在屏幕上打上一个点,屏幕像素是128*64
** 函数说明 :打点范围不要超过坐标范围,这个函数用来为后面的画直线和其他函数服务
** 入口参数 :待写入的整数
** 出口参数 :无
*********************************************************************************************************/
void Set_12864_Point(uchar x,uchar y)
{
uchar x_byte,x_bit,y_byte,y_bit;
uchar date1,date2;//存储读回的数据
x &= 0x7F;//限制在液晶屏幕的范围内
y &= 0x3F;
x_byte = x / 16;//算出在那个字节
x_bit = x & 0x0f; //算出是哪一位
y_byte = y / 32;
y_bit = y & 0x3f;
Write_12864_Com(extern_commod);
Write_12864_Com(0x80 + y_bit);
Write_12864_Com(0x80 + x_byte + 8 * y_byte);
Read_12864_Data();//先空读一次?不知道为什么
date1=Read_12864_Data();
date2=Read_12864_Data();
Write_12864_Com(extern_commod);
Write_12864_Com(0x80 + y_bit);
Write_12864_Com(0x80 + x_byte + 8 * y_byte);
if(x_bit < 8)
{
Write_12864_Data(date1 | (0x01 << (7-x_bit) ) );
Write_12864_Data(date2);
}
else
{
Write_12864_Data(date1);
Write_12864_Data(date2 | (0x01 << (15-x_bit) ) );
}
Write_12864_Com(draw_on);
Write_12864_Com(basic_commod);
}
/*********************************************************************************************************
** 函数名称 :void LCD_12864_DrawLine(uint x1, uint y1, uint x2, uint y2)
** 函数功能 :在12864屏幕上画一条直线
** 函数说明 :因分辨率较低,斜线并不完美
** 入口参数 :x1:起点横坐标
y1:起点纵坐标
x2:终点横坐标
y2:终点纵坐标
** 出口参数 :当前的键盘值
*********************************************************************************************************/
void LCD_12864_DrawLine(uint x1, uint y1, uint x2, uint y2)
{
uint t;
int xerr = 0,yerr = 0,delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
delta_x = x2-x1; //计算坐标增量
delta_y = y2-y1;
uRow = x1;
uCol = y1;
if(delta_x > 0)incx = 1; //设置单步方向
else if(delta_x == 0)incx = 0;//垂直线
else {incx = -1;delta_x = - delta_x;}
if(delta_y > 0)incy = 1;
else if(delta_y == 0)incy = 0;//水平线
else{incy = -1;delta_y = -delta_y;}
if( delta_x > delta_y)distance = delta_x; //选取基本增量坐标轴
else distance = delta_y;
for(t = 0;t <= distance + 1;t ++ )//画线输出
{
Set_12864_Point(uRow,uCol);//画点
xerr += delta_x ;
yerr += delta_y ;
if(xerr > distance)
{
xerr -= distance;
uRow += incx;
}
if(yerr > distance)
{
yerr -= distance;
uCol += incy;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -