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

📄 lcm_240128.h

📁 基于AVR和51的240*128液晶显示模块驱动程序。很有用的喔~
💻 H
📖 第 1 页 / 共 2 页
字号:
//column为水平点数,row为垂直点数
//show=1画点,show=0清点
void Lcd_Point(unsigned char x, unsigned char y, unsigned char draw)
{
	unsigned int addr;       // memory address of byte containing pixel to write
	if( (x >= LCD_X_MAX) || (y >= LCD_Y_MAX) ) return;
	addr = (y * LCD_WIDTH)  + (x>>3) + LCD_GRAPH_BASE;
	Lcd_SendCom2 ((unsigned char)(addr),(addr>>8),COMM_SET_POSITION);   // set LCD addr. pointer
	if(draw)
		Lcd_SendCom0(COMM_BIT_SET|(7-x&0x07));  // 0xf8为画点命令
	else
		Lcd_SendCom0(COMM_BIT_CLR|(7-x&0x07));  // 0xf0为清点命令
}

/***********************************************************************
画一条x1,y1到x2,y2的直线
(show=1画点,show=0清点)
***********************************************************************/
void Lcd_Line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char draw) 
{
    int dx,dy,e,t;
    if (x1 == x2)			//画水平线
    {
        if (y1 > y2) e=-1;
        else e=1;
        for (;y1 != y2; y1+=e)		Lcd_Point(x1,y1,draw);
		Lcd_Point(x1,y1,draw);
        return;
    }
	
    if (y1 == y2)			//画竖直线
    {
        if (x1 > x2) e=-1;
        else e=1;
        for (;x1 != x2; x1 += e)	Lcd_Point(x1,y1,draw);
		Lcd_Point(x1,y1,draw);
        return;
    }

    dx=x2-x1;
    if (dx<0)       //将第2、3象限转为1、4象限
    {
            t=x1;x1=x2;x2=t;
            t=y1;y1=y2;y2=t;
            dx=-dx;
    }

    dy=y2-y1;       
    if (dy>0)       //第4象限,步进为1
    {
        t=1;
    }
    else            //第1象限,步进为-1
    {
        t=-1;
        dy=-dy;
    }

    Lcd_Point(x1,y1,draw);
    if (dx>=dy)     //斜率<1,x步进1,y由差值决定是否加t
    {
        e=dy-(dx>>1);
        while (x1 != x2)
        {
            if (e>0)
            {
                y1+=t;
                e-=dx;
            }
            x1++;
            e+=dy;
            Lcd_Point(x1,y1,draw);
        }    
    }
    else            //斜率>1,y步进t,x由差值决定是否加1
    {
        e=dx-(dy>>1);
        while (y1 != y2)
        {
            if (e>0)
            {
                x1++;
                e-=dy;
            }
            y1+=t;
            e+=dx;
            Lcd_Point(x1,y1,draw);
        }    
    }
}


/***********************************************************************
以x,y为圆心,以radius为半径画贺
(show=1画点,show=0清点)
***********************************************************************/
void Lcd_Circle(unsigned char x, unsigned char y, unsigned char r, unsigned char draw)
{
	int xc = 0;
	int yc ;
	int p ;
	yc=r;
	p = 3 - (r<<1);
	while (xc <= yc)  
	{
		Lcd_Point(x + xc, y + yc, draw);
		Lcd_Point(x + xc, y - yc, draw);
		Lcd_Point(x - xc, y + yc, draw);
		Lcd_Point(x - xc, y - yc, draw);
		Lcd_Point(x + yc, y + xc, draw);
		Lcd_Point(x + yc, y - xc, draw);
		Lcd_Point(x - yc, y + xc, draw);
		Lcd_Point(x - yc, y - xc, draw);
		if (p < 0)
			p += (xc++ << 2) + 6;
		else
			p += ((xc++ - yc--)<<2) + 10;
	}
}
/*
//画半圆 
void glcd_circle_half(int x, int y, int radius, unsigned char show)
{
	int xc = 0;
	int yc ;
	int p ;
	yc=radius;
	p = 3 - (radius<<1);
	while (xc <= yc)  
	{
		//    Lcd_Point(x + xc, y + yc, show);
		Lcd_Point(x + xc, y - yc, show);
		//    Lcd_Point(x - xc, y + yc, show);
		Lcd_Point(x - xc, y - yc, show);
		//    Lcd_Point(x + yc, y + xc, show);
		Lcd_Point(x + yc, y - xc, show);
		//    Lcd_Point(x - yc, y + xc, show);
		Lcd_Point(x - yc, y - xc, show);
		if (p < 0)
		p += (xc++ << 2) + 6;
		else
		p += ((xc++ - yc--)<<2) + 10;
	}
}
*/
//画矩形
void Lcd_Box(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char draw, unsigned char fill)
{
    if (fill)
    {
        for (; x1 != x2; x1++)  Lcd_Line(x1,y1,x1,y2,draw);
    }
    else
    {
        Lcd_Line(x1,y1,x1,y2,draw);
        Lcd_Line(x1,y1,x2,y1,draw);
        Lcd_Line(x2,y1,x2,y2,draw);
        Lcd_Line(x1,y2,x2,y2,draw);
    }
}

