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

📄 55lcd_display.c

📁 可以驱动240128的大液晶
💻 C
📖 第 1 页 / 共 2 页
字号:
     do
      {
	   num=num*10;
	   temp=num;
	   mynum[j]=temp%10;	   				  
	   i++;
	   j++;
	  }while(i<6&&j<dplen);	  //保留指定小数位  包括符号位小数点总共不
	  i=0;temp=0;                  //能超过6位   可改动
   	/* do
	  {
	    temp+=mynum[i];i++;	  
	  }while(i<j);
	  i=0; */
	  //-------------显示小数部分---------------
	if(dplen)
	{
	//if((dplen<8)||(dplen>=8&&temp!=0))
	//{
	  post_msg('.');
	do
	  {post_msg(mynum[i]+48);i++;} 
	while(i<j);
	//}
	}
   }	
   
}	


//---显示bmp位图,利用那个软件把一幅图片生成01代码
//然后把代码粘贴到zimo.c里面 然后编译  下面的flash不能省 
//只能是240*128的 其他的都不能 因此生成代码时也必须是240*128的
//大了不行 
//其实应该是可以显示小的的,只要把下面的for语句改一下 不要让它把全屏都那个了 
//生成小一点的图片然后把相应的地方那个了就可以了,但是不试了,没多大的意义。
void show_picture(flash unsigned char *picture)
{
   unsigned long i=0;
   send_com(0x12,0xB2);  //图层
   send_com(0x00,0xc5);   // 到图形模式   
   send_com(0x60,0);
   send_com(0x70,0);
   //delay_us(10);
   for(i=0;i<3840;i++)  
    post_msg(picture[i]);
  // send_com(0x00,0xcd); 
}         
//************************************ 读数据 *******************   
//读语句 temp=DATA_IN; 必须在 RD=1(读关闭)之后,否则不能正确读取。

unsigned char read_data(unsigned char x,unsigned char y)
{ unsigned char temp;
   send_com(0x12,0xb2); 

   send_com(0x60,x);
   send_com(0x70,y);
   delay_us(1);  
   DATA_OUT=0xff;
   DATA_DIR=0x00;  
    
   CD=1; 
   CS=0;
  // WR=1;
   RD=0;  
    
   
   delay_us(10);
   RD=1; 
   temp=DATA_IN; 
   CS=1;  
   DATA_OUT=0;
   DATA_DIR=0xFF; 
   return (temp);  
}

     
//**************************************************************************/ 
//*打一个点 x,y为其精确位置
void point(unsigned char x,unsigned char y)
{unsigned char temp=0;
 temp=x%8;
 temp=1<<(7-temp);
 send_com(0x00,0xc5);//进入图形模式 
 send_com(0x12,0xB2);  
 send_com(0x60,x/8); 
 send_com(0x70,y); 
 temp|=read_data(x/8,y);  //这个很重要 可以使所有内容不互相遮蔽
 post_msg(temp);
 //send_com(0x00,0xcd);//返回到文字模式 
 
 }  
 //画横线  x,y为精确位置
void  line_x(unsigned char x1,unsigned char x2,unsigned char y)
{  unsigned char temp1=0,temp2=0,i=0,j=1; 
 for(i=0;i<=x2-x1;i++)
  {  point(x1+i,y); 
     temp1|=read_data(x1/8,y); 
     if(i==x2-x1)         //如果在8个小单位以内
    { post_msg(temp1);} 
     else 
      if(temp1&0x01==1)
      { post_msg(temp1);
        temp1=0;
        x1=x1+i+1; 
        while(x1+8<=x2)      //中间全部为高
        { 
           
          send_com(0x60,x1/8);
          send_com(0x70,y); 
           post_msg(0xff);
         x1=x1+8;  
        
        }  
    
       for(i=0;i<=x2-x1;i++)
        {  point(x1+i,y); 
           temp1|=read_data(x1/8,y); 
           if(i==x2-x1)
           { post_msg(temp1);
             temp1=0;} 
        }  
        break;
      } 
      
  }
    
 
}  


 
 
