//////////////////////////////////////////////////////////////////////////////////
///
全角字符点阵码数据输出
///
//////////////////////////////////////////////////////////////////////////////////
void Putcdot(Uchar Order)
{
Uchar i,bakerx,bakery;
///共定义3个局部变量
///
int x;
///偏移量,字符量少的可以定义为UCHAR
///
bakerx = col;
///暂存x,y坐标,已备下半个字符使用 ///
bakery = row;
x=Order // 0x20;
///每个字符32字节
///
///上半个字符输出,16列
///
for(i=0;i<16;i++)
{
Wrdata(Hzk[x]);
///写输出一字节
///
x++;
col++;
if (col==LCMLIMIT){ col=0;row++;row++;} ///下一列,如果列越界换行///
if (row>6) row=0;
///如果行越界,返回首行
///
}
///上半个字符输出结束 ///
///下半个字符输出,16列
///
col = bakerx;
row = bakery+1;
for(i=0;i<16;i++)
///下半部分///
{
Wrdata(Hzk[x]);
x++;
col++;
if (col==LCMLIMIT){col=0;row++;row++;}
///下一列,如果列越界换行///
if (row>7) row=1;
///如果行越界,返回首行
///
}
///下半个字符输出结束 ///
row = bakery;
}
///整个字符输出结束
///
//////////////////////////////////////////////////////////////////////////////////
///
清屏,全屏幕清零
///
//////////////////////////////////////////////////////////////////////////////////
void Lcmcls( void )
{
for(row=0;row<8;row++)
for(col=0;col
}
//////////////////////////////////////////////////////////////////////////////////
///
从液晶片上读数据,保留在全局变量中
///
//////////////////////////////////////////////////////////////////////////////////
void Rddata(void)
{
Locatexy();
///坐标定位,返回时保留分区状态不变
///
Datalcm=0xFF;
Dilcm = 1;
///数据///
Rwlcm = 1;
///读数据///
Elcm = 1;
///读入到LCM///
_nop_();
cbyte = Datalcm;
///虚读一次 ///
Elcm = 0;
Locatexy();
///坐标定位,返回时保留分区状态不变
///
Datalcm=0xFF;
_nop_();
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 Wrcmd(Uchar X)
//
{
//
Locatexy();
///确定分区,返回时保留分区状态不变
///
//
wtcom();
///等待LCM操作允许 ///
//
Dilcm = 0;
///数据操作
///
//
Rwlcm = 0;
///写输出
///
//
Datalcm = X;
///数据输出到数据口 ///
//
Elcm = 1;_nop_();Elcm = 0;
///读入到LCM///
//
}
//////////////////////////////////////////////////////////////////
/// 命令输出到左区控制口
///
//////////////////////////////////////////////////////////////////
void WrcmdL(Uchar X)
{
lcdbusyL();
///确定分区,返回时保留分区状态不变///
Dilcm = 0;
///命令操作
///
Rwlcm = 0;
///写输出
///
Datalcm = X;
///数据输出到数据口 ///
Elcm = 1;_nop_();Elcm = 0;
///读入到LCM///
}
//////////////////////////////////////////////////////////////////
/// 命令输出到中区控制口
///
//////////////////////////////////////////////////////////////////
void WrcmdM(Uchar X)
{
lcdbusyM();
///确定分区,返回时保留分区状态不变///
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///
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 分区操作允许等待,返回时保留分区选择状态
///
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void lcdbusyL(void)
{
CS1LCM = 0;
///CLR
CS1
///
CS2LCM = 1;
///SETB
CS2
///
CS3LCM = 1;
///SETB
CS3
///
wtcom();
/// waitting for enable
///
}
void lcdbusyM(void)
{
CS1LCM = 1;
///SETB
CS1
///
CS2LCM = 0;
///CLR
CS2
///
CS3LCM = 1;
///SETB
CS3
///
wtcom();
/// waitting for enable
///
}
void lcdbusyR(void)
{
CS1LCM = 1;
///SETB
CS1
///
CS2LCM = 1;
///SETB
CS2
///
CS3LCM = 0;
///CLR
CS3
///
wtcom();
/// waitting for enable
///
}
void wtcom(void)
{
Dilcm = 0;
///CLR
DI
///
Rwlcm = 1;
///SETB
RW
///
Datalcm = 0xFF;
///MOV
DATA_LCM,#0FFH
///
Elcm
= 1;_nop_();
while(Datalcm & Lcdbusy);
Elcm
= 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///根据设定的坐标数据,定位LCM上的下一个操作单元位置
///
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Locatexy(void)
{
unsigned char
x,y;
switch (col&0xc0)
///
col.and.0xC0
///
{
///条件分支执行
///
case 0:
{lcdbusyL();break;} ///左区
///
case 0x40:
{lcdbusyM();break;} ///中区
///
case 0x80:
{lcdbusyR();break;} ///右区
///
}
x = col&0x3F|SETX;
///
col.and.0x3f.or.setx
///
y = row&0x07|SETY;
///
row.and.0x07.or.sety
///
wtcom();
///
waitting for enable
///
Dilcm = 0;
///CLR
DI
///
Rwlcm = 0;
///CLR
RW
///
Datalcm = y;
///MOV
P0,Y
///
Elcm = 1;_nop_();Elcm = 0;
wtcom();
///
waitting for enable
///
Dilcm = 0;
///CLR
DI
///
Rwlcm = 0;
///CLR
RW
///
Datalcm = x;
///MOV
P0,X
///
Elcm = 1;_nop_();Elcm = 0;
}
//////////////////////////////////////////////////////////////////
///液晶屏初始化
///
//////////////////////////////////////////////////////////////////
void Lcminit(void)
{
cbyte = DISPOFF;
///关闭显示屏 ///
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
cbyte = DISPON;
///打开显示屏 ///
WrcmdL(cbyte);
WrcmdM(cbyte);
WrcmdR(cbyte);
cbyte = DISPFIRST;
///定义显示起始行为零 ///
WrcmdL(cbyte);
WrcmdM(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--;
}
}
//////////////////////////////////////////////////////////////////
//定义字符串数组
///
//////////////////////////////////////////////////////////////////
Uchar code STR1[]=
{
0x80,0x81,0x82,0x83,0x84,0x85,
0x86,0x87,0x88,0x89,0x8a,0x8B
};
Uchar code STR2[]="Our friend over the wold";
Uchar code STR3[]="Program by Keil C51 6.12";
Uchar code STR4[]="Thank you ~v~ 1234567890";
关键词:
51单片机模拟时序控制点阵图形液