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

📄 ocmj4x8c.h

📁 广泛使用的液晶屏ocmj4x8c的驱动
💻 H
字号:



#define uint  unsigned int
#define uchar unsigned char
#define x1    0x80
#define x2    0x88
#define y     0x80
#define comm  0
#define dat   1

	//sbit cs   = P0^0;//pg1

	//sbit std  = P0^1;//pg0

	//sbit sclk = P0^2;//pg4

	//sbit psb  = P0^3; //pg2  //H=并口; L=串口;

	//sbit rst  = P0^4; //pg3  //Reset Signal 低电平有效
//#define  cs    PORTA.1
//#define  std   PORTA.0

//#define  cs    PORTA.1
//#define  std   PORTA.0 


#define  cs    PORTA.0
#define  std   PORTA.1 
#define  sclk  PORTA.4
#define  psb   PORTA.2
#define  rst   PORTA.3

void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);


static   unsigned char ram_add[]={0x00,0x80,0x90,0x88,0x98,0x00};
unsigned char   tab1[]={
"本系列中文模块内"
"任意位置反白显示"
"置二级字库,可在"
"使用更方便更灵活"
};
flash  unsigned char   main_pagedata[]={
"置数            "  //第一行
"已包袋数:       "  //第三行
"速度:    包/分"  //第二行
"袋长:    毫米"  //第四行
};

flash  unsigned char   set_pagedata[]={
" 基本参数设置 "  //第一行
"    下料设置    "  //第三行
"    电气参数    "  //第二行
"    张力设置    "  //第四行
};
flash  unsigned char   dianqi_pagedata[]={
" 电气参数设置 "  //第一行
"辊径:       毫米"  //第三行
"细分:       步  "  //第二行
"速比:     /    "  //第四行
};
flash  unsigned char   xialiao_pagedata[]={
"速度:     袋 /分"  //第一行
"下料:       圈  "  //第三行
"计数:       袋  "  //第二行
"下料速度:       "  //第四行
};
flash  unsigned char   gongyi_pagedata[]={
" 工艺参数设置 "  //第一行
"  袋长:     毫米"  //第三行
"  自动测量测袋长"  //第二行
"       保存     "  //第四行
};
flash  unsigned char   benji_pagedata[]={
" 本机参数设置 "  //第一行
"    工艺参数    "  //第三行
"    电气参数    "  //第二行
"    本机设置    "  //第四行
};    

flash  unsigned char   mima_pagedata[]={
"袋长:       毫米"  //第三行
"补偿:       毫米"  //第三行
"置数:       个  "//第三行
"间距:       毫米"  //第三行
};

flash  unsigned char   changgui_pagedata[]={
"袋长:       毫米"  //第三行
"补偿:       毫米"  //第三行
"置数:       个  "//第三行
"间距:       毫米"  //第三行
};

flash  unsigned char   test_pagedata[]={
"频率           "  //第一行
"ADC1:           "  //第三行
"速度            "  //第二行
"                "  //第四行
};
flash  unsigned char   zhangli_pagedata[]={
"起始位置:       "  //第三行
"起始力矩:       "  //第三行
"结束位置:       "//第三行
"结束力矩:       "  //第三行
};//起始位置和结束位置由adc1读出,张力点为  20  40  60  80  100
  //张力百分比为   (结束值-起始值)/(当前值-起始值)

/*------------将存在程序空间的字符串读取出来,防到tab1中---------*/
//strcpy_P(char* s1, PGM_P s2);

/*-----------------------------------*/
    
void mydelay (unsigned int us)   //delay time
{
  while(us--)  #asm("WDR");
}
void delay1 (unsigned int ms)
{
  unsigned int i,j;
  for(i=0;i<ms;i++)
     for(j=0;j<15;j++)
          mydelay(1);
}

   


/*------------------初始化-----------------*/
void init_lcd (void)
{
  rst=1;
  psb=0;
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  mydelay (100);
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
}

/*---------------设置显示位置(修改ram指针)----------------*/

void setxy(unsigned char first_line,unsigned char first_colume )
{

unsigned char i;
unsigned char temp;
temp=ram_add[first_line]+first_colume;

wr_lcd (comm,temp);
for(i=0;i<=50;i++);

}
/*---------------显示一个字符(将1个字符码写入ram)----------------*/
void disp_c (unsigned char c)
{
  
    wr_lcd (dat,c);
    
}

