📄 lcd240.c
字号:
sDelay(5);
pLcdCd=1;
}
//---------------------------------------------
/*
//一个数据读出函数
uchar LcmReadData( void )
{
uchar uData;
uData = LcmDataPort;
return uData;
}
*/
uchar LcmReadData(void)
{
uchar uData;
CheckRWCD();
sDelay(5);
pLcdCd=0;
sDelay(5);
pLcdRd=0;
sDelay(5);
uData=PORTD;
sDelay(5);
LATC|=0x38;
return uData;
}
//---------------------------------------------
//无参数指令写入函数
void LcmWriteCommand(uchar Command)
{
CheckRWCD(); //检测指令读写状态
TRISD=0x00;
sDelay(5);
pLcdCd=1;
sDelay(5);
pLcdWr=0;
sDelay(5);
LcdDataPort=Command;
sDelay(5);
pLcdWr=1;
sDelay(5);
pLcdCd=1;
}
//单参数指令写入函数
void LcmWriteCommandWith1Par(uchar Parameter,uchar Command)
{
LcmWriteData(Parameter);
LcmWriteCommand(Command);
}
//双参数指令写入函数
void LcmWriteCommandWith2Par(uchar Parameter1,uchar Parameter2,uchar Command)
{
LcmWriteData(Parameter1);
LcmWriteData(Parameter2);
LcmWriteCommand(Command);
}
//LCM初始化函数
void LcmInit( void )
{
LcmWriteCommandWith2Par(0x00,0x00,0x40); //设置文本显示区首地址
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41); //设置文本显示区宽度
LcmWriteCommandWith2Par(0x00,0x08,0x42); //设置图形显示区首地址0x0800
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43); //设置图形显示区宽度
LcmWriteCommand(0xA7); //设置光标形状 8x8方块
LcmWriteCommand(0x81); //显示方式设置 文本xor图形(异或)
LcmWriteCommand(0x98); //图形开 //显示开关设置 0x9C=文本开,图形开,光标闪烁关
}
//清显示存储器函数
void LcmClear( uchar FillByte )
{
uint i = 8192; //此处仅清8K RAM,如果您32K RAM都使用,请修改i=32768(后面也要改)
if(FillByte) //注意如果填充ff时,如果RAM仅使用了8K,那么8192次会写入到文本区
{ //会形成乱码.(24064出厂时候默认将R7断开,即默认使用8KRAM)
i -= 2*1024;//所以如果填入ff时候要扣除2K的文本区
LcmWriteCommandWith2Par(0x00,0x08,0x24); //填充0xff时候要在图形区
}
else
LcmWriteCommandWith2Par(0x00,0x00,0x24);
LcmWriteCommand(0xB0); //进入自动写
while(i--)
{
CheckAutoWrite();
LcmWriteData( FillByte );
}
LcmWriteCommand(0xB2); //退出自动写
}
//设定显示地址函数
void LocateXY(uchar x,uchar y,uchar mode)
{
uint temp;
temp= LcmLengthDots/8*y + x;
if(mode) //mode=1为Graphic
{ //如果图形模式要加上图形区首地址0x0800
temp+=0x0800;
}
LcmWriteCommandWith2Par(temp&0xff,temp/256,0x24);
}
void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode,unsigned char dispmode) //图形方式显示1个汉字
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+(unsigned int)lin*LineChar+ column; //图形显示RAM区为0800开始
for(i=0;i<16;i++)
{
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
if(dispmode) LcmWriteCommandWith1Par(~HZTable[hzcode][i*2], 0xc0); //数据写地址+1
else LcmWriteCommandWith1Par( HZTable[hzcode][i*2], 0xc0); //数据写地址+1
if(dispmode)LcmWriteCommandWith1Par(~HZTable[hzcode][i*2+1], 0xc4); //数据写地址不变
else LcmWriteCommandWith1Par( HZTable[hzcode][i*2+1], 0xc4); //数据写地址不变
StartAddr=StartAddr + LineChar;
}
}
void ShowChar(unsigned char lin,unsigned char column,unsigned int hzcode,unsigned char dispmode) //图形方式显示1个英文字符
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+(unsigned int)lin*LineChar+ column; //图形显示RAM区为0800开始
for(i=0;i<16;i++)
{
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
if(dispmode&0x01)LcmWriteCommandWith1Par( 0x00, 0xc4); //数据写地址不变
else if(dispmode&0x02)LcmWriteCommandWith1Par(~CharTable[hzcode][i], 0xc4); //数据写地址不变
else LcmWriteCommandWith1Par(CharTable[hzcode][i], 0xc4); //数据写地址不变
StartAddr=StartAddr + LineChar;
}
}
void line(unsigned char lin) //图形方式画一条线
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+(unsigned int)lin*LineChar; //图形显示RAM区为0800开始
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
for(i=0;i<LineChar;i++)
{
LcmWriteCommandWith1Par( 0xFF, 0xc0); //数据写地址不变
}
}
void sInitPort(void)
{
SSPCON1=0;
SSPCON2=0;
CCP1CON=0;
CCP2CON=0;
LVDCON=0x15; // B'00010101' ;2.7V 低电压监测功能
INTCON2=0x00; //B'10000100' ;TMR0中断优先级=1
INTCON3=0x00; //B'00000000' ;INT1/2中断DIS
ADCON1=0x8E; //82h;设置为A口 RA0为AD口,其他为数字口
TRISA=0x7F; //RA0-6为输入
TRISB=0xFF;
TRISC=0x81; //RC7 RC0 Input
TRISD=0xFF; //
TRISE=0x00; //输出
T1CON=0x00; //B'00001010' ;定时器1使用外部时钟
T2CON=0x00; //B'00111100' ;1:8 T2ON
PIR1=0x00;
PIR2=0x00;
IPR1=0xFF;
IPR2=0xFF;
PIE1=0x00;//B'00000011' ;RCIE TXIE TMR2IE Enable
PIE2=0x00;//B'00000000' ;TMR3 enable
//bsf RCON,IPEN ; 使能优先级中断
TMR0H=0x00;
TMR0L=0x00;
INTCON=0x00; //B'00100000' ;并开TMR0中断
T0CON=0x00; // B'10000010' ;1:8 TMR0 in timer mode
//B'10000101' ;1:64 TMR0 in timer mode 0.25us*64(prescale)*250=4ms
T1CONbits.TMR1ON=1; //T1CON, Enables Timer1
// bsf INTCON,GIE ;打开高优先级中断
}
//主函数
void main(void)
{
uchar i; //,rLine,rHzIndex;
INTCON=0x00;
sInitPort();
pBackLight=1;
LocateXY(0,0,Graphic);
LcmInit();
while(1)
{
LcmClear(0);
LocateXY(0,0,Graphic); //TXT
//--------------------------------------------------------------------------------------------
//--试验频率次分钟占空比 类 型 常 开 闭 路 数 检 测 正 粘 连 断 温 度 触 点 继 续 停 止 状 态 转 换 ℃ ------
//---0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
//-------试验频率:90次/分钟 占空比:15%------------------------------
ShowHZ(0,0,0,0);
ShowHZ(0,2,1,0);
ShowHZ(0,4,2,0);
ShowHZ(0,6,3,0);
ShowChar(0,8,10,0); //: 0=正常显示 1=空显示 2=反显示
ShowChar(0,9,9,0); //9
ShowChar(0,10,0,0); //0
ShowHZ(0,11,4,0);
ShowChar(0,13,11,0); // /
ShowHZ(0,14,5,0);
ShowHZ(0,16,6,0);
ShowChar(0,18,0,1); //空显示
ShowHZ(0,19,7,0);
ShowHZ(0,21,8,0);
ShowHZ(0,23,9,0);
ShowChar(0,25,10,0); //:
ShowChar(0,26,1,0);
ShowChar(0,27,5,0);
ShowChar(0,28,12,0);
//-------------------------------------
//-------试验类型:常开型 试验路数:3------------------------------
ShowHZ(16,0,0,0);
ShowHZ(16,2,1,0);
ShowHZ(16,4,10,0);
ShowHZ(16,6,11,0);
ShowChar(16,8,10,0); //:
ShowHZ(16,9,12,0);
ShowHZ(16,11,13,0);
ShowHZ(16,13,11,0);
ShowChar(16,15,0,1);//空显示
ShowChar(16,16,0,1);//空显示
ShowChar(16,17,0,1);//空显示
ShowChar(16,18,0,1);//空显示
ShowHZ(16,19,0,0);
ShowHZ(16,21,1,0);
ShowHZ(16,23,15,0);
ShowHZ(16,25,16,0);
ShowChar(16,27,10,0); //:
ShowChar(16,28,3,0);
//-------------------------------------
line(34);
line(35);
line(36);
ShowChar(39,0,13,0); //N
ShowChar(39,1,14,0); //o
ShowChar(39,2,15,0); //.
ShowChar(39,3,0,1); //空显示
ShowHZ(39,4,23,0);
ShowHZ(39,6,24,0);
ShowChar(39,8,0,1);//空显示
ShowChar(39,9,0,1);//空显示
ShowHZ(39,10,17,0); //检测状态
ShowHZ(39,12,18,0);
ShowHZ(39,14,31,0);
ShowHZ(39,16,32,0);
ShowChar(39,18,0,1); //预留2个汉字空间 //空显示
ShowChar(39,19,0,1); //空显示
ShowChar(39,20,0,1); //空显示
ShowChar(39,21,0,1); //空显示
ShowHZ(39,22,17,0); //检测次数
ShowHZ(39,24,18,0);
ShowHZ(39,26,4,0);
ShowHZ(39,28,16,0);
//-------------------------------------
line(60);
ShowChar(65,0,1,0); //1#
ShowChar(65,1,16,0);
ShowChar(65,2,0,1); //空显示
ShowChar(65,3,8,0);
ShowChar(65,4,8,0);
ShowChar(65,5,8,0);
ShowChar(65,6,15,0); //.
ShowChar(65,7,8,0);
ShowHZ(65,8,35,0); //℃
ShowHZ(65,10,17,0); //检测正常
ShowHZ(65,12,18,0);
ShowHZ(65,14,19,0);
ShowHZ(65,16,12,0);
ShowChar(65,18,0,1);//空显示
ShowChar(65,19,0,1);//空显示
ShowChar(65,20,0,1);//空显示
ShowChar(65,21,0,1);//空显示
ShowChar(65,22,8,0);
ShowChar(65,23,8,0);
ShowChar(65,24,8,0);
ShowChar(65,25,8,0);
ShowChar(65,26,8,0);
ShowChar(65,27,8,0);
ShowChar(65,28,8,0);
ShowChar(65,29,8,0);
//-------------------------------------
ShowChar(85,0,2,0); //2#
ShowChar(85,1,16,0);
ShowChar(85,2,0,1);//空显示
ShowChar(85,3,8,0);
ShowChar(85,4,8,0);
ShowChar(85,5,8,0);
ShowChar(85,6,15,0); //.
ShowChar(85,7,8,0);
ShowHZ(85,8,35,0); //℃
ShowHZ(85,10,17,0); //检测正常
ShowHZ(85,12,18,0);
ShowHZ(85,14,19,0);
ShowHZ(85,16,12,0);
ShowChar(85,18,0,1);//空显示
ShowChar(85,19,0,1);//空显示
ShowChar(85,21,0,1);//空显示
ShowChar(85,22,8,0);
ShowChar(85,23,8,0);
ShowChar(85,24,8,0);
ShowChar(85,25,8,0);
ShowChar(85,26,8,0);
ShowChar(85,27,8,0);
ShowChar(85,28,8,0);
ShowChar(85,29,8,0);
//-------------------------------------
ShowChar(105,0,3,0); //3#
ShowChar(105,1,16,0);
ShowChar(105,2,0,1); //空显示
ShowChar(105,3,8,0);
ShowChar(105,4,8,0);
ShowChar(105,5,8,0);
ShowChar(105,6,15,0); //.
ShowChar(105,7,8,0);
ShowHZ(105,8,35,0); //℃
ShowHZ(105,10,12,1); //常开触点断开 ShowHZ(105,10,17); //检测正常
ShowHZ(105,12,13,1); // ShowHZ(105,12,18);
ShowHZ(105,14,25,1); // ShowHZ(105,14,19);
ShowHZ(105,16,26,1); // ShowHZ(105,16,12);
ShowHZ(105,18,22,1); // ShowEmpty(105,18);
ShowHZ(105,20,13,1); // ShowEmpty(105,19);
// ShowEmpty(105,20);
// ShowEmpty(105,21);
ShowChar(105,22,8,0);
ShowChar(105,23,8,0);
ShowChar(105,24,8,0);
ShowChar(105,25,8,0);
ShowChar(105,26,8,0);
ShowChar(105,27,8,0);
ShowChar(105,28,8,0);
ShowChar(105,29,8,0);
//-------------------------------------
while(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -