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

📄 lcd.c

📁 电机驱动!四相五线的步进电机用C8051F020驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
  } 
  else lcd_busy=1; 
  
 
  LCDR=1;LCDCD=1; //LCDCE=0;
  xspdelay(1);
 
  P5=i;
  xspdelay(3);
  LCDW=0;
 
  LCDW=1;
  P5=0xaa;
  xspdelay(1);
  
  EA=1; 
  }


void lcdint(void)
{
  uchar i;
  LCD_PORT_Init();
  
  wlcdi(0x40);
  wlcdd(0x30);
  wlcdd(0x87);
  wlcdd(0x07);
  
  wlcdd(40);
  wlcdd(0x4c);
  wlcdd(240);
  wlcdd(40);
  wlcdd(0x00);

  wlcdi(0x44);
  wlcdd(0x0);
  wlcdd(0x0);
  wlcdd(240);
  wlcdd(0x80);wlcdd(0x25);wlcdd(240);
  wlcdd(0);wlcdd(0);wlcdd(0);wlcdd(0);

  wlcdi(0x59);
  wlcdd(0x14);//04



  wlcdi(0x5b);
  wlcdd(0x0d);//d
   
  wlcdi(0x46);
  wlcdd(0);
  wlcdd(0);

  wlcdi(0x5a);
  wlcdd(0);

  wlcdi(0x4c);
  wlcdi(0x42);
  while(0){
  wlcdi(0x46);
  wlcdd(0);
  wlcdd(0);
  wlcdi(0x42);
  wlcdd(0xaa);

  wlcdi(0x5a);
  wlcdd(0x4);
 
  wlcdi(0x46);
  wlcdd(0);
  wlcdd(0);
  wlcdi(0x43);
  i=rlcdd();
  }
  //STB=0; 
  //wlcdi(0x59);
  //wlcdd(0x54);
  
  
 // wlcdi(0x42);
 // wlcdd(65);
 // wlcdd(66);
 // wlcdd(67);
 
}


//0 关显示
//1 1,2屏显示
//2 1屏显示
void lcdzt(uchar i)
{
   if (i==0) {wlcdi(0x59);wlcdd(0x00);}
   if (i==1) {wlcdi(0x59);wlcdd(0x14);}
   if (i==2) {wlcdi(0x59);wlcdd(0x04);}
}
void lcdclr(void)
{
  int i;
  uchar ii,bz;   
  lcdzt(0);
        //写入标志点
	    wlcdi(0x46);
	    wlcdd(0xff);
	    wlcdd(0x4a);
	    wlcdi(0x42);
  	    wlcdd(2);  


  for(ii=0;ii<3;ii++)
  { 
	  wlcdi(0x46);
	  wlcdd(0x80);
	  wlcdd(0x25);
	  wlcdi(0x4c);
	  wlcdi(0x42);
     
	  for (i=1; i<= 9600;i++)
	  {
         if(ii==0) wlcdd(0);
	     if(ii==1) bwlcdd(0);
		 if(ii==2) {bwlcdi(0x42);bwlcdd(0);}
         
	  }
	  
	  wlcdi(0x46);
	  wlcdd(0xff);
	  wlcdd(0x4a);
	  wlcdi(0x43);
	  bz=rlcdd();  //读标志点
	  if ((bz&0x02)!=0x02)
	  {
	    wlcdi(0x46);
	    wlcdd(0xff);
	    wlcdd(0x4a);
	    wlcdi(0x42);
  	    wlcdd(0);   //消除标志点,退出循环
		ii=6;

	  }
   }
      //写入标志点
	  wlcdi(0x46);
	  wlcdd(0x7f);
	  wlcdd(0x25);
	  wlcdi(0x42);
      wlcdd(1);  
  for(ii=0;ii<3;ii++)
  {
      wlcdi(0x46);
	  wlcdd(0x00);
	  wlcdd(0x00);
	  wlcdi(0x4c);
	  wlcdi(0x42);   
	  for (i=1; i<= 9600;i++)//1920 3840
	  {
         if(ii==0) wlcdd(0);
	     if(ii==1) bwlcdd(0);
		 if(ii==2) {bwlcdi(0x42);bwlcdd(0);}
	  }

	  wlcdi(0x46);
	  wlcdd(0x7f);
	  wlcdd(0x25);
	  wlcdi(0x43);
	  bz=rlcdd();  //读标志点
	  if ((bz&0x01)!=0x01)
	  {
	    wlcdi(0x46);
	    wlcdd(0x7f);
	    wlcdd(0x25);
	    wlcdi(0x42);
  	    wlcdd(0);   //消除标志点,退出循环
		ii=6;

	  }
  }
  lcdzt(1);
}
void xspdelay(unsigned int x)
{
while(x--){}
}