//==============画竖线=== k为某行的某一小行,值为0-7=======================================


void line_y(unsigned char x,unsigned char y1,unsigned char y2)
{  
 
  unsigned char temp=0; 
  send_com(0x00,0xc5);//到图形模式   
  if(y1>y2){temp=y2;y2=y1;y1=temp;}   
  for(temp=y1;temp<=y2;temp++)
  { point(x,temp);}  
}


/*向上垂直滚动整个屏幕
************************************************************************/  
//y1 为初始位置,y2 为结束位置,它是通过滚动所选的屏幕范围来实现字的滚动
//0x03中高4 位必须为高,否则无输出,光标始终是不跟着移动的。
//每次移动一个像素,移动频率和光标闪烁频率相同,所以可以控制光标闪烁来控制
//移动速度,即控制寄存器0x80来控制移动速度  
//垂直移动时y1,y2的控制不起作用,是整个屏幕的卷动。
void gundong(unsigned char y1,unsigned char y2)
{send_com(0x03,0xf3);  //f3为水平移动,f4为垂直移动
 send_com(0x71,y1);
 send_com(0x72,y2);
 } 
 //*******画圆 输入中心坐标和半径*******************************
 //利用双向输出显示以弥补双方的不足
void huayuan(unsigned char x,unsigned char y,unsigned int r)
{  unsigned char i=0;
   unsigned int b=0,a=0,c=0,d=0;
  a=x-r;             //a为最左边的那个点的横坐标
  for(i=0;i<=2*r;i++)
  {
   b=(unsigned int)sqrt(r*r-(x-a)*(x-a));
   point(a,b+y);
   point(a,y-b); 
   a++;           //横坐标每加一次就输出相应的y坐标
  } 
  c=y-r;         
   for(i=0;i<=2*r;i++)
  {
   d=(unsigned int)sqrt(r*r-(y-c)*(y-c));
   point(x-d,c);
   point(x+d,c); 
   c++;         
  } 
}
//********正弦函数显示**************************
//四个参数分别为:x,y为原点坐标(精确位置);t为周期;f为振幅。
void zhengxian (unsigned char x,unsigned char y,unsigned char t,unsigned char f)
{ unsigned char i=0,j=0,m=0,p=0,q=0;
  m=x;
  line_x(x-5,230,y);
  line_y(x,y-f-10,y+f+10); 
  //******这个只是一些离散的点************
 /* for(i=0;i<=230-m;i++)   //不用x,因为x在变化,所以另用一个m
 {
  point(x,y-(unsigned char)f*sin(6.28*j/t)); //如果要打cos的函数只要把sin改为cos即可
  j++;   x++; 
  
  if(j==t)            //到一个周期时,计数j清零,即到了下一个周期的起点
  { j==0;} 
  
 }*/ 
 //******这个是将那些离散的点用线段连接起来 ***************** 
 /*for(i=0;i<=230-m;i++)   
 {p=y-(unsigned char)f*sin(6.28*j/t);
  point(x,p); 
  j++;   x++; 
  q=y-(unsigned char)f*sin(6.28*j/t);
 // line_y(x,p-1,q+1); 
  if(p>q) line_y(x,p-1,q+1); 
  else if(p<q) line_y(x,p+1,q-1); 
  else point(x,p);
  if(j==t)            
  { j==0;} 
  
 } */  
 //******虽然这个语言上比那个复杂,但运行效率比那个高  (是否是的我也不是很确定)
 point(x,y-(unsigned char)f*sin(0));
 for(i=0;i<=230-m;i++)  
 {if(i!=0)
 {p=q ;                
  point(x,p);} 
  else p=y;
  j++;   x++; 
  q=y-(unsigned char)f*sin(6.28*j/t);
 line_y(x,p,q); 
 /* if(p>q) line_y(x,p-1,q+1); 
  else if(p<q) line_y(x,p+1,q-1); 
  else point(x,p); */
  if(j==t)           
  { j==0;} 
  
 }  
 
}  

⌨️ 快捷键说明

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