/********************************************************************
*文件名:lcdDriver.c
*文件描述:
*创建人:Sha zq
*创建日期: 2007年09月06日
*版本号:1.0.01
*E-mail:sasinop@hotmail.com
*修改记录:
1) 修改WriteChar()函数,详细说明见函数描述部分。 Sha zq 2007-9-20 11:10
********************************************************************/
#include "config.h"
/*******************************************************
外部函数声明
********************************************************/
extern void DelayNS(uint32 dly);
/*******************************************************
常用操作命令和参数定义
********************************************************/
#define DISPON 0x3f /*显示on */
#define DISPOFF 0x3e /*显示off */
#define DISPFIRST 0xc0 /*显示起始行定义 */
#define SETX 0xb8 /*X定位设定指令(页) */
#define SETY 0x40 /*Y定位设定指令(列) */
#define Lcdbusy 0x80 /*LCM忙判断位 */
#define para1 0x40; /*列开始*/
/*****************************************************************
O_X: 在显示字符时定义为行地址: 0~7,在绘点显示时定义为行地址(0-63)
O_Y: 列地址(0~127)
com: 指令码寄存器
dat1: 数据寄存器
******************************************************************/
unsigned int O_X,O_Y,com,dat1;
/*****************************************************************
code_1:字表行号
count1:页地址
******************************************************************/
unsigned char code_1,count1;
unsigned char cbyte;
//unsigned char col,row,cbyte,keyd,t,Signal; //列y,行(页)x,输出数据;keyd为键值;t为数组下标;Signal为触发传感器的编号
/*****************************************************************
定义0--9的字符数组
******************************************************************/
unsigned char writeCH[9][8]={
0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00, /*"1"=11h*/
0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00, /*"2"=12h*/
0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00, /*"3"=13h*/
0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00, /*"4"=14h*/
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, /*"5"=15h*/
0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00, /*"6"=16h*/
0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00, /*"7"=17h*/
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, /*"8"=18h*/
0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00, /*"9"=19h*/
};
/*****************************************************************
定义a--z的字符数组
******************************************************************/
unsigned char writeEH[26][8]={
0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00, /*"a"=41h*/
0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00, /*"b"=42h*/
0x00,0x38,0x44,0x44,0x44,0x28,0x00,0x00, /*"c"=43h*/
0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00, /*"d"=44h*/
0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00, /*"e"=45h*/
0x00,0x00,0x08,0x7E,0x09,0x02,0x00,0x00, /*"f"=46h*/
0x00,0x0C,0x52,0x52,0x4C,0x3E,0x00,0x00, /*"g"=47h*/
0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00, /*"h"=48h*/
0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00, /*"i"=49h*/
0x00,0x20,0x40,0x44,0x3D,0x00,0x00,0x00, /*"j"=4Ah*/
0x00,0x00,0x7F,0x10,0x28,0x44,0x00,0x00, /*"k"=4Bh*/
0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00, /*"l"=4Ch*/
0x00,0x7C,0x04,0x78,0x04,0x78,0x00,0x00, /*"m"=4Dh*/
0x00,0x7C,0x08,0x04,0x04,0x78,0x00,0x00, /*"n"=4Eh*/
0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00, /*"o'=4Fh*/
0x00,0x7E,0x0C,0x12,0x12,0x0C,0x00,0x00, /*"p"=50h*/
0x00,0x0C,0x12,0x12,0x0C,0x7E,0x00,0x00, /*"q"=51h*/
0x00,0x7C,0x08,0x04,0x04,0x08,0x00,0x00, /*"r"=52h*/
0x00,0x58,0x54,0x54,0x54,0x64,0x00,0x00, /*"s"=53h*/
0x00,0x04,0x3F,0x44,0x40,0x20,0x00,0x00, /*"t"=54h*/
0x00,0x3C,0x40,0x40,0x3C,0x40,0x00,0x00, /*"u"=55h*/
0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00, /*"v"=56h*/
0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00, /*"w"=57h*/
0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00, /*"x"=58h*/
0x00,0x1C,0xA0,0xA0,0x90,0x7C,0x00,0x00, /*"y"=59h*/
0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00, /*"z"=5Ah*/
};
/* 西文字符库定义 */
unsigned char CHTAB[62][8]={
0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00, /*"0"=10h*/
0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00, /*"1"=11h*/
0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00, /*"2"=12h*/
0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00, /*"3"=13h*/
0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00, /*"4"=14h*/
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, /*"5"=15h*/
0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00, /*"6"=16h*/
0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00, /*"7"=17h*/
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, /*"8"=18h*/
0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00, /*"9"=19h*/
0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x00, /*"A"=21h*/
0x00,0x41,0x7F,0x49,0x49,0x36,0x00,0x00, /*"B"=22h*/
0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00, /*"C"=23h*/
0x00,0x41,0x7F,0x41,0x41,0x3E,0x00,0x00, /*"D"=24h*/
0x00,0x7F,0x49,0x49,0x49,0x49,0x00,0x00, /*"E"=25h*/
0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00, /*"F"=26h*/
0x00,0x3E,0x41,0x41,0x49,0x7A,0x00,0x00, /*"G"=27h*/
0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00, /*"h"=28h*/
0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00, /*"I"=29h*/
0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00, /*"J"=2Ah*/
0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00, /*"K"=2Bh*/
0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00, /*"L"=2Ch*/
0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00, /*"M"=2Dh*/
0x00,0x7F,0x06,0x08,0x30,0x7F,0x00,0x00, /*"N"=2Eh*/
0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00, /*"O"=2Fh*/
0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00, /*"P"=30h*/
0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00, /*"Q"=31h*/
0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00, /*"R"=32h*/
0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00, /*"S"=33h*/
0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00, /*"T"=34h*/
0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00, /*"U"=35h*/
0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00, /*"V"=36h*/
0x00,0x7F,0x20,0x18,0x20,0x7F,0x00,0x00, /*"W"=37h*/
0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00, /*"X"=38h*/
0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00, /*"Y"=39h*/
0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00, /*"Z"=3Ah*/
0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00, /*"a"=41h*/
0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00, /*"b"=42h*/
0x00,0x38,0x44,0x44,0x44,0x28,0x00,0x00, /*"c"=43h*/
0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00, /*"d"=44h*/
0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00, /*"e"=45h*/
0x00,0x00,0x08,0x7E,0x09,0x02,0x00,0x00, /*"f"=46h*/
0x00,0x0C,0x52,0x52,0x4C,0x3E,0x00,0x00, /*"g"=47h*/
0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00, /*"h"=48h*/
0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00, /*"i"=49h*/
0x00,0x20,0x40,0x44,0x3D,0x00,0x00,0x00, /*"j"=4Ah*/
0x00,0x00,0x7F,0x10,0x28,0x44,0x00,0x00, /*"k"=4Bh*/
0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00, /*"l"=4Ch*/
0x00,0x7C,0x04,0x78,0x04,0x78,0x00,0x00, /*"m"=4Dh*/
0x00,0x7C,0x08,0x04,0x04,0x78,0x00,0x00, /*"n"=4Eh*/
0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00, /*"o'=4Fh*/
0x00,0x7E,0x0C,0x12,0x12,0x0C,0x00,0x00, /*"p"=50h*/
0x00,0x0C,0x12,0x12,0x0C,0x7E,0x00,0x00, /*"q"=51h*/
0x00,0x7C,0x08,0x04,0x04,0x08,0x00,0x00, /*"r"=52h*/
0x00,0x58,0x54,0x54,0x54,0x64,0x00,0x00, /*"s"=53h*/
0x00,0x04,0x3F,0x44,0x40,0x20,0x00,0x00, /*"t"=54h*/
0x00,0x3C,0x40,0x40,0x3C,0x40,0x00,0x00, /*"u"=55h*/
0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00, /*"v"=56h*/
0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00, /*"w"=57h*/
0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00, /*"x"=58h*/
0x00,0x1C,0xA0,0xA0,0x90,0x7C,0x00,0x00, /*"y"=59h*/
0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00, /*"z"=5Ah*/
};
/* 中文字符库定义 */
unsigned char CCTAB[16][8]={
0x82,0x8A,0x92,0xB2,0x02,0xA7,0x92,0x5E, /*蓬90 = 00H*/
0x2A,0xAF,0x2A,0x5A,0x4A,0x83,0x82,0x00,
0x00,0x80,0x40,0x3F,0x41,0x90,0x95,0x95,
0x95,0xFF,0x95,0x95,0x95,0xD0,0x40,0x00,
0x80,0x64,0x24,0x24,0x3F,0x24,0xA6,0x64, /*勃90 = 01H*/
0x20,0x20,0xFF,0x20,0x20,0xF0,0x20,0x00,
0x00,0x08,0x49,0x89,0x7D,0x0B,0x89,0x40,
0x30,0x0E,0x41,0x80,0x40,0x3F,0x00,0x00,
0x40,0x42,0x44,0xCC,0x00,0x20,0x22,0xE2, /*远90 = 02H*/
0x22,0x22,0xE2,0x23,0x32,0x20,0x00,0x00,
0x00,0x40,0x20,0x1F,0x20,0x50,0x4C,0x43,
0x40,0x40,0x47,0x48,0x48,0x6E,0x20,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F, /*大90 = 03H*/
0xA0,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
0x00,0x40,0x40,0x20,0x10,0x0C,0x03,0x00,
0x01,0x06,0x08,0x10,0x20,0x60,0x20,0x00
};
/*============================================================
* 函 数 名: sendData
* 参 数:data
* 功能描述:
* 通过LPC2146,的GPIO口模拟并行口,与LCM模块通信
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/10
=============================================================*/
void sendData(unsigned char data)
{
IO0DIR=0x007F8000; //P0.15---P0.22 作为输出
IO0SET =(data<<15); // 并行发送数据给LCD,使用GPIO:P0.15---P0.22
// returnVal = ((IO0PIN>>15 ) & 0xff);
}
/*============================================================
* 函 数 名: WrcmdL
* 参 数:x
* 参数说明:x为写入的命令
* 功能描述:
* 写命令到左屏
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/19
==============================================================*/
void WrcmdL(unsigned char x)
{
//左屏
IO1SET =0x00020000; //CS1=1
IO1CLR =0x00010000; //CS2=0
DelayNS(1);
//busy()
IO1CLR =0x00040000; //p1.18 为低; D/I=0 /命令操作
IO1CLR =0x00080000; //p1.19 为低 R/W=0 /写输出
//命令输出到数据口
sendData(x);
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
DelayNS(0);
IO1CLR =0X00400000; //E=0
IO0CLR =~x & 0x007f8000;
IO0DIR=0x00000000; //P0.15---P0.22 作为输入
}
/*============================================================
* 函 数 名: WrcmdR
* 参 数:x
* 参数说明:x为写入的命令
* 功能描述:
* 写命令到右屏
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/19
==============================================================*/
void WrcmdR(unsigned char x)
{
//右屏
IO1CLR =0x00020000; //p1.17 为低; CS1=0
IO1SET =0x00010000; //p1.16 为高 CS2=1
//busy ()
DelayNS(1);
//命令输出到数据口
sendData(x);
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
DelayNS(0);
IO1CLR =0X00400000; //E=0
IO0CLR =~x & 0x007f8000;
IO0DIR=0x00000000; //P0.15---P0.22 作为输入
}
/*============================================================
* 函 数 名: NWrdataL
* 参 数:x
* 参数说明:x为写入数据
* 功能描述:
* 写数据到左屏
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/19
==============================================================*/
void NWrdataL(unsigned char x)
{
// 左屏
IO1SET =0x00020000; //CS1=1
IO1CLR =0x00010000; //CS2=0
DelayNS(1);
// busy()
IO1SET =0x00040000; //p1.18 为低; D/I=1
IO1CLR =0x00080000; //p1.19 为低 R/W=0 /写输出
//数据输出到数据口
sendData(x);
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
DelayNS(0);
IO1CLR =0X00400000; //E=0
IO0CLR =~x & 0x007f8000;
IO0DIR=0x00000000; //P0.15---P0.22 作为输入
}
/*============================================================
* 函 数 名: NWrdataR
* 参 数:x
* 参数说明:x为写入数据
* 功能描述:
* 写数据到右屏
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/19
==============================================================*/
void NWrdataR(unsigned char x)
{
//右屏
IO1CLR =0x00020000; //p1.17 为低; CS1=0
IO1SET =0x00010000; //p1.16 为高 CS2=1
// busy() wtcom();
DelayNS(1);
IO1SET =0x00040000; //p1.18 为低; D/I=1 //p_di=1; // 数据输出
IO1CLR =0x00080000; //p1.19 为低 R/W=0 /写输出
//数据输出到数据口
sendData(x);
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
DelayNS(0);
IO1CLR =0X00400000; //E=0
IO0CLR =~x & 0x007f8000;
IO0DIR=0x00000000; //P0.15---P0.22 作为输入
}
/*============================================================
* 函 数 名: RddataL
* 参 数:Null
* 功能描述:
* 读左屏数据
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/18
==============================================================*/
void RddataL(void)
{
IO0SET =0x007f8000; //(data<<15);
// 左屏
IO1SET =0x00020000; //CS1=1
IO1CLR =0x00010000; //CS2=0
//wtcom(); // waitting for enable
IO1SET =0x00040000; //p1.18 为低; D/I=1
IO1SET =0x00080000; //p1.19 为低 R/W=1
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
cbyte = ((IO0PIN>>15 ) & 0xff);// Datalcm; //虚读一次
//Elcm = 0;
DelayNS(0);
IO1CLR =0X00400000; //E=0
//Locatexy(); //坐标定位,返回时保留分区状态不变
//Datalcm=0xFF;
IO0SET =0x007f8000; //(data<<15);
// 左屏
IO1SET =0x00020000; //CS1=1
IO1CLR =0x00010000; //CS2=0
IO1SET =0x00040000; //p1.18 为低; D/I=1
IO1SET =0x00080000; //p1.19 为低 R/W=1
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
cbyte = ((IO0PIN>>15 ) & 0xff);// Datalcm; /再读一次
DelayNS(0);
IO1CLR =0X00400000; //E=0
}
/*============================================================
* 函 数 名: RddataR
* 参 数:Null
* 功能描述:
* 读右屏数据
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/18
==============================================================*/
void RddataR(void)
{
IO0SET =0x007f8000; //(data<<15);
// 右屏
IO1CLR =0x00020000; //CS1=0
IO1SET =0x00010000; //CS2=1
//wtcom(); // waitting for enable
IO1SET =0x00040000; //p1.18 为低; D/I=1
IO1SET =0x00080000; //p1.19 为低 R/W=1
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
cbyte = ((IO0PIN>>15 ) & 0xff);// Datalcm; //虚读一次
DelayNS(0);
IO1CLR =0X00400000; //E=0
IO0SET =0x007f8000; //(data<<15);
// 右屏
IO1CLR =0x00020000; //CS1=0
IO1SET =0x00010000; //CS2=1
IO1SET =0x00040000; //p1.18 为低; D/I=1
IO1SET =0x00080000; //p1.19 为低 R/W=1
IO1SET =0x00400000; //E = 1 下降沿,写入到LCM
cbyte = ((IO0PIN>>15 ) & 0xff);// Datalcm; /再读一次
DelayNS(0);
IO1CLR =0X00400000; //E=0
}
/*============================================================
* 函 数 名: ClearLCD
* 参 数:Null
* 功能描述:
* 清除LCD
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/18
==============================================================*/
void ClearLCD(void)
{
for(count1=0xb8;count1!=0xcf;count1++) //以页地址作为循环量
{
//count1 为页地址变量
WrcmdL(count1); //写左指令
WrcmdR(count1); //写右指令2007-9-20 14:14
//列地址设置
WrcmdL(0xc0); //写左指令
WrcmdR(0xc0); //写右指令
for(com=0;com<64;com++) //清除所有HD61202的内部RAM单元
{
NWrdataL(0x00);
NWrdataR(0x00);//data1=0x00;
}
}
}
/*============================================================
* 函 数 名: InitLCD
* 参 数:Null
* 功能描述:
* 初始化LCD,完成LCD的 复位,及相关命令
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/17
============================================================*/
void InitLCD()
{
IO1CLR =0x01000000; //res=0 复位信号为低
DelayNS(300);
IO1SET =0x01000000; //RES = 1 复位信号为高
//显示起始行为"0"
WrcmdL(0xc0);
DelayNS(1);
WrcmdR(0xc0);
DelayNS(0);
//开显示
WrcmdL(0x3f);
DelayNS(1);
WrcmdR(0x3f);
}
/*==========================================================================
* 函 数 名: CW_PR
* 参 数:Null
* 功能描述:
* 写入西文字符函数
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/18
===============================================================================*/
void CW_PR()
{
unsigned char j;
j=para1;
com=O_Y|0xb8;
WrcmdL(com);
DelayNS(5);
WrcmdR(com);
O_Y=j;
if(O_X<O_Y)
{
com=O_X;
//PR1();
WrcmdL(com);
O_Y=1;
}
else
{
DelayNS(5);
com=O_X-j;
//PR4();
WrcmdR(com);
DelayNS(1);
O_Y=0;
}
com=com&0x3f;
for(count1=0;count1<8;count1++)
{
dat1=CHTAB[code_1][count1];
if(O_Y==1)
{
//PR2();
NWrdataL(dat1);
DelayNS(5);
}
else
{
//DelayNS(5);
NWrdataR(dat1);
}
com++;
if(com==j)
{
if(O_X==1)
{
com=0x40;
//PR4();
WrcmdR(com);
DelayNS(10);
O_Y=0;
}
else
{
return;
}
}
}
}
/*==========================================================================
* 函 数 名: W_DOT
* 参 数:Null
* 功能描述:
* 绘点函数
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/18
* 说 明:暂未使用
===============================================================================*/
void W_DOT()
{
unsigned int j;
j=para1;
com=O_Y/8;
code_1=O_Y%8;
com=com|0xb8;
//PR1();
//PR4();
WrcmdL(com);
WrcmdR(com);
O_Y=1;
for(;code_1!=0;)
{
O_Y=O_Y*2;
code_1--;
}
if(O_X<j)
{
com=O_X|0x40;
//PR1();
//PR3();
//PR3();
//PR1();
WrcmdL(com);
RddataL();
RddataL();
WrcmdL(com);
dat1=dat1|O_Y;
//PR2();
NWrdataL(dat1);
}
else
{
com=O_X-j|0x40;
// PR4();
//PR6();
//PR6();
//PR4();
WrcmdR(com);
RddataR();
RddataR();
WrcmdR(com);
dat1=dat1|O_Y;
//PR5();
NWrdataR(dat1);
}
}
/*==========================================================================
* 函 数 名: CCW_PR
* 参 数:Null
* 功能描述:
* 写中文字符
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/18
* 说 明:暂未使用
===============================================================================*/
void CCW_PR()
{
unsigned char i,j,k;
i=0;
j=para1;
loop: com=O_Y|0xb8;
//PR1();
//PR4();
WrcmdL(com);
WrcmdR(com);
if(O_X<j)
{
com=O_X|0x40;
//PR1();
WrcmdL(com);
k=1;
}
else
{
com=O_X-j|0x40;
//PR4();
WrcmdR(com);
k=0;
}
com=com&0x3f;
for(count1=i;count1<i+16;count1++)
{
dat1=CCTAB[code_1][count1];
if(k==1)
{
//PR2();
NWrdataL(dat1);
}
else
{
//PR5();
NWrdataR(dat1);
}
com++;
if(com==j)
{
if(k==1)
{
com=0;
// PR4();
WrcmdR(com);
k=0;
}
else
{
goto loop2;
}
}
}
loop2: if(i==0)
{
i=16;
O_Y++;
if(O_Y==8)
{
return;
}
else
{
goto loop;
}
}
}
/*==========================================================================
* 函 数 名: WriteChar
* 参 数:Null
* 功能描述:
* 显示西文字符函数
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/19
* 修改记录:
* 1) com=O_X;修改为: com=O_X|0x40;
* 2) com=O_X-j;修改为:com=O_X-j|0x40; // sha zq 2007-9-20 11:02
* 3) 将 1),2)中的 0x40 改为:0xc0 //sha zq 2007-9-20 14:35
*修改说明: 1. 用原来的方法,自定义行么问题,而列显示不正常,修改后正常。
2. 改为0xc0后,矫正了列显示错位
===============================================================================*/
void WriteChar()
{
unsigned char j;
j=para1;
com=O_Y|0xb8;
WrcmdL(com);
DelayNS(1);
WrcmdR(com);
O_Y=j;
if(O_X<O_Y)
{
//com=O_X;
com=O_X|0x40;
WrcmdL(com);
O_Y=1;
}
else
{
//com=O_X-j;
com=O_X-j|0x40;
WrcmdR(com);
// DelayNS(1);
O_Y=0;
}
com=com&0x3f;
for(count1=0;count1<8;count1++)
{
dat1=CHTAB[code_1][count1];
if(O_Y==1)
{
NWrdataL(dat1);
DelayNS(1);
}
else
{
DelayNS(1);
NWrdataR(dat1);
}
com++;
if(com==j)
{
if(O_X==1)
{
com=0x40;
WrcmdR(com);
DelayNS(1);
O_Y=0;
}
else
{
return;
}
}
}
}
/*==========================================================================
* 函 数 名: WriteCharE
* 参 数:Null
* 功能描述:
* 显示西文字符函数,显示英文字符
* 返 回 值:Null
* 作 者:Sha zq 日期:2007-9-20 16:37
* 修改记录:
===============================================================================*/
void WriteCharE()
{
unsigned char j;
j=para1;
com=O_Y|0xb8;
WrcmdL(com);
DelayNS(1);
WrcmdR(com);
O_Y=j;
if(O_X<O_Y)
{
//com=O_X;
com=O_X|0x40;
WrcmdL(com);
O_Y=1;
}
else
{
//com=O_X-j;
com=O_X-j|0x40;
WrcmdR(com);
// DelayNS(1);
O_Y=0;
}
com=com&0x3f;
for(count1=0;count1<8;count1++)
{
dat1=writeEH[code_1][count1];
if(O_Y==1)
{
NWrdataL(dat1);
DelayNS(1);
}
else
{
DelayNS(1);
NWrdataR(dat1);
}
com++;
if(com==j)
{
if(O_X==1)
{
com=0x40;
WrcmdR(com);
DelayNS(1);
O_Y=0;
}
else
{
return;
}
}
}
}
/*============================================================
* 函 数 名:displayNumber
* 参 数:row, col, no
* 参数说明:row取值范围 0--7,col 取值范0--15, no 取值范围:0--9
* 功能描述:
* 用来显示0--9的数字,
* 返 回 值:Null
* 作 者:Sha zq 日期:2007/09/19
============================================================*/
void displayNumber(unsigned char row, unsigned char col, unsigned char no)
{
O_Y=row;
O_X=col*8;
code_1=no;
WriteChar();
}
/*============================================================
* 函 数 名:displayEnglishLow
* 参 数:row, col, no
* 参数说明:row取值范围 0--7,col 取值范0--15, no 取值范围:0--25
* 功能描述:
* 用来显示0--9的数字,
* 返 回 值:Null
* 作 者:Sha zq 日期:2007-9-20 16:38
============================================================*/
void displayEnglishLow(unsigned char row, unsigned char col, unsigned char no)
{
O_Y=row;
O_X=col*8;
code_1=no;
WriteCharE();
}
已经在LPC2146 上调试通过,效果良好 呵呵,米前只能显示 英文字符 呵呵
有我问题可以发邮件和我联系