12864串行程序例程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
write_lcd(0x0c,0);//显示开,游标关,反白关
write_lcd(0x01,0);//清屏
}
/******************************************************************/
/*液晶初始化-图形*/
/******************************************************************/
/*图形显示清屏*/
/*************************************************************************/
void clear_lcd()
{
for(k=0;k<2;k++)
{for(i=0;i<32;i++) //
{
write_lcd((0x80 + i),0); //SET垂直地址VERTICAL ADD高度
};源自文库
void DisPhoto(unsigned char code *adder) ;
void lcd_chine(unsigned char code *adder1);
void Draw_Point(int x,int y,int z,int type);//画点坐标点,修正位,及是否为画点,还是消除
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
}
//CS=0;
}
break;
}
}
/***********************************************************************/
void Draw_Line(int x,int y,int len,int type)
{ if (y>32)
{
y-=32;
x=x+8;
}
write_lcd(0x80+y,0);
write_lcd(0x80+x,0);
switch(type)
{ case 1:
for(i=0;i<len;i++)
{
write_lcd(0xff,1);
for(j=0;j<16;j++)
{
write_lcd(*adder,1);
adder++;
}
}
//*******显示下半屏内容设置
for(i=0;i<32;i++) //竖直高度是两个32点2X32
{
write_lcd((0x80 + i),0); //SET垂直地址VERTICAL ADD
write_lcd(0x88,0); //SET水平地址HORIZONTAL ADD
delay_ms(3000);
Draw_Line(0,42,10,0);//消线
/* lcd_init1();
lcd_chine(IDAT);
delay_ms(2000);
write_lcd(0x01,0);//清屏
*/
}
}
void lcd_chine(unsigned char code *adder1)
/***************************************************************************/
/*主函数**/
/***************************************************************************/
}
break;
case 0:
for(i=0;i<len;i++)
{
write_lcd(0x00,1);
}
break;
}
}
/*unsigned char code pic[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
{
switch(type)
{
case 0:
{
uchar i;
uchar i_data;
i_data=0xf8;
//CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
}
i_data=date;
i_data&=0xf0;//先传送高四位,屏弊低四位
0x00,0x6E,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
write_lcd(0x00+z,1);
break;
case 0:
write_lcd(0x00,1);
break;
}
}
/******************************************************************** **/
/*画直线*/
/*********************************************************************/
for(j=0;j<16;j++)
{
write_lcd(*adder,1);
adder++;
}
}
}
/*************************************************************************/
/*画图*/
/***********************************************************************/
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
}
i_data=date;
i_data<<=4;//将低四位移向高四位并传送
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
/*液晶初始化-字库*/
/******************************************************************/
void lcd_init1()
{
write_lcd(0x30,0);
write_lcd(0x30,0);//基本指令集
write_lcd(0x06,0); //显示右移一位
}
i_data=date;
i_data&=0xf0;//先传送高四位,屏弊低四位
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0; //给一个脉冲
SCLK=1;
i_data<<=1;
}
i_data=date;
i_data<<=4;//将低四位移向高四位并传送
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
此文档,是本人根据12864资料编写而成,在51单片机上面调试通过成功,,由于51的内存有限,后续两幅图占用内存太大,所以注释。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SID=P1^1; //RW
SCLK=1;
i_data<<=1;
}
//CS=0;
}
break;
case 1:
{uchar i;
uchar i_data;
i_data=0xfa;
//CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
void Draw_Line(int x,int y,int len,int typ);
void delay_ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++)
;
}
void write_lcd(uchar date,uint type) //type 0为命令,1为数据
void lcd_init2(void) //LCD显示图片(扩展)初始化程序
{write_lcd(0x34,0);
write_lcd(0x36,0);//扩充指令集
write_lcd(0x3E,0); //(DL=8BITS,RE=1,G=1)
write_lcd(0x02,0);//清DDRAM
}
void main()
{
lcd_init2(); //初使化图片指令集
clear_lcd();//清屏
while(1)
{
Draw_Point(0,40,7,1);//画点
delay_ms(3000);
Draw_Point(0,40,7,0);//取消点的绘制
//DisPhoto(pic);
Draw_Line(0,42,10,1);//画线
void Draw_Point(int x,int y,int z,int type)//z为修正量,向右移动的位数
{
switch (z)
{
case 0:
z=1;break;
case 1:
z=2; break;
case 2:
z=4;break;
case 3:
z=8;break;
case 4:
z=0x10;break;
for(i=32;i<64;i++)
{
write_lcd(*adder1,1);
adder1++;
}
}
/************************************************************************/
/*显示图形点阵*/
/************************************** *********************************/
case 5:
z=0x20; break;
case 6:
z=0x40;break;
case 7:
z=0x80;break;
}
if (y>32)
{
y-=32;
x=x+8;
}
write_lcd(0x80+y,0);//Y坐标
write_lcd(0x80+x,0);//X坐标
switch(type)
{ case 1:
{
uchar i;
write_lcd(0x80,0); //Set Graphic Display RAM Address
delay_ms(1);
for(i=0;i<32;i++)
{
write_lcd(*adder1,1);
adder1++;
}
write_lcd(0x90,0); //Set Graphic Display RAM Address
void DisPhoto(unsigned char code *adder)
{
//*******显示上半屏内容设置
for(i=0;i<32;i++) //
{
write_lcd((0x80 + i),0); //SET垂直地址VERTICAL ADD高度
write_lcd(0x80,0); //SET水平地址HORIZONTAL ADD宽
if(!k)
write_lcd(0x80,0);
else
write_lcd(0x88,0); //SET水平地址HORIZONTAL ADD宽首地址
for(j=0;j<16;j++)//共左向右共十条竖线
write_lcd(0x00,1);//线宽四位二进制表示
}
}
}
/******************************************************************/
sbit SCLK=P1^0;//E
int i,j,k,len;
unsigned char code pic[];
unsigned char code pic1[];
unsigned char code IDAT[]={
"陕西理工电子科技"
"单片机小液晶系列"
"中文字库测试程序"
"恭喜发财工作顺利"
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
write_lcd(0x01,0);//清屏
}
/******************************************************************/
/*液晶初始化-图形*/
/******************************************************************/
/*图形显示清屏*/
/*************************************************************************/
void clear_lcd()
{
for(k=0;k<2;k++)
{for(i=0;i<32;i++) //
{
write_lcd((0x80 + i),0); //SET垂直地址VERTICAL ADD高度
};源自文库
void DisPhoto(unsigned char code *adder) ;
void lcd_chine(unsigned char code *adder1);
void Draw_Point(int x,int y,int z,int type);//画点坐标点,修正位,及是否为画点,还是消除
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
}
//CS=0;
}
break;
}
}
/***********************************************************************/
void Draw_Line(int x,int y,int len,int type)
{ if (y>32)
{
y-=32;
x=x+8;
}
write_lcd(0x80+y,0);
write_lcd(0x80+x,0);
switch(type)
{ case 1:
for(i=0;i<len;i++)
{
write_lcd(0xff,1);
for(j=0;j<16;j++)
{
write_lcd(*adder,1);
adder++;
}
}
//*******显示下半屏内容设置
for(i=0;i<32;i++) //竖直高度是两个32点2X32
{
write_lcd((0x80 + i),0); //SET垂直地址VERTICAL ADD
write_lcd(0x88,0); //SET水平地址HORIZONTAL ADD
delay_ms(3000);
Draw_Line(0,42,10,0);//消线
/* lcd_init1();
lcd_chine(IDAT);
delay_ms(2000);
write_lcd(0x01,0);//清屏
*/
}
}
void lcd_chine(unsigned char code *adder1)
/***************************************************************************/
/*主函数**/
/***************************************************************************/
}
break;
case 0:
for(i=0;i<len;i++)
{
write_lcd(0x00,1);
}
break;
}
}
/*unsigned char code pic[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
{
switch(type)
{
case 0:
{
uchar i;
uchar i_data;
i_data=0xf8;
//CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
}
i_data=date;
i_data&=0xf0;//先传送高四位,屏弊低四位
0x00,0x6E,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
write_lcd(0x00+z,1);
break;
case 0:
write_lcd(0x00,1);
break;
}
}
/******************************************************************** **/
/*画直线*/
/*********************************************************************/
for(j=0;j<16;j++)
{
write_lcd(*adder,1);
adder++;
}
}
}
/*************************************************************************/
/*画图*/
/***********************************************************************/
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
}
i_data=date;
i_data<<=4;//将低四位移向高四位并传送
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
/*液晶初始化-字库*/
/******************************************************************/
void lcd_init1()
{
write_lcd(0x30,0);
write_lcd(0x30,0);//基本指令集
write_lcd(0x06,0); //显示右移一位
}
i_data=date;
i_data&=0xf0;//先传送高四位,屏弊低四位
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0; //给一个脉冲
SCLK=1;
i_data<<=1;
}
i_data=date;
i_data<<=4;//将低四位移向高四位并传送
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
此文档,是本人根据12864资料编写而成,在51单片机上面调试通过成功,,由于51的内存有限,后续两幅图占用内存太大,所以注释。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SID=P1^1; //RW
SCLK=1;
i_data<<=1;
}
//CS=0;
}
break;
case 1:
{uchar i;
uchar i_data;
i_data=0xfa;
//CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data<<=1;
void Draw_Line(int x,int y,int len,int typ);
void delay_ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++)
;
}
void write_lcd(uchar date,uint type) //type 0为命令,1为数据
void lcd_init2(void) //LCD显示图片(扩展)初始化程序
{write_lcd(0x34,0);
write_lcd(0x36,0);//扩充指令集
write_lcd(0x3E,0); //(DL=8BITS,RE=1,G=1)
write_lcd(0x02,0);//清DDRAM
}
void main()
{
lcd_init2(); //初使化图片指令集
clear_lcd();//清屏
while(1)
{
Draw_Point(0,40,7,1);//画点
delay_ms(3000);
Draw_Point(0,40,7,0);//取消点的绘制
//DisPhoto(pic);
Draw_Line(0,42,10,1);//画线
void Draw_Point(int x,int y,int z,int type)//z为修正量,向右移动的位数
{
switch (z)
{
case 0:
z=1;break;
case 1:
z=2; break;
case 2:
z=4;break;
case 3:
z=8;break;
case 4:
z=0x10;break;
for(i=32;i<64;i++)
{
write_lcd(*adder1,1);
adder1++;
}
}
/************************************************************************/
/*显示图形点阵*/
/************************************** *********************************/
case 5:
z=0x20; break;
case 6:
z=0x40;break;
case 7:
z=0x80;break;
}
if (y>32)
{
y-=32;
x=x+8;
}
write_lcd(0x80+y,0);//Y坐标
write_lcd(0x80+x,0);//X坐标
switch(type)
{ case 1:
{
uchar i;
write_lcd(0x80,0); //Set Graphic Display RAM Address
delay_ms(1);
for(i=0;i<32;i++)
{
write_lcd(*adder1,1);
adder1++;
}
write_lcd(0x90,0); //Set Graphic Display RAM Address
void DisPhoto(unsigned char code *adder)
{
//*******显示上半屏内容设置
for(i=0;i<32;i++) //
{
write_lcd((0x80 + i),0); //SET垂直地址VERTICAL ADD高度
write_lcd(0x80,0); //SET水平地址HORIZONTAL ADD宽
if(!k)
write_lcd(0x80,0);
else
write_lcd(0x88,0); //SET水平地址HORIZONTAL ADD宽首地址
for(j=0;j<16;j++)//共左向右共十条竖线
write_lcd(0x00,1);//线宽四位二进制表示
}
}
}
/******************************************************************/
sbit SCLK=P1^0;//E
int i,j,k,len;
unsigned char code pic[];
unsigned char code pic1[];
unsigned char code IDAT[]={
"陕西理工电子科技"
"单片机小液晶系列"
"中文字库测试程序"
"恭喜发财工作顺利"
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,