标题:
51单片机LCD12864液晶并行驱动程序
[打印本页]
作者:
ddddv
时间:
2018-12-27 22:36
标题:
51单片机LCD12864液晶并行驱动程序
/*========================LCD12864液晶并行驱动程序==========================
程序名称:12864液晶驱动程序(并行模式)
================================================= ===========================*/
#include <at89x52.h>
#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[]={"0123456789"};
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<L;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);
write(1,dig[ge]);
}
/************************************主程序**********************************/
void main(void)
{
Init_lcd();
TMOD=0X01;
TH0=0xdc;
TL0=0x00;
ET0=1;
TR0=1;
EA=1;
P3_6=0;
delay100(30);
Show(0x83,4,"梁浩"); //写数组里的内容
write(0,0x0d);
delay100(30);
Show(0x90,16,"电子科技协会会长");
delay100(30);
Show(0x88,16,"TEL 152********"); //写英文
delay100(30);
while(1)
{
Show_dig(0x99,p); //写实时数组
}
}
void exter() interrupt 1
{
TH0=0xdc;
TL0=0x00;
t++;
if(t==20)
{
t=0;
p++;
}
if(p==60)
p=0;
}
/***************************************end****** *****************************/
复制代码
作者:
cphnkj188
时间:
2019-5-2 18:44
复制代码,编译时出现三个错误:52 69 74 行
作者:
cphnkj188
时间:
2019-5-5 12:40
这个程序驱动的12864是带字库的吗?
作者:
cphnkj188
时间:
2019-5-5 16:37
在我的单片机运行正常了,仔细检查了一下,我的单片机定义在p3口上,程序中定义为p1口,改过来好了,学习了,谢谢!
作者:
豌豆小豌豆
时间:
2019-5-7 10:07
屏幕显示不了东西呀,一片白是为什么呢?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1