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

📄 lcd240.c

📁 用MCC18编写的240*128的LCD(T6963C)整个项目的测试文件
💻 C
📖 第 1 页 / 共 2 页
字号:
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 + -