51单片机 12864液晶显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);