51单片机控制HD61202液晶显示C语言程序
///////////////////////////////////////////////////////////////////////////////////////////////////
连线图:
/
/LCM---89C52/
/LCM---89C52/
/LCM-------89C52/
/LCM----------89C52/
/
/DB0---P1.0/
/DB4---P1.4/
/D/I-------P2.3/
/CS1----------P2.0/
/
/DB1---P1.1/
/DB5---P1.5/
/R/W-------P2.2/
/CS2----------P2.1/
/
/DB2---P1.2/
/DB6---P1.6/
/E---------P2.4/
/EL-E---------P3.4/
/
/DB3---P1.3/
/DB7---P1.7/
/RST-------VCC
/EL-D---------VCC
/
注:89C52的晶振频率为12MHz
/
////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
#define Uchar unsigned char
#define _Nop() _nop_()
//定义空指令//
/////////////////全局变量定义///////////////////
Uchar col,row,cbyte,keyd,t,Signal;
//列y,行(页)x,输出数据;keyd为键值;t为数组下标;Signal为触发传感器的编号
//
Uchar
buf[10];
//保存,显示数据缓冲区//
////////////液晶显示器接口引脚定义////////////////
sbit
EL_E=
P3^4;
//背景光控制脚
sbit
Elcm=
P2^4;
//
sbit
CS1LCM= P2^0;
//
sbit
CS2LCM= P2^1;
//
sbit
Dilcm=
P2^3;
//
sbit
Rwlcm=
P2^2;
//
sfr
Datalcm=
0x90;
//数据口.即P1口地址
sbit
PL=
P3^5;
//接74HC164的PL脚,并行数据锁入使能,低电平有效
////////////常用操作命令和参数定义////////////////
#define
DISPON
0x3f
//显示on
//
#define
DISPOFF
0x3e
//显示off
//
#define
DISPFIRST
0xc0
//显示起始行定义
//
#define
SETX
0xb8
//X定位设定指令(页)
//
#define
SETY
0x40
//Y定位设定指令(列)
//
#define
Lcdbusy
0x80
//LCM忙判断位
//
///////////////显示分区边界位置//////////////////
#define
MODL
0x00
//左区
//
#define
MODM
0x40
//左区和右区分界
//
#define
LCMLIMIT
0x80
//显示区的右边界
//
//////////////////函数列表///////////////////////
void InputNo(void);
void ShowPage(void);
void input(void);
void LookOver(void);
void Drawing(void);
void Save(void);
void ProcessSgl(void);
///////////////////数组列表//////////////////////
Uchar code Ezk[];
//ASCII常规字符点阵码表 //
Uchar code Hzk[];
//自用汉字点阵码表
//
Uchar code KJHM[];
//开机画面点阵码表
//
//////////////////////////////////
//定义字符串数组
//
//////////////////////////////////
Uchar code BH[]={0x80,0x81,0x23,0x25,0x25};
Uchar code JL[]={0x82,0x83,0x23,0x25,0x25,0x25,0x25,0x8b,0x8c};
//9个字节
Uchar code FW[]={0x84,0x85,0x23,0x25,0x25,0x25,0x25,0x86,0x85};
Uchar code BC[]={0x89,0x8a,0x9e,0x9f,0xa1,0x22};
//保存??//
Uchar code LX[]={0x87,0x88,0x23};
Uchar code ZD[]={0x8d,0x8e,0x93};
Uchar code HZ[]={0x8f,0x90,0x93};
Uchar code ZS[]={0x91,0x92,0x93};
Uchar code XD[]={0x94,0x95,0x96,0x97};
Uchar code YJ[]={0x98,0x99};
Uchar code SR[]={0xa0,0x9a,0x9b,0x9e,0x9f};
Uchar code CK[]={0x9a,0x9b,0x80,0x81,0x9c,0x9d,0x9e,0x9f};
//状态标志//
bit
ack;
//应答标志位//
///////////////////////////液晶子程序//////////////////////////////
//公用busy等待//
void wtcom(void)
//////////////////////////////////////////////////////////
// 分区操作允许等待,返回时保留分区选择状态
//
//////////////////////////////////////////////////////////
void lcdbusyL(void)
void lcdbusyR(void)
//////////////////////////////////
// 命令输出到左区控制口
//
//////////////////////////////////
void WrcmdL(Uchar X)
//////////////////////////////////
// 命令输出到右区控制口
//
//////////////////////////////////
void WrcmdR(Uchar X)
//////////////////////////////////////////////////////////
//根据设定的坐标数据,定位LCM上的下一个操作单元位置
//
//////////////////////////////////////////////////////////
void Locatexy(void)
评论