//***********************************************************************
//以x,y点为原点,以degree为角度,画一条从内径到外径之间的线段
//(show=1画点,show=0清点)
//***********************************************************************
/*
void glcd_degree_line(int x, int y, int degree, int inner_radius, int outer_radius, unsigned char show)
{
  int fx,fy,tx,ty;

  fx = x + (inner_radius * sin(degree * 3.14 / 180));    //  ???????????????
  fy = y - (inner_radius * cos(degree * 3.14 / 180));
  tx = x + (outer_radius * sin(degree * 3.14 / 180));
  ty = y - (outer_radius * cos(degree * 3.14 / 180));
  glcd_line(fx,fy,tx,ty,show);
}

//画上函数线段的包括线
void glcd_degree_line_bold(int x, int y, int degree, int inner_radius, int outer_radius, unsigned char show)
{
  int fx,fy,tx,ty;

  fx = x + (inner_radius * sin(degree * 3.14 / 180));    //  ???????????????
  fy = y - (inner_radius * cos(degree * 3.14 / 180));
  tx = x + (outer_radius * sin(degree * 3.14 / 180));
  ty = y - (outer_radius * cos(degree * 3.14 / 180));
  glcd_line(fx,fy,tx,ty,show);
  glcd_line(fx+1,fy+1,tx+1,ty+1,show);
  glcd_line(fx-1,fy-1,tx-1,ty-1,show);
}
*/

//画进度条函数
/*
void glcd_fill(int x1, int y1, int x2, int y2, unsigned char persent,char first)
{
	char M,horizon_line,horizon_line2,i,str1[10];
	if(persent>100)return;
	if(!first){
		glcd_line(x1,y2,x2,y2,1);  // down
		glcd_line(x2,y1,x2,y2,1);  // right
		glcd_line(x1,y1,x1,y2,1);  // left
		first=1;
	}
	M=100/abs(y2-y1);
	
	horizon_line=persent/M;
	for(i=0;i<horizon_line;i++)
	glcd_line(x1+2,y2-2-i,x2-2,y2-2-i,1);
	
	horizon_line2=100/M;
	for(i=horizon_line;i<horizon_line2;i++)
	glcd_line(x1+2,y2-2-i,x2-2,y2-2-i,0);
	
	sprintf(str1,"%02d%% ",persent);
	glcd_print_ram( (x2+x1)/16-1 , (y2+y1)/16,str1);
}
*/

// 初始化端口
void Lcd_Setup()  
{
	LCD_CTRL_DDR |= (0x01<<LCD_WR)|(0x01<<LCD_RD)|(0x01<<LCD_CD)|(0x01<<LCD_CE);
	LCD_CTRL_PORT |= (0x01<<LCD_WR)|(0x01<<LCD_RD)|(0x01<<LCD_CD)|(0x01<<LCD_CE);//|_BV(glcd_fs_PIN);
	Lcd_SET_DATADIR_OUT();
}

// 初始化显存和显示模式
void Lcd_Init()  
{
	Lcd_ClrScreen();
//    Lcd_SendCom2( 0x00,0x00,0x22 );     //设置偏移量寄存器,0x00

     
    Lcd_SendCom2((unsigned char)(LCD_TEXT_BASE),(LCD_TEXT_BASE>>8),COMM_SET_CBUFFER );     //设置文字显示区域首地址CharAddr
    Lcd_SendCom2( LCD_WIDTH,0x00,COMM_SET_CWIDTH);                                      //设置文字显示区域宽度:30字节   
	Lcd_SendCom2((unsigned char)(LCD_GRAPH_BASE),(LCD_GRAPH_BASE>>8),COMM_SET_GBUFFER);   //设置图形显示区域首地址GraphAddr
	Lcd_SendCom2( LCD_WIDTH,0x00,COMM_SET_GWIDTH);                                      //设置图形显示区域宽度:30字节                                                    

    Lcd_ClrText();       //清文字缓冲区
    Lcd_ClrGraph();      //清图形缓冲区
         
	Lcd_SendCom0(COMM_CUR_MODE|0x07);    //设置光标形状 cursor size 8x8
	Lcd_SendCom0(COMM_SET_MODE|0x01);    //设置显示方式: CGROM方式 文本\图形 "或"
	Lcd_SendCom0(COMM_TEXT_GRAPH);       //设置显示开关: 1001 1000 图形开,文字开

}

⌨️ 快捷键说明

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