void lcddw(uchar h,l)
{
  
  lcdadd=h*800+l*2+40;//640
  wlcdi(0x46);
  wlcdd(lcdadd%256);
  wlcdd(lcdadd/256);
 
 
}

//input汉字
void lcdhz(uchar i)
{
  int ii;
  //if(i==0) lcdadd=lcdadd-40;
  for (ii=0;ii<=(15+(i==0)*4);ii++){
    wlcdi(0x42);
   if (i!=0){wlcdd(hzpm[i][ii*2]);wlcdd(hzpm[i][ii*2+1]);}
   else {wlcdd(0);wlcdd(0);}
     
   
	lcdadd=lcdadd+40;//30  
    wlcdi(0x46);    
	wlcdd(lcdadd%256);
    wlcdd(lcdadd/256);
  }
  lcdadd=lcdadd-638-(i==0)*160;//478
  wlcdi(0x46);    
  wlcdd(lcdadd%256);
  wlcdd(lcdadd/256);

}  

//数字输入键
void lcdsz(uchar h,l,k)   //h>hang shu  l >lie shu  k>kuan du
{
  	
  uchar i,j,ii;  
  lcdadd=h*800+l;
  wlcdi(0x46);    
  wlcdd(lcdadd%256);
  wlcdd(lcdadd/256);
  
  for (i=0;i<k;i++)
  {
    if ((dispbuf[i]<24)||(dispbuf[i]>127)) dispbuf[i]=' ';//44
    j=dispbuf[i];
	for (ii=0;ii<16;ii++)
	{
      wlcdi(0x42);
      wlcdd(ascpm[j][ii]);
      
     
      lcdadd=lcdadd+40;  //30
      wlcdi(0x46);
	  wlcdd(lcdadd%256);
      wlcdd(lcdadd/256);
    }
    lcdadd=lcdadd-639;
    wlcdi(0x46);
    wlcdd(lcdadd%256);
    wlcdd(lcdadd/256);
    
  }
}  

void lcdxsz(uchar h,l,k)   //h>hang shu  l >lie shu  k>kuan du
{
  	
  uchar i,j,ii;  
  lcdadd=h*320+l;//-((h%2)==1)*80+l;//320 400
  wlcdi(0x46);
  wlcdd(lcdadd%256);
  wlcdd(lcdadd/256);
  
  for (i=0;i<k;i++)
  {
  
    j=dispbuf[i]*(dispbuf[i]>39);
	for (ii=0;ii<8;ii++)
	{
      wlcdi(0x42);
      wlcdd(xascpm[j-39][ii]);//30
       
     
      lcdadd=lcdadd+40;  //30
      wlcdi(0x46);
	  wlcdd(lcdadd%256);
      wlcdd(lcdadd/256);
    }
    lcdadd=lcdadd-319;
    wlcdi(0x46);
    wlcdd(lcdadd%256);
    wlcdd(lcdadd/256);
  }
}  



/*
void draw_line(uint x,y,x1,y1)
{

	uint i;
	float a,b,delta_x,delta_y,delta;
	a=x;b=y;
	delta_x=x1-a;delta_y=y1-b;
	delta=fabs((fabs(delta_x)>fabs(delta_y))?delta_x:delta_y);
	for (i=0;i<delta;i++)
	{line(x,y,x,y,1);	a+=delta_x/delta;b+=delta_y/delta;x=a;y=b;}

}


*/
void HW_line(int x,y,x1,y1,bit WR)
{
   float XL,fx,fy,bz1,bz2;
   int i,ii;
   bz1=1;bz2=1;

   fy=y1-y+.0001;fx=x1-x+.0001;
   XL=fy/fx;
   if(x>x1){i=x1;x1=x;x=i;i=y1;y1=y;y=i;}
   for (i=x;i<=x1;i++){ii=XL*(i-x)+y+.5;line (i,ii,i,ii,WR); }
   XL=fx/fy;
   if(y>y1){i=y1;y1=y;y=i;i=x1;x1=x;x=i;}
   for (i=y;i<=y1;i++){ii=XL*(i-y)+x+.5;line (ii,i,ii,i,WR); }


}





