当前位置:文档之家› 12864液晶显示程序(串口)

12864液晶显示程序(串口)

程序代码如下:

#include
#include"INTRINS.H"

#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1

sbit cs = P0^0;
sbit std = P0^1;
sbit sclk = P0^2;
//sbit rst = P0^3; //Reset Signal 低电平有效

void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);
void lcd_char(uchar x0,uchar y0,uchar k,uchar *chn);
void init_lcd (void);
void lcd_string(uchar x0,uchar y0,uchar k,uchar *chn);

/*------------------初始化-----------------*/
void init_lcd (void)
{
// rst=1;
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
}

/*--------------清DDRAM------------------*/
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
delay (180);
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (500);
a=content;
cs=1;
_nop_();
sclk=0;
_nop_();
std=1;
_nop_();
for(i=0;i<5;i++)
{
sclk=1;
_nop_();
_nop_();
_nop_();
sclk=0;
}
std=0;
_nop_();
sclk=1;
_nop_();
_nop_();
_nop_();
sclk=0;
_nop_();
if(dat_comm)
std=1; //data
else
std=0; //command
sclk=1;
_nop_();
_nop_();
_nop_();
sclk=0;
std=0;
_nop_();
sclk=1;
_nop_();
_nop_();
_nop_();
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
std=CY;
sclk=1;
_nop_();
_nop_();
_nop_();
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
_nop_();
_nop_();
_nop_();
sclk=0;
}
}
}
/*-----------------------------------*/
void delay (uint us) //delay time
{
while(us--);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;ifor(j=0;j<15;j++)
delay(1);
}
/*-------在任意位置显示一串汉字------

X0为行,Y0为列,chn为所要显示的汉字串 ,k为汉字个数
*/
void lcd_char(uchar x0,uchar y0,uchar k,uchar *chn)
{
uchar adr,i;

switch(x0)
{
case 0: adr = 0x80 + y0;
break; //在第1行y列显示
case 1: adr = 0x90 + y0;
break; //在第2行y列显示
case 2: adr = 0x88 + y0;
break; //在第3行y列显示
case 3: adr = 0x98 + y0;
break; //在第4行y列显示
default: ;
}

wr_lcd (comm,0x30);
wr_lcd (comm,adr);
for(i=0;i<2*k;i++)
wr_lcd (dat,chn[i]);
}

//在任意位置显示字符串,k为字符个数
void lcd_string(uchar x0,uchar y0,uchar k,uchar *chn)
{
uchar adr,i;

switch(x0)
{
case 0: adr = 0x80 + y0;
break; //在第1行y列显示
case 1: adr = 0x90 + y0;
break; //在第2行y列显示
case 2: adr = 0x88 + y0;
break; //在第3行y列显示
case 3: adr = 0x98 + y0;
break; //在第4行y列显示
default: ;
}

wr_lcd (comm,0x30);
wr_lcd (comm,adr);
for(i=0;i

;i++)
wr_lcd (dat,chn[i]);


}

/*------------------主程序--------------------*/
void main ()
{ uchar chn[4]={0x31,0x32,0x35,0x36};
uchar b[]={"欢迎使用本程序"};

init_lcd ();
while (1)
{
clrram();
lcd_char(0,0,7,b);
lcd_string(1,0,4,chn);
delay1 (8000);
}
}

相关主题
文本预览
相关文档 最新文档