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

📄 lcd.c

📁 此为基于ARM的LCD液晶显示器的程序,采用C语言编写,产生正弦曲线
💻 C
📖 第 1 页 / 共 2 页
字号:
			break;
		case 4:
			Address = 0x98;
			break;
		default:
			break;
	}
	
	//在第row行写八个字
	LCD_Write(0,Address);
	for(i=0;i<16;i++)  
	{
		if(!blankflag)
			LCD_Write(1,str[i]);
		else
			LCD_Write(1,0x20);
	}
	
}
/***********************************************************************************************
** 函数名称:LCD_Point()
** 函数功能:写LCD画点数据
** 入口参数:uint16 x		横坐标
			 uint16 y		纵坐标
			 uint8 disp_onoff	0:清零某一点;1:点亮某一点
** 出口参数:无
***********************************************************************************************/
/*void  LCD_Point(uint16 x, uint16 y, uint8 disp_onoff)
{
	uint16 z=0;
	z = (63-y) * 16 + (x/8);
	if (disp_onoff == 0)
		chartab4[z] = (chartab4[z] & (~(0x80 >> (x%8))));
	else
		chartab4[z] = (chartab4[z] | (0x80 >> (x%8)));
	//LCD_GRP(chartab4);
}*/
void  LCD_Point(uint16 x, uint16 y, uint8 disp_onoff)
{
	uint16 z=0;
	z = (63-x) * 16 + (y/8);
	if (disp_onoff == 0)
		chartab4[z] = (chartab4[z] & (~(0x80 >> (y%8))));
	else
		chartab4[z] = (chartab4[z] | (0x80 >> (y%8)));
	LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Modify_Point()
** 函数功能:修改chartab4数组函数
** 入口参数:uint16 x		横坐标
			 uint16 y		纵坐标
** 出口参数:无
***********************************************************************************************/
void Modify_Point(uint16 x, uint16 y)
{
	uint16 z=0;
	z = (63-x) * 16 + (y/8);
	chartab4[z] |= (0x80 >> (y%8));
}
void  Draw_Point(uint16 x, uint16 y)
{
	uint16 z=0;
	z = (63-x) * 16 + (y/8);
	chartab4[z] |= (0x80 >> (y%8));
	
	//LCD_GRP(chartab4);
}

/***********************************************************************************************
** 函数名称:Draw_HLine()
** 函数功能:在第row(0~63)行画从最左端至最右端的直线
** 入口参数:uint8 row ;LCD行参数,取值范围0~63
** 出口参数:无
***********************************************************************************************/
void Draw_HLine(uint8 row)
{
	uint8 x,y;
	for(x=row,y=0;y<128;y++)
		Modify_Point(x,y);
	LCD_GRP(chartab4);
}

/***********************************************************************************************
** 函数名称:Draw_HLine2()
** 函数功能:在第row(0~63)行画从starty至endy的直线
** 入口参数:uint8 row ;LCD行参数,取值范围0~63;starty和endy在0~127之间
** 出口参数:无
***********************************************************************************************/
void Draw_HLine2(uint8 starty,uint8 endy,uint8 row)
{
	uint8 x,y;
	for(x=row,y=starty;y<endy;y++)
		Modify_Point(x,y);
	LCD_GRP(chartab4);
}

/***********************************************************************************************
** 函数名称:Draw_VLine()
** 函数功能:在第colm(0~127)列画从最下端至最上端的直线
** 入口参数:uint8 row ;LCD行参数,取值范围0~63
** 出口参数:无
***********************************************************************************************/
void Draw_VLine(uint8 colm)
{
	uint8 x,y;
	for(x=0,y=colm;x<64;x++)
		Modify_Point(x,y);
	LCD_GRP(chartab4);
}

/***********************************************************************************************
** 函数名称:Draw_HLine()
** 函数功能:修改chartab4数组函数
** 入口参数:uint16 x		横坐标
			 uint16 y		纵坐标
			 uint8 disp_onoff	画点
** 出口参数:无
***********************************************************************************************/
void Draw_VLine2(uint8 startx,uint8 endx,uint8 colm)
{
	uint8 x,y;
	for(x=startx,y=colm;x<endx;x++)//画X轴坐标线,即:每格十点画一条横线
		Modify_Point(x,y);
	LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Draw_HArrow()
** 函数功能:在LCD水平方向上画直线末端的箭头
** 入口参数:(x,y)需要箭头的水平直线末端点坐标
** 出口参数:无
***********************************************************************************************/
void Draw_HArrow(uint8 x,uint8 y)
{	//i<4决定箭头大小
	uint8 i;
	//先延长原直线3个像素点
	Draw_HLine2(y,y+6,x);
	
	for(i=1;i<4;i++)
	{
		Modify_Point(x-i,y+6-i);//下侧
		Modify_Point(x+i,y+6-i);//上侧
	}
	
	LCD_GRP(chartab4);					//取数组数据来绘图
}
/***********************************************************************************************
** 函数名称:LCD_HLine()
** 函数功能:在LCD垂直方向上画直线末端的箭头
** 入口参数:(x,y)需要箭头的垂直直线末端点坐标
** 出口参数:无
***********************************************************************************************/
void Draw_VArrow(uint8 x,uint8 y)
{	//i<4决定箭头大小
	uint8 i;
	//先延长原直线3个像素点
	Draw_VLine2(x,x+6,y);
	
	for(i=1;i<3;i++)
	{
		Modify_Point(x+6-i,y+i);//右侧
		Modify_Point(x+6-i,y-i);//左侧
	}
	
	LCD_GRP(chartab4);					//取数组数据来绘图
}
/***********************************************************************************************
** 函数名称:LCD_GRP()
** 函数功能:绘图函数
** 入口参数:string_num		液晶点阵数组
** 出口参数:无
***********************************************************************************************/
void LCD_GRP(uint8 const *string_num)
{     
	uint8 i,j,k;
	
  
    k = 0x80;
     
	LCD_Write(0,0x32);		// 功能设定
    LCD_Dly(2);
    LCD_Write(0,0x36);		// 
    LCD_Dly(2);
    
	// 上半屏
    for (i = 0; i<32; i++)
    {
		LCD_Write(0,k);
		LCD_Dly(2);
		k++;
		LCD_Write(0,0x80);
		LCD_Dly(2);		
		for (j = 0;j < 16;j++) 
		{
			LCD_Write(1,*string_num);
			string_num++;
			LCD_Dly(1);
			     
		}
    }
    // 下半屏
    k = 0x80;
    for (i = 0;i < 32;i++)
    {
		LCD_Write(0,k);
		LCD_Dly(2);
		k++;
		LCD_Write(0,0x88);
		LCD_Dly(2);		
		for (j = 0;j < 16;j++) 
		{
			LCD_Write(1,*string_num);
			string_num++;
			LCD_Dly(1);
		      
		}
    }
  }
  void  drawquxian(void)
{  uint8 dangwei;
   uint8 x;
   uint8 i;
   uint8 k=0;
   for(i=3;i<127;i++)
     {  dangwei=((i-4)%20)/10;
        switch(dangwei)
       { case 0:
          i=i-20*k;
          x=63+13*i/5-(i*i)/10-379/10;
          i=i+20*k;//还原i
          Modify_Point(x,i);
          LCD_GRP(chartab4);
          break;
         
         case 1:
          i=i-20*k;
          x=63+13*i/5-(i*i)/10-379/10;
          i=i+20*k;//还原i
         Modify_Point(x,i);
         LCD_GRP(chartab4);
         break;
       }
       if(i==3+20*(k+1))
       {
        k++;
       }
    }   
 }

⌨️ 快捷键说明

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