/*---------------显示一个汉字(将2个字符码写入ram)----------------*/
void disp_hz (unsigned char c[])
{
  
    wr_lcd (dat,c[0]);
    wr_lcd (dat,c[1]);
}


/*---------------显示汉字或字符----------------*/
void chn_disp (unsigned char  *chn)
{
  unsigned char i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
  }
}
/*-----------上半屏显示汉字或字符------------*/
void chn_disp1 (unsigned char  *chn)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  j=0;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
  wr_lcd (comm,0x90);
  j=1;
  for (i=0;i<16;i++)
  wr_lcd (dat,chn[j*16+i]);
}
/*----------------显示图形-----------------*/
void img_disp (unsigned char  *img)
{
  unsigned char i,j;
  for(j=0;j<32;j++)
  {
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j);
      wr_lcd (comm,x1+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,img[j*16+i*2]);
      wr_lcd (dat,img[j*16+i*2+1]);
    }
  }
  for(j=32;j<64;j++)
  {
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j-32);
      wr_lcd (comm,x2+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,img[j*16+i*2]);
      wr_lcd (dat,img[j*16+i*2+1]);
    }
  }
  wr_lcd (comm,0x36);
}
/*-------------下半屏显示图形--------------*/
void img_disp1 (unsigned char  *img)
{
  unsigned char i,j;
  for(j=0;j<32;j++)
  {
    for(i=0;i<8;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y+j);
      wr_lcd (comm,x2+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,img[j*16+i*2]);
      wr_lcd (dat,img[j*16+i*2+1]);
    }
  }
  wr_lcd (comm,0x36);
}
/*--------------显示点阵----------------*/
void lat_disp (unsigned char data1,unsigned char data2)
{
  unsigned char i,j,k,x;
  x=x1;
  for(k=0;k<2;k++)
  {
    for(j=0;j<16;j++)
    {
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data1);
        wr_lcd (dat,data1);
      }
      for(i=0;i<8;i++)
      {
        wr_lcd (comm,0x34);
        wr_lcd (comm,y+j*2+1);
        wr_lcd (comm,x+i);
        wr_lcd (comm,0x30);
        wr_lcd (dat,data2);
        wr_lcd (dat,data2);
      }
    }
    x=x2;
  }
  wr_lcd (comm,0x36);
}
/*-----------------------------------------------*/
//当data1=0xff,data2=0xff时,在x0,y0处反白显示16xl*yl.
void con_disp (unsigned char data1,unsigned char data2,unsigned char x0,unsigned char y0,unsigned char xl,unsigned char yl)
{
  unsigned char i,j;
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_lcd (comm,0x34);
      wr_lcd (comm,y0+j);
      wr_lcd (comm,x0+i);
      wr_lcd (comm,0x30);
      wr_lcd (dat,data1);
      wr_lcd (dat,data2);
    }
  }
  wr_lcd (comm,0x36);
}


/*--------------清DDRAM------------------*/
void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
  mydelay (180);
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  unsigned char a,i,j,temp;
  
 // cli();
  
  
  mydelay (250);
  a=content;
  cs=1;
  sclk=0;
  std=1;
  for(i=0;i<5;i++)
  {
    sclk=1;
    sclk=0;
  }
  std=0;
  sclk=1;
  sclk=0;
  if(dat_comm)
   std=1;   //data
  else
    std=0;   //command
  sclk=1;
  sclk=0;
  std=0;
  sclk=1;
  sclk=0;
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
      temp=0x80&a;
      a=a<<1;
      
      //std=CY;
      if(temp==0)
          std=0;
        else
          std=1;

      sclk=1;
      sclk=0;
    }
   std=0;
    for(i=0;i<4;i++)
    {
      sclk=1;
      sclk=0;
    }
  }
 //
 
// sei(); 
}


unsigned char  buffer_addr(unsigned char hang,unsigned char lie)
{
switch(hang)
 {
  case 1:
     {
      return (lie);
     }
  case 2:
     {
      return (32+lie);
     }
  case 3:
     {
      return (16+lie);
     }
  case 4:
     {
      return (48+lie);
     }

 }
}

void  showpoint(unsigned char dat1)
{
	//dat1=0x0c  关游标
	//dat1=0x0e  显示游标
	
mydelay(20);
wr_lcd (comm,dat1);	
	
}
void qing_bai()
{

con_disp (0x00,0x00,0x80,0x80,16,16);
con_disp (0x00,0x00,0x80,0x8f,16,16);
}



