标题:
lcd12864驱动程序带字库版本ST7920,内含简单的画点、线、圆、矩形和三角形函数
[打印本页]
作者:
湛蜀湘
时间:
2018-8-18 20:06
标题:
lcd12864驱动程序带字库版本ST7920,内含简单的画点、线、圆、矩形和三角形函数
LCD12864驱动程序 带字库版本ST7920,内含简单的画点、线、圆、矩形和三角形函数以及任意尺寸图像显示。
单片机源程序如下:
#include <reg51.h>
#include "lcd12864.h"
unsigned char code Photo2[];
void main()
{
LCD12864_Init();
LCD12864_WriteCmd(0x30);
LCD12864_Display(0,3,"爱你 ");
LCD12864_Drawing(56,0,Photo2); //在任意位置显示任意比例图片
LCD12864_DrawLine_X(0,0,128,1); //水平线
LCD12864_DrawLine_Y(0,0,64,1); //竖线
LCD12864_DrawLine(0,0,50,50,1); //任意斜线
LCD12864_DrawCircle(25,25,20,1); //圆
LCD12864_DrawRetic(13,13,30,30,1); //矩形
while(1)
{
}
}
unsigned char code Photo2[] ={
/*-- 调入了一幅图像:C:\Users\zhans\Pictures\Saved Pictures\我.bmp --*/
/*-- 宽度x高度=71x64 --*/
/*-- 宽度不是8的倍数,现调整为:宽度x高度=72x64 --*/
72,64,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3F,0x00,
0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x5F,0x8F,0xC0,0x00,0x00,0x01,0x00,0x00,0x00,
0x7F,0xDF,0xF0,0x00,0x00,0x01,0x00,0x00,0x00,0x7F,0xFF,0xFC,0x00,0x00,0x01,0x00,
0x00,0x03,0xFF,0xFF,0xFE,0x00,0x00,0x01,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x00,
0x01,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0x00,0x00,0x01,0x00,0x00,0x3F,0xFF,0xFF,0xFF,
0x80,0x00,0x01,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xE0,0x00,0x01,0x00,0x00,0x7F,0xFF,
0xFF,0xFF,0xE0,0x00,0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x01,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x01,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x03,
0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x03,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xF8,
0x00,0x03,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x13,0x00,0x01,0xFF,0xFF,0xFF,
0xFF,0xF8,0x00,0x03,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x01,0x00,0x01,0xFF,
0xFF,0xFF,0xFF,0xF8,0x00,0x01,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x01,0x00,
0x01,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x01,0x00,0x00,0x7F,0xFF,0xFF,0xFF,
0xE0,0x00,0x01,0x00,0x00,0x3F,0xF9,0xDF,0xFF,0xE0,0x00,0x01,0x00,0x00,0x3F,0xFC,
0x0F,0xFF,0xC0,0x00,0x01,0x00,0x00,0x1F,0x8C,0x03,0xEE,0x80,0x00,0x01,0x00,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0xF8,0x00,0xA0,0x00,0x00,0x01,
0x00,0x00,0x01,0x34,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
//--------------------------------------------------------//
//功能 :LCD12864驱动程序(带字库)
//
//--------------------[ZSX];QQ:1543588107-----------------//
//--------------------------------------------------------//
#include "lcd12864.h"
//#include <math.h>
/*******************************************************************************
* 函 数 名 : LCD12864_Init
* 函数功能 : 初始化LCD12864
* 输 入 : 无
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_Init()
{
LCD12864_RST = 1;
LCD12864_RST = 0; //复位
LCD12864_RST = 1;
// LCD12864_WriteCmd(0x20); //4位数据 选择基本指令操作 关绘图
LCD12864_WriteCmd(0x30); //8位数据 选择基本指令操作 关绘图
LCD12864_WriteCmd(0x0c); //显示开 关光标 不允许游标位置反白
// LCD12864_WriteCmd(0x0e); //显示开 开光标 不允许游标位置反白
// LCD12864_WriteCmd(0x0d); //显示开 关光标 允许游标位置反白
// LCD12864_WriteCmd(0x0f); //显示开 开光标 允许游标位置反白
// LCD12864_WriteCmd(0x04); //读取与写入时游标向左移 地址自减1 显示画面整体不位移
LCD12864_WriteCmd(0x06); //读取与写入时游标向右移 地址自加1 显示画面整体不位移
// LCD12864_WriteCmd(0x10); //游标向左移动
// LCD12864_WriteCmd(0x14); //游标向右移动
LCD12864_GDRAMInit();
LCD12864_WriteCmd(0x01); //清屏且地址归位
}
/*******************************************************************************
* 函 数 名 : LCD12864_Display
* 函数功能 : 在基本指令模式下设置显示坐标。注意:y是设置行,x是设置列
* 输 入 : x[in]列0~8 , y[in]行0~3 , Dat[in] 显示数据
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_Display(unsigned char x, unsigned char y, unsigned char *Dat) //x[in]行0~3, y[in]列0~8, Dat[in] 显示数据
{
unsigned char Addr;
switch(y)
{
case 0: y = 0x80;break; //第一行的首地址是80H
case 1: y = 0x90;break; //第二行的首地址是90H
case 2: y = 0x88;break; //第三行的首地址是88H
case 3: y = 0x98;break; //第四行的首地址是98H
default :break;
}
Addr = x + y;
LCD12864_WriteCmd(Addr);
//检测字符结束符('\0') 等同于 while(*Dat !='\0'); 注:只有字符串才有结束符'\0',单个字符
while(*Dat) LCD12864_WriteData(*Dat++);
}
/*******************************************************************************
* 函 数 名 : LCD12864_GDRAMInit
* 函数功能 : 初始化GDRAM
* 输 入 : 无
* 输 出 : 无
* 返 回 值 : 无
* 说 明 :
*******************************************************************************/
void LCD12864_GDRAMInit() //初始化GDRAM
{
unsigned char x,y;
for(y=0;y<64;y++)//64列 每行写16个8字节取模数据
for(x=0;x<16;x++)
{
LCD12864_WriteCmd(0x34); //开启拓展指令集 关绘图
LCD12864_WriteCmd(0x80+y); //先写列地址
LCD12864_WriteCmd(0x80+x); //再写行地址
LCD12864_WriteCmd(0x30); //开启基本指令集 关绘图
LCD12864_WriteData(0x00);
LCD12864_WriteData(0x00);
}
}
/*******************************************************************************
* 函 数 名 : LCD12864_Drawing(画图)
* 函数功能 : 在任意位置显示任意比例图片
* 输 入 : (x,y)[in] 显示起始点 *img[in] 图片显示数据
* 输 出 : 无
* 返 回 值 : 无
* 说 明 :图像取模方式为横向取模,取模后的数据要在加上图像的显示比例
例如:uchar a[]={128,64,图像数据};
*******************************************************************************/
void LCD12864_Drawing(unsigned char x,unsigned char y,unsigned char *img) //在任意位置显示任意比例图片
{
unsigned char xi,yi,tmp,xa,xb;
xi=img[0]>>3; //除以8,每行字节数
xa=x>>4; //起始行地址
xb=x&0x0f; //起始行偏移地址
for(yi=y;yi<(img[1]+y);yi++) //确定图片的显示区域
{
LCD12864_WriteCmd(0x34);//开启拓展指令集 关绘图
if(yi<32) //显示图片上下半屏选择(地址调整)
{
LCD12864_WriteCmd(0x80+yi); //先写列地址
LCD12864_WriteCmd(0x80+xa); //再写行地址
}
else
{
LCD12864_WriteCmd(0x80+yi-32);//先写列地址
LCD12864_WriteCmd(0x88+xa); //再写行地址
}
LCD12864_WriteCmd(0x30); //开启基本指令集 关绘图
if(xb>=8) //起始行偏移地址
{
LCD12864_WriteData(0x00); //偏移超过8位时,则在第一字节位置补零
LCD12864_WriteData(img[(yi-y)*xi+2]>>(xb-8)); //依据xb(起始行偏移地址)对图像重新编码
for(tmp=0;tmp<xi-1;tmp++)
LCD12864_WriteData((((unsigned int)(img[(yi-y)*xi+tmp+2])<<8)+img[(yi-y)*xi+tmp+3])>>(xb-8));//依据xb(起始行偏移地址)对图像重新编码
LCD12864_WriteData((unsigned int)(img[(yi-y)*xi+xi+1])<<(16-xb));//依据xb(起始行偏移地址)对图像重新编码
}
else
{
LCD12864_WriteData(img[(yi-y)*xi+2]>>xb);//依据xb(起始行偏移地址)对图像重新编码
for(tmp=0;tmp<xi-1;tmp++)
LCD12864_WriteData((((unsigned int)(img[(yi-y)*xi+tmp+2])<<8)+(img[(yi-y)*xi+tmp+3]))>>xb);//依据xb(起始行偏移地址)对图像重新编码
LCD12864_WriteData((unsigned int)(img[(yi-y)*xi+xi+1])<<(8-xb));//依据xb(起始行偏移地址)对图像重新编码
}
}
LCD12864_WriteCmd(0x36); //开启基本指令集 开绘图
}
/*******************************************************************************
* 函 数 名 : LCD12864_DrawPoint(画,点)
* 函数功能 : 在任意位置描点
* 输 入 : x[in] 0~127 水平坐标 y[in] 0~63 垂直坐标 color[in] 颜色 黑或白
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_DrawPoint(unsigned char x,unsigned char y,bit color) //在任意位置描点 x[in] 0~128 水平坐标 y[in] 0~64 垂直坐标 color[in] 颜色 黑或白
{
unsigned char seat,spot; //位置,点
unsigned char Htmp,Ltmp;
LCD12864_WriteCmd(0x36); //开启基本指令集 开绘图
seat = x >> 4; //得出水平位置地址(高4位就是位置地址)
spot = x & 0x0f; //得出点在水平位置地址的哪个地址(低4位就是点的位置)
if(y >= 32){y-=32;seat+=8;} //大于32时,切换到下屏
LCD12864_WriteCmd(0x80+y); //先写垂直方向地址,指定在哪一行
LCD12864_WriteCmd(0x80+seat); //再写水平方向地址,指定在某一行具体地址
LCD12864_ReadData(); //空读一个数据,LCD必先假读一次后才能正确读出数据
Htmp = LCD12864_ReadData();
Ltmp = LCD12864_ReadData(); //读完之后地址指针会改变,所以要重新写一次地址
LCD12864_WriteCmd(0x80+y); //先写垂直方向地址,指定在哪一行
LCD12864_WriteCmd(0x80+seat); //再写水平方向地址,指定在某一行具体地址
if(color) //描黑点
{
if(spot < 8) Htmp |= (1<<(7-spot)); //数据都是高位在前,即高位最靠近坐标(0,0)
else Ltmp |= (1<<(15-spot));
}
else //描白点
{
if(spot < 8) Htmp &= ~(1<<(7-spot)); //数据都是高位在前,即高位最靠近坐标(0,0)
else Ltmp &= ~(1<<(15-spot));
}
LCD12864_WriteData(Htmp); //写入数据
LCD12864_WriteData(Ltmp);
LCD12864_WriteCmd(0x30); //开启基本指令集
}
/*******************************************************************************
* 函 数 名 : LCD12864_DrawLine_X(画,线)
* 函数功能 : 在任意位置描水平线
* 输 入 : (x0,y0) 起始坐标 x1[in] 垂直坐标 color[in] 颜色 黑或白
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_DrawLine_X(unsigned char x0,unsigned char y0,unsigned char x1,bit color) //在任意位置描水平线
{
unsigned char tmp;
if(x0 > x1)
{
tmp = x1;
x1 = x0;
x0 = tmp;
}
do
{
LCD12864_DrawPoint(x0,y0,color);
x0++;
}
while(x1 >= x0);
}
/*******************************************************************************
* 函 数 名 : LCD12864_DrawLine_Y(画,线)
* 函数功能 : 在任意位置描竖线
* 输 入 : (x0,y0) 起始坐标 y1[in] 垂直坐标 color[in] 颜色 黑或白
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_DrawLine_Y(unsigned char x0,unsigned char y0,unsigned char y1,bit color) //在任意位置描竖线
{
unsigned char tmp;
if(y0 > y1)
{
tmp = y0;
y0 = y1;
y1 = tmp;
}
while(y0 <= y1)
{
LCD12864_DrawPoint(x0,y0,color);
y0++;
}
}
/*******************************************************************************
* 函 数 名 : LCD12864_DrawLine(画,线)
* 函数功能 : 在任意位置描任意线(插值法)
* 输 入 : (x0,y0) 起始坐标 (x1,y1) 终点坐标 color[in] 颜色 黑或白
* 输 出 : 无
* 返 回 值 : 无
* 说 明 :有bug.只能画某些直线。
*******************************************************************************/
void LCD12864_DrawLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit color) //在任意位置描任意线
{
char dx_sym,dy_sym; //x,y轴的增值方向,-1,减;1,增
char dx,dy; //x,y轴直线差值
int dx_2,dy_2; //x,y轴直线差值的两倍
int di; //决策变量
dx= x1-x0; //求两点间的差值
dy= y1-y0;
if(dx>0) dx_sym= 1; //确定x轴增值方向
else
{
if(dx<0) dx_sym= -1;
else
{
LCD12864_DrawLine_Y(x0,y0,y1,color); //dx 为零 表示画直线
return;
}
}
if(dy > 0) dy_sym = 1; //确定y轴增值方向
else
{
if(dy < 0) dy_sym = -1;
else
{
LCD12864_DrawLine_X(x0,y0,x1,color); //dy 为零 表示画直线
return;
}
}
dx= dx_sym*dx; //dx,dy的取绝对值
dy= dy_sym*dy;
dx_2= dx*2;
dy_2= dy*2;
if(dx>=dy) //判断 dx,dy的大小
{
di= dy_2-dx; //计算决策变量
while(x0!=x1)
{
LCD12864_DrawPoint(x0,y0,color);
x0+= dx_sym;
if(di<0) di+= dy_2;
else
{
di+= dy_2-dx_2;
y0+= dy_sym;
}
}
LCD12864_DrawPoint(x0,y0,color);
}
else
{
di= dx_2-dy; //计算决策变量
while(y0!=y1)
{
LCD12864_DrawPoint(x0,y0,color);
y0+=dy_sym;
if(di<0) di+= dx_2;
else
{
di+= dx_2-dy_2;
x0= dx_sym;
}
}
LCD12864_DrawPoint(x0,y0,color);
}
}
/*******************************************************************************
* 函 数 名 : LCD12864_DrawCircle(画,圆)
* 函数功能 : 在任意位置画圆(使用bresenhan算法画圆)
* 输 入 : (x0,y0) 圆心坐标 r[in] 半径 color[in] 颜色 黑或白
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_DrawCircle(unsigned char x0,unsigned char y0,unsigned char r ,bit color) //在任意位置画圆
{
char a=0,b,di; //变量一定要初始化,否则会出错
if(r > 31 || r==0) return;
b = r;
di = 3 - 2*r;
while(a <= b)
{
LCD12864_DrawPoint(x0 - b,y0 - a,color); //3
LCD12864_DrawPoint(x0 + b,y0 - a,color); //0
LCD12864_DrawPoint(x0 - a,y0 + b,color); //1
LCD12864_DrawPoint(x0 - b,y0 - a,color); //7
LCD12864_DrawPoint(x0 - a,y0 - b,color); //2
LCD12864_DrawPoint(x0 + b,y0 + a,color); //4
LCD12864_DrawPoint(x0 + a,y0 - b,color); //5
LCD12864_DrawPoint(x0 + a,y0 + b,color); //6
LCD12864_DrawPoint(x0 - b,y0 + a,color); //8
a++;
if(di < 0) di += 4*a+6;
else
{
di += 10+4*(a-b);
b--;
}
LCD12864_DrawPoint(x0 + a,y0 + b,color);
}
// unsigned char xn,yn,xi,yi; //画圆 //效果不好
// unsigned int i;
//
// xn = cos(0)*r + x0;
// yn = sin(0)*r + y0;
//
// for(i=0;i<630;i++)
// {
// xi = (cos(i*0.01)*r) + x0;
// yi = (sin(i*0.01)*r) + y0;
//
// LCD12864_DrawLine(xn,yn,xi,yi,color);//在一系列零散的点上,两点两点之间连线从而得到一条曲线
//
// xn = xi;
// yn = yi;
// }
}
/*******************************************************************************
* 函 数 名 : LCD12864_DrawRetic(画,正方形)
* 函数功能 : 画正方形
* 输 入 : (x0,y0) 左上角坐标 (x1,y1) 右下角坐标 color[in] 颜色 黑或白
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_DrawRetic(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit color) //在任意位置画正方形
{
LCD12864_DrawLine(x0,y0,x0,y1,color);//左竖
LCD12864_DrawLine(x0,y0,x1,y0,color);//上横
LCD12864_DrawLine(x1,y0,x1,y1,color);//右竖
LCD12864_DrawLine(x0,y1,x1,y1,color);//下横
}
/*******************************************************************************
* 函 数 名 : LCD12864_DrawTrigle(画,三角形)
* 函数功能 : 画三角形
* 输 入 : (x0,y0) 顶角坐标 (x1,y1) 1边角坐标 (x12,y2) 2边角坐标 color[in] 颜色 黑或白
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_DrawTrigle(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit color) //在任意位置画三角形
{
LCD12864_DrawLine(x0,y0,x1,y1,color);
LCD12864_DrawLine(x1,y1,x2,y2,color);
LCD12864_DrawLine(x2,y2,x0,y0,color);
}
/*******************************************************************************
* 函 数 名 : LCD12864_ClearScreen
* 函数功能 : 在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清
* * 屏函数
* 输 入 : 无
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_ClearScreen()
{
unsigned char i,j;
LCD12864_WriteCmd(0x34); //开启拓展指令集
for(i=0;i<32;i++) //因为LCD有纵坐标32格所以写三十二次
{
LCD12864_WriteCmd(0x80+i); //先写入纵坐标Y的值
LCD12864_WriteCmd(0x80); //再写入横坐标X的值
for(j=0;j<32;j++) //横坐标有16位,每位写入两个字节的的数据,也
{ //就写入32次以为当写入两个字节之后横坐标会自
LCD12864_WriteData(0xFF); //动加1,所以就不用再次写入地址了。
}
}
LCD12864_WriteCmd(0x36); //0x36扩展指令里面打开绘图显示
LCD12864_WriteCmd(0x30); //恢复基本指令集
}
/*******************************************************************************
* 函 数 名 : LCD12864_Delay1ms
* 函数功能 : 延时1MS
* 输 入 : c
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_Delay1ms(unsigned int c)
{
unsigned char a,b;
for(; c>0; c--)
{
for(b=199; b>0; b--)
{
for(a=1; a>0; a--);
}
}
}
/*******************************************************************************
* 函 数 名 : LCD12864_mang
* 函数功能 : 检测LCD是否忙
* 输 入 : 无
* 输 出 : 1或0(1表示不忙,0表示忙)
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_mang()
{
unsigned char dat=0,i=0xff;
LCD12864_RW = 1; //选择读取
LCD12864_RS = 0; //选择命令
LCD12864_IO=0xff;
do
{
LCD12864_EN = 1;
dat=LCD12864_IO;
LCD12864_EN = 0;
}
while((dat&0x80)&&(i--));
}
/*******************************************************************************
* 函 数 名 : LCD12864_WriteCmd
* 函数功能 : 写命令
* 输 入 : cmd
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_WriteCmd(unsigned char cmd)
{
LCD12864_mang(); //检忙
LCD12864_RW = 0; //选择写入
LCD12864_RS = 0; //选择命令
LCD12864_IO = cmd; //放置数据
LCD12864_EN = 1; //写时序
LCD12864_EN = 0;
}
/*******************************************************************************
* 函 数 名 : LCD12864_WriteData
* 函数功能 : 写数据
* 输 入 : dat
* 输 出 : 无
* 返 回 值 : 无
*******************************************************************************/
void LCD12864_WriteData(unsigned char dat)
{
LCD12864_mang(); //检忙
LCD12864_RW = 0; //选择写入
LCD12864_RS = 1; //选择数据
LCD12864_IO = dat; //放置数据
LCD12864_EN = 1; //写时序
LCD12864_EN = 0;
}
/*******************************************************************************
* 函 数 名 : LCD12864_ReadData
* 函数功能 : 读取数据
* 输 入 : 无
* 输 出 : 读取到的8位数据
* 返 回 值 : 无
*******************************************************************************/
unsigned char LCD12864_ReadData()
{
unsigned char dat;
LCD12864_mang(); //检忙
LCD12864_RW = 1; //选择读取
LCD12864_RS = 1; //选择命令
LCD12864_EN = 1;
dat = LCD12864_IO;
LCD12864_EN = 0;
return dat;
}
复制代码
所有资料51hei提供下载:
LCD12864驱动函数(并口通信).rar
(86.29 KB, 下载次数: 337)
2018-8-19 17:00 上传
点击文件名下载附件
下载积分: 黑币 -5
lcd12864驱动程序 st7920(带字库版本).pdf
(306.93 KB, 下载次数: 215)
2018-8-18 19:47 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-8-18 23:35
楼主能补一下附件吗?
作者:
调皮猫
时间:
2019-1-11 11:37
先拿来学习一下!
作者:
619136674
时间:
2019-12-12 10:09
不错,试试
作者:
天盗
时间:
2019-12-20 21:28
不错的资源,再有串口的就更完美了!!!
作者:
天盗
时间:
2019-12-20 21:29
不错的资源,再有串口的就更完美了
作者:
thxl_kis
时间:
2020-2-17 22:44
不错啊,写的好详细
作者:
这是我
时间:
2020-2-19 18:02
12864版本怎么看?我这块背面写的是JHD529M1 12864F,能用楼主的程序吗?
作者:
775447930
时间:
2020-2-23 12:14
感谢分享
作者:
湛蜀湘
时间:
2020-3-30 19:37
这是我 发表于 2020-2-19 18:02
12864版本怎么看?我这块背面写的是JHD529M1 12864F,能用楼主的程序吗?
应该可以的
作者:
wuxizhen
时间:
2020-4-10 19:45
谢谢楼主,学习学习。
作者:
ndht
时间:
2020-4-11 08:36
谢谢楼主,写的很好,不错
作者:
夕阳下的奔跑
时间:
2020-4-25 12:41
学习学习,感谢分享
作者:
大风吹过啊
时间:
2020-5-23 00:26
这跟P几口有关系?P0口为啥不能用??我用P0口就可以啊,是没上拉吧。。。。。。
作者:
zeng1228
时间:
2020-5-29 01:36
太好看了
作者:
王秋冬
时间:
2020-5-29 09:33
感谢上传
作者:
jjwangxu2008
时间:
2020-5-29 14:34
学习学习,感谢分享
作者:
lizhendong
时间:
2020-5-31 09:23
支持一下。谢谢
作者:
paladina
时间:
2021-8-4 16:31
好东西,正在学习这个屏幕的使用
作者:
4758866
时间:
2024-1-4 21:53
正在学习这个屏幕的使用
作者:
icerol
时间:
2024-8-26 23:15
可以移植成串口吧
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1