⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 单片机与DSP通信源程序
💻 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 + -