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

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

时间:11-28 来源:互联网 点击:

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;} //右区 //

}

}


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

// 从液晶片上读数据,保留在全局变量cbyte中 //

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

void Rddata(void)

{

Locatexy(); //坐标定位,返回时保留分区状态不变 //

Datalcm=0xFF;

wtcom(); // waitting for enable //

Dilcm = 1; //数据//

Rwlcm = 1; //读数据//

Elcm = 1; //读入到LCM//

_nop_();

cbyte = Datalcm; //虚读一次 //

Elcm = 0;

Locatexy(); //坐标定位,返回时保留分区状态不变 //

Datalcm=0xFF;

wtcom(); // waitting for enable //

Dilcm = 1; //数据//

Rwlcm = 1; //读数据//

Elcm = 1; //读入到LCM//

_nop_();

cbyte = Datalcm; //从数据口读数据,真读 //

Elcm = 0;

}

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

/// 数据写入 //

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

void Wrdata(Uchar X)

{

Locatexy(); ///坐标定位,返回时保留分区状态不变 //

wtcom();

Dilcm = 1; ///数据输出//

Rwlcm = 0; ///写输出 //

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

Elcm = 1; ////读入到LCM//

_nop_();

Elcm = 0;

}

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

/// 清屏,全屏幕清零 //

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

void Lcmcls( void )

{

for(row=0;row<8;row++)

for(col=0;col

}

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

///液晶屏初始化 //

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

void Lcminit(void)

{

cbyte = DISPOFF; ///关闭显示屏 //

WrcmdL(cbyte);

WrcmdR(cbyte);

cbyte = DISPON; ///打开显示屏 //

WrcmdL(cbyte);

WrcmdR(cbyte);

cbyte = DISPFIRST; ///定义显示起始行为零 //

WrcmdL(cbyte);

WrcmdR(cbyte);

Lcmcls();

col=0; //清屏 //

row=0;

Locatexy();

}

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

/// 延时 //

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

void Delay(Uchar MS)

{

Uchar us,usn;

while(MS!=0)

{ usn = 4;

while(usn!=0)

{

us=0xf0;

while (us!=0){us--;};

usn--;

}

MS--;

}

}

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

// 半角字符(西文字符库)点阵码数据输出16/16 //

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

void Putedot(Uchar Order)

{

Uchar i,bakerx,bakery; //共定义4个局部变量 //

int x; //偏移量,字符量少的可以定义为UCHAR //

bakerx = row; //暂存x,y坐标,已备下半个字符使用 //

bakery = col;

x=Order / 0x10; //半角字符,每个字符16字节 //

///上半个字符输出,8列 //

for(i=0;i<8;i++)

{

cbyte = Ezk[x]; ///取点阵码,rom数组 //

Wrdata(cbyte); ///写输出一字节 //

x++;

col++;

} ///上半个字符输出结束 //

col = bakery; ///列对齐 //

row = bakerx+1; ///指向下半个字符行 //

///下半个字符输出,8列 //

for(i=0;i<8;i++)

{

cbyte = Ezk[x]; ///取点阵码 //

Wrdata(cbyte); ///写输出一字节 //

x++;

col++;

} ///下半个字符输出结束 //

row=bakerx;

} ///整个字符输出结束 //

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

/// 全角字符(汉字库)点阵码数据输出16/32 //

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

void Putcdot(Uchar Order)

{

Uchar i,bakerx,bakery; ///共定义3个局部变量 //

int x; ///偏移量,字符量少的可以定义为UCHAR //

bakerx = row; / / //暂存x,y坐标,已备下半个字符使用 //

bakery = col;

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

网站地图

Top