//指定半字 反白    
//在自定义方式中(即baien>20时)  从指定位置反白或取消反白 baien-20个字
void fan_bai (unsigned char baien,unsigned char x0,unsigned char y0)
{
  unsigned char mod;
  
  
  
  
  
  if(y0%2==0)
  {
  	 mod=1;
  	 y0=y0/2;
  }
  else
  {
    mod=2;
    y0=(y0-1)/2;
  }
  
  if(baien>20)     //自定义方式
   {
   	if(baien>=30) 
   		{
   		  mod=0x00;
   	      baien=baien-10;
   	    }
   	 else
   	 	 mod=0xff;
    switch(x0)
      {
       case  1:
         {
         	con_disp (mod,mod,0x80+y0,0x80,baien-20,16);
            break;
         }//end of case 1   
       case  2:
         {         	
         	con_disp (mod,mod,0x80+y0,0x8f,baien-20,16);
            break;
         }//end of case 2   
       case  3:
         {          	
         	con_disp (mod,mod,0x88+y0,0x80,baien-20,16);
            break;
          }//end of case 3     
       case  4:
         {          	
         	con_disp (mod,mod,0x88+y0,0x8f,baien-20,16);
            break;
          }//end of case 4
        }
   return;
   }
  
  switch(x0)
  {
    case  1:
         { 
         	
         	if(mod==1&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0xff,0x00,0x80+y0,0x80,1,16);
              }//前半字 
            if(mod==2&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0xff,0x80+y0,0x80,1,16);
              }//后半字 
             if(baien==0)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0x00,0x80+y0,0x80,1,16);
              }//后半字 
             if(baien==3)   //1  前半字反白,2  后半字反白  ,0  清反白  3 全字反白
         	  {con_disp (0xff,0xff,0x80+y0,0x80,1,16);
              }//后半字  
             wr_lcd (comm,0x36);
              break;
            }//end of case 1   
            
            
     case  2:
         { 
         	
         	if(mod==1&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0xff,0x00,0x80+y0,0x8f,1,16);
              }//前半字 
            if(mod==2&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0xff,0x80+y0,0x8f,1,16);
              }//后半字 
            if(baien==0)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0x00,0x80+y0,0x8f,1,16);
              }//后半字  
            if(baien==3)   //1  前半字反白,2  后半字反白  ,0  清反白  3 全字反白
         	  {con_disp (0xff,0xff,0x80+y0,0x8f,1,16);
              }//后半字  
             wr_lcd (comm,0x36);
              break;
            }//end of case 2   
                   
    case  3:
         { 
         	
         	if(mod==1&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0xff,0x00,0x88+y0,0x80,1,16);
              }//前半字 
            if(mod==2&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0xff,0x88+y0,0x80,1,16);
              }//后半字 
            if(baien==0)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0x00,0x88+y0,0x80,1,16);
              }//后半字 
             if(baien==3)   //1  前半字反白,2  后半字反白  ,0  清反白  3 全字反白
         	  {con_disp (0xff,0xff,0x88+y0,0x80,1,16);
              }//后半字    
             wr_lcd (comm,0x36);
              break;
            }//end of case 3     
     case  4:
         { 
         	
         	if(mod==1&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0xff,0x00,0x88+y0,0x8f,1,16);
              }//前半字 
            if(mod==2&&baien==1)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0xff,0x88+y0,0x8f,1,16);
              }//后半字 
            if(baien==0)   //1  前半字反白,2  后半字反白  ,0  清反白
         	  {con_disp (0x00,0x00,0x88+y0,0x8f,1,16);
              }//后半字 
             if(baien==3)   //1  前半字反白,2  后半字反白  ,0  清反白  3 全字反白
         	  {con_disp (0xff,0xff,0x88+y0,0x8f,1,16);
              }//后半字     
             wr_lcd (comm,0x36);
              break;
            }//end of case 4                  
 }//end of switch 
}


/*------------------主程序--------------------*/
/*
void test(void)
{
  //SP=0x5f;
  init_lcd ();
  while (1)
  {
    lat_disp (0x00,0x00);
    chn_disp (tab1);
    con_disp (0xff,0xff,0x8c,0x80,2,16);
    delay1 (8000);
    clrram();
    lat_disp (0xcc,0xcc);
    delay1 (8000);
    lat_disp (0x00,0x00);
    chn_disp1 (tab31);
    img_disp1 (tab32);
    delay1 (8000);
    clrram();
    lat_disp (0xff,0x00);
    delay1 (8000);
    img_disp (tab5);
    delay1 (8000);
  }
}
*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -