您的位置 首页 发布

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

写汉字液晶程序液晶屏分为4行8列汉字,全部使用模拟接口方式。

//写汉字液晶程序 液晶屏分为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; //数据输出到数据口 //
Elcm = 1;_nop_();Elcm = 0; //下降沿,写入到LCM//
}
//////////////////////////////////
// 指令输出到右区操控口 //
//////////////////////////////////
void WrcmdR(Uchar X)
{
lcdbusyR(); //确认分区,回来时保存分区状况不变 //
Dilcm = 0; //指令操作 //
Rwlcm = 0; //写输出 //
Datalcm = X; //指令输出到数据口 //
Elcm = 1;_nop_();Elcm = 0; //读入到LCM//
}
//////////////////////////////////////////////////////////
//依据设定的坐标数据,定位LCM上的下一个操作单元方位 //
//////////////////////////////////////////////////////////
void Locatexy(void)
{
unsigned char x,y;
y = col&0x3F|SETY; // col.and.0x3f.or.setx //
x = row&0x07|SETX; // row.and.0x07.or.sety //
switch (col&0xc0) // col.and.0xC0 //
{ //条件分支履行 //
case 0: {WrcmdL(y);
WrcmdL(x);
break;} //左区 //
case 0x40:{WrcmdR(y);
WrcmdR(x);
break;} //右区 //
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/255863.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部