void line(uint x,y,x1,y1,bit WR)
{
  uint i,ii;
  unsigned int lcdadd,lcddata,lcdd;
  if(x>320) x=319;
  if(x1>320) x1=319;
  if(y>240) y=239;
  if(y1>240) y1=239;
  if(x<0) x=0;
  if(x1<0) x1=0;
  if(y<0) y=0;
  if(y1<0) y1=0;
  
  for (i=y;i<=y1;i++)
  {
    for (ii=x;ii<=x1;ii++)
	{
//      if (x1==x)
      {

	    if((x1>ii+7)&&(ii%8==0))
		{
		  lcdadd=ii/8+i*40+9600;
		  lcdd=0xff;
		  ii=ii+7;
		  goto s1;
		}	    
		lcdadd=ii/8+i*40+9600;
		lcddata=ii%8;

        wlcdi(0x46);
        wlcdd(lcdadd%256);
        wlcdd(lcdadd/256);
        wlcdi(0x43);
        lcdd=rlcdd();
s1:
        wlcdi(0x46);
        wlcdd(lcdadd%256);
        wlcdd(lcdadd/256);
        wlcdi(0x42);  
        lcddata=1<<(7-lcddata); 
		if (WR==1) lcddata=lcddata|lcdd;
		else lcddata=(~lcddata)&lcdd;
		
        wlcdd(lcddata); 
	     
	  }
      }
  }
  
  lcddw(7,14);
  //lcdhz(0);
  lcddw(7,14);
  //lcdhz(0); 

}









/*

void print (void)
{
  int i,ii;
   P4&=0x7f;
  if(dyf==1) prtbusy();
  else goto end;
  for (i=0;i<160;i++)
  {
    if (dyf==0) break;
    STB=0;
    P5=d[i]
    xspdelay(200);
    STB=1;
    xspdelay(200);
    STB=0;
    //xspdelay(200);
	if(P5==0x0a) break;
  }
end:
  i=i;
 P4|=0x80;
}
*/
//k>9时快速显示 行、列、快、
void lcdk( uchar h,l,k,i)
{
   uchar oldkey;
   uint sx,sy,ex,ey,ii,iii;
   oldkey=key;
   sx=l*16-16;
   sy=h*20;
   ex=sx+k*16+30;
   ey=sy+17;
   if (i==1)
   {
     line(sx,sy,sx,ey,1);
	 line(ex,sy,ex,ey,1);
     line(ex+1,sy+1,ex+1,ey+1,1); 
     line(sx,sy,ex,sy,1);
     line(sx,ey,ex,ey,1);
	 line(sx+1,ey+1,ex+1,ey+1,1);
   }
   if (i==0)
   {
     lcdzt(2);  
   //bwlcdi(0x59);
     //bwlcdd(0x04); 
     //k=k%10;
	 for (iii=0;iii<19;iii++)
	 {
       bwlcdi(0x46);
	   		bwlcdd((9600+h*800+l*2-2+iii*40)%256);
       bwlcdd((9600+h*800+l*2-2+iii*40)/256);
       bwlcdi(0x42);
       for (ii=0;ii<=(k%10*2+3);ii++) bwlcdd(0xff); 
     
     }
//     else
//	 for (iii=0;iii<19;iii++)
//	 {
//       bwlcdi(0x46);
//	     bwlcdd((9600+h*800+l*2+iii*40)%256);
//       bwlcdd((9600+h*800+l*2+iii*40)/256);
//       bwlcdi(0x42);
//       bwlcdd(0xff);
//	     bwlcdd(0xff);
     
//     }
 	 
     lcdzt(1);
	 //bwlcdi(0x59);
     //bwlcdd(0x14); 
     if (k<10) for (iii=0;iii<=120;iii++) xspdelay(5000);
   }

   if (i==2)
   {
     lcdzt(2);
   //     bwlcdi(0x59);
//     bwlcdd(0x04); 
     for (iii=0;iii<19;iii++)
	 {
       bwlcdi(0x46);
	   bwlcdd((9600+h*800+l*2-2+iii*40)%256);
       bwlcdd((9600+h*800+l*2-2+iii*40)/256);
       bwlcdi(0x42);
       for (ii=0;ii<=(k*2+3);ii++) bwlcdd(0x00); 
     
     }
     line(sx,sy,sx,ey,1);
	 line(ex,sy,ex,ey,1);
     line(ex+1,sy+1,ex+1,ey+1,1); 
     line(sx,sy,ex,sy,1);
     line(sx,ey,ex,ey,1);
	 line(sx+1,ey+1,ex+1,ey+1,1);
     lcdzt(1);
	 //bwlcdi(0x59);
     //bwlcdd(0x14); 
     //for (iii=0;iii<=150;iii++) xspdelay(5000);
   }
   
   key=oldkey;
}

void lcd_exit(uchar h,l)
{

    //lcddw(h,l);lcdhz(65);lcdhz(12);
    strcpy(dispbuf,"Exit");
	lcdsz(h,l*2,4);
	lcdk(h,l,2,1);
}


void lcd_enter(uchar h,l)
{

     //lcddw(h,l);lcdhz(55);lcdhz(57);
     strcpy(dispbuf," OK ");
  	 lcdsz(h,l*2,4);
     lcdk(h,l,2,1);
}

void lcd_next(uchar h,l)
{

     //lcddw(h,l);lcdhz(105);lcdhz(106);
     strcpy(dispbuf,"Next");
 	 lcdsz(h,l*2,4);
     lcdk(h,l,2,1);
}



⌨️ 快捷键说明

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