📄 lcd.c
字号:
#include "52init.h"
#include "distable.h"
sbit LcdDI=P1^0;
sbit LcdRW=P1^1;
sbit LcdEN=P1^2;
sbit LcdCS1=P1^4;
sbit LcdCS2=P1^5;
sfr DatBus=0x80;
uchar xdata PicBuf[64];
uchar code EchoMenu[]={"Echo Cancel "};
uchar code EqMenu[] ={"Equilizer "};
uchar code FFTMenu[] ={"FFT Analyse "};
uchar code LMSMenu[] ={"LMS Analyse "};
void lcddelay(uchar delay_num) //22.1184 the loop time is 0.543us
{
uchar i,k; //delay_num 0.1ms/num
for(i=delay_num;i>0;i--)
{
for(k=100;k>0;k--)
{;}
}
}
void LcdChkBusy(void)
{
uchar CheckTmp;
DatBus=0xff;
LcdEN=1;
CheckTmp=DatBus;
CheckTmp&=0x80;
LcdEN=0;
lcddelay(1);
/*
while(CheckTmp==0x80)
{
DatBus=0xff;
LcdEN=1;
CheckTmp=DatBus;
CheckTmp&=0x80;
LcdEN=0;
}
*/
}
void LcdCmdWr(bit DispArea,uchar CmdP)
{
if(DispArea==0)
{
LcdCS1=1;
LcdCS2=0;
}
else
{
LcdCS1=0;
LcdCS2=1;
}
LcdDI=0;
LcdRW=1;
LcdChkBusy();
LcdRW=0;
DatBus=CmdP;
LcdEN=1;
LcdEN=0;
}
void LcdDatWr(bit DispArea,uchar DatP)
{
if(DispArea==0)
{
LcdCS1=1;
LcdCS2=0;
}
else
{
LcdCS1=0;
LcdCS2=1;
}
LcdDI=0;
LcdRW=1;
LcdChkBusy();
LcdDI=1;
LcdRW=0;
DatBus=DatP;
LcdEN=1;
LcdEN=0;
}
uchar LcdDatRd(bit DispArea)
{
uchar BufDatTmp;
if(DispArea==0)
{
LcdCS1=1;
LcdCS2=0;
}
else
{
LcdCS1=0;
LcdCS2=1;
}
LcdDI=0;
LcdRW=1;
LcdChkBusy();
LcdDI=1;
DatBus=0xff;
LcdEN=1;
BufDatTmp=DatBus;
LcdEN=0;
return(BufDatTmp);
}
void LcdInit(void)
{
LcdCmdWr(0,0xc0);
LcdCmdWr(1,0xc0);
LcdCmdWr(0,0x3f);
LcdCmdWr(1,0x3f);
}
void LcdClear(void)
{
uchar PageTmp,ColumnTmp,CmdTmp;
for(PageTmp=0;PageTmp<8;PageTmp++)
{
CmdTmp=PageTmp|0xb8;
LcdCmdWr(0,CmdTmp);
LcdCmdWr(1,CmdTmp);
LcdCmdWr(0,0x40);
LcdCmdWr(1,0x40);
for(ColumnTmp=0x0;ColumnTmp<0x40;ColumnTmp++)
{
LcdDatWr(0,0x00);
LcdDatWr(1,0x00);
}
}
}
void DisMod(uchar ColP,uchar ModP)
{
LcdCmdWr(0,0x40+ColP);
switch(ModP)
{
case 0:
LcdDatWr(0,0x00);
break;
case 1:
LcdDatWr(0,0x80);
break;
case 2:
LcdDatWr(0,0xc0);
break;
case 3:
LcdDatWr(0,0xe0);
break;
case 4:
LcdDatWr(0,0xf0);
break;
case 5:
LcdDatWr(0,0xf8);
break;
case 6:
LcdDatWr(0,0xfc);
break;
case 7:
LcdDatWr(0,0xfe);
break;
}
}
void PicFft(void)
{
uchar i,ii;
uchar ByteNum,ByteMod,RowTmp,CmdTmp;
for(i=0;i<64;i++)
{
ByteNum=PicBuf[i]>>3;
ByteMod=PicBuf[i]%8;
for(RowTmp=0;RowTmp<ByteNum;RowTmp++)
{
CmdTmp=(7-RowTmp)|0xb8;
LcdCmdWr(0,CmdTmp);
LcdCmdWr(0,0x40+i);
LcdDatWr(0,0xff);
}
if(ByteMod!=0)
{
CmdTmp=(7-ByteNum)|0xb8;
LcdCmdWr(0,CmdTmp);
DisMod(i,ByteMod);
}
else
{
if(ByteNum==0)
{CmdTmp=0xc0;}
}
for(ii=0xb8;ii<CmdTmp;ii++)
{
LcdCmdWr(0,ii);
LcdCmdWr(0,0x40+i);
LcdDatWr(0,0x00);
}
}
}
void DisChar(uchar PageAddrP,uchar RowAddrP,uint DisDatP)
{
uchar cc,PageTmp,RowTmp;
uint TabTmp;
PageTmp=PageAddrP|0xb8;
RowTmp =RowAddrP+0x40;
TabTmp =DisDatP-0x20;
TabTmp*=5;
LcdCmdWr(1,PageTmp);
LcdCmdWr(1,RowTmp);
for(cc=0;cc<5;cc++)
{
LcdDatWr(1,ziku[TabTmp+cc]);
}
}
void DisEcho(void)
{
uchar i,OffSetTmp;
for(i=0;i<12;i++)
{
OffSetTmp=i*5;
DisChar(0,OffSetTmp,EchoMenu[i]);
}
}
void DisEq(void)
{
uchar i,OffSetTmp;
for(i=0;i<12;i++)
{
OffSetTmp=i*5;
DisChar(2,OffSetTmp,EqMenu[i]);
}
}
void DisFFT(void)
{
uchar i,OffSetTmp;
for(i=0;i<12;i++)
{
OffSetTmp=i*5;
DisChar(4,OffSetTmp,FFTMenu[i]);
}
}
void DisLMS(void)
{
uchar i,OffSetTmp;
for(i=0;i<12;i++)
{
OffSetTmp=i*5;
DisChar(6,OffSetTmp,LMSMenu[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -