51单片机 12864液晶显示程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*========================LCD12864液晶并行驱动程序==========================

程序名称:12864液晶驱动程序(并行模式)

================================================= ===========================*/

#include <>

#define uchar unsigned char

#define uint unsigned int

uchar t,p;

/********************************引脚定义

***********************************/

#define RS P1_0 //RS=0为执行指令;RS=1为执行数据;#define RW P1_1 //读写

#define E P1_2 //使能

#define PSB P1_3 //低电平(串口驱动);高电平(并口驱动)

#define RST P1_4 //LCD复位

/********************************定义数组

***********************************/

uchar code title[] = {"LCD 并行接口测试"}; uchar code website[]={"qwertyuioopplkjh"}; uchar code dig[]={"09"};

uchar code dig2[]={0,1,2,3,':'}; //

/*******************************相关子程序

**********************************/

void Init_lcd(); //初始化液晶

void lcd_busy(); //忙标志查询

void delay100us(); //100us延时程序

void write(uchar x,uchar Data); //写单字节函数void Show(uchar address,uchar L,uchar STR1[]); void Show_dig(uchar address,uint number);

/*******************************延时子程序

**********************************/

void delay100(int n)

{

unsigned char i;

while(n--)

for(i=0;i<100;i++);

}

/*******************************LCD 忙标志查询******************************/

void lcd_busy(void)

{

uchar busy;

P0=0xff;

RS=0;

RW=1;

do{

E=1;

busy=P0;

E=0;

}

while(busy>0x7f);

}

/*****************************写指令或数据**********************************/

void write(uchar x,uchar Data)

{

lcd_busy(); //忙查询

if(x==0)

{

RS=0;

RW=0; //写单字节命令字

}

else if(x==1)

{

RS=1;

RW=0; //写单字节数据

}

E=1;

P0=Data;

E=0;

P0=0xff;

}

/*******************************初始化LCD **********************************/

void Init_lcd(void)

{

delay100(20); //启动等待,等LCM讲入工作状态

PSB=1; //并口驱动模式

RST=0;

delay100(4);

RST=1; // 复位LCD

write(0,0x30); //8 位介面,基本指令集

write(0,0x0c); //显示打开,光标关,反白关

write(0,0x01); //清屏,将DDRAM的地址计数器归零}

/*******汉字和字符显示,参数入口:Show(地址,显示宽度,汉字数组)************/

void Show(uchar address,uchar L,uchar STR1[])

{

uchar i;

write(0,address);

for(i=0;i

write(1,STR1[i]);

}

/************纯阿拉伯数字显示,参数入口:Show_dig (地址,数字)**************/

void Show_dig(uchar address,uint number)

{

uchar shi,ge;

shi=number/10;

ge=number%10;

write(0,address);

delay100(20);

write(1,dig[shi]);

delay100(20);

相关文档
最新文档