微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机控制HD61202液晶显示C语言程序

51单片机控制HD61202液晶显示C语言程序

时间:11-28 来源:互联网 点击:
//写汉字液晶程序 液晶屏分为4行/8列汉字,全部使用模拟接口方式。

///////////////////////////////////////////////////////////////////////////////////////////////////

连线图: /

/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)

{

Dilcm = 0; //CLR DI 命令操作 //

Rwlcm = 1; //SETB RW 读操作 //

Datalcm = 0xFF; //用作输入时,口锁存器必须先写1 //

Elcm = 1;_nop_();

while(Datalcm & Lcdbusy);

Elcm = 0;

}

//////////////////////////////////////////////////////////

// 分区操作允许等待,返回时保留分区选择状态 //

//////////////////////////////////////////////////////////

void lcdbusyL(void)

{

CS1LCM = 1; //CLR CS1 //

CS2LCM = 0; //SETB CS2 //

wtcom(); // waitting for enable //

}

void lcdbusyR(void)

{

CS1LCM = 0; //SETB CS1 //

CS2LCM = 1; //SETB CS2 //

wtcom(); // waitting for enable //

}

//////////////////////////////////

// 命令输出到左区控制口 //

//////////////////////////////////

void WrcmdL(Uchar X)

{

lcdbusyL(); //确定分区,返回时保留分区状态不变//

Dilcm = 0; //命令操作 //

Rwlcm = 0; //写输出 //

Datalcm = X; //数据输出到数据口 //

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top