📄 24c08_lcd.h
字号:
/*===============================================================
程序名称:带字库液晶显示模块12864并行驱动程序
-----------------------------------------------
( http://www.bluepw.com http://www.bluepw.cn )
Agni 07-EV开发板 LCD(12864)与单片机接线方式:
P1.0--RS
P1.1--RW
P1.2--E
P1.3--PSB
P1.4--RST
注:(1):主芯片AT89S52使用11.0592M晶振
(2):Keil uV3 3.30编译运行通过
(3):本例程在 Agni 07-EV 开发平台上成功运行通过
(4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.
==================================================================*/
#include <at89x52.h>
#define uchar unsigned char
#define uint unsigned int
/********引脚定义***********/
#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[]={" www.bluepw.com "};
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<40;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(10); //启动等待,等LCM讲入工作状态
PSB=1; ; //并口驱动模式
RST=0; delay100(2); RST=1; // 复位LCD
write(0,0x30); //8 位介面,基本指令集
write(0,0x0c); //显示打开,光标关,反白关
write(0,0x01); //清屏,将DDRAM的地址计数器归零
}
/*****对外来数据进行处理*****/
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 buffer[8];
uchar j,k;
uchar i=0;
write(0,address);
do{
buffer[i++]=number%10;
number=number/10;
j=i;
}while(number!=0);
for(k=j;k>0;k--)
{
write(1,dig[buffer[k-1]]);
}
}
/**********主程序**********
void main(void)
{
uint k=12345;
Init_lcd();
while(1)
{
Show(0x80,16,title); //写数组里的内容
Show(0x91,6,"变量X=");
Show_dig(0x94,k); //写阿拉伯数字变量
Show(0x88,16,website); //写英文
Show(0x98,16,"蓝极风电子技术网"); //写实时数组
}
}
************************* end ***************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -