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

📄 lcd240128.c

📁 采用普通单片机控制的电桥测试仪
💻 C
字号:
/*
*********************************************************************************************************
*										File Name:	LCD240128.c
*
*								Last Modified Data: 2006-08-10
*
*										Last Version:V1.0
*
*								Description:对LCD240*128进行读写控制
*
*********************************************************************************************************
*/

#define _LCD240128_
#include "..\Inc\Include.h"

uchar status;    			// 液晶状态变量定义

/*
********************************************************************************************************
* Function:R_ST		关
*
* Descriptions:读状态值
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/

void R_ST(void)	
{
	cd=1;
	wr=1;
	P0=0xff;
	rd=0;
	status=P0;
	rd=1;
}

/*
********************************************************************************************************
* Function:RWCheck
*
* Descriptions:指令/数据读写状态检测
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/

void RWCheck(void)		
{
	do{ 
		R_ST();
	}while((status&0x03)==0);
}				

/*
********************************************************************************************************
* Function:AutoWCheck
*
* Descriptions:自动写状态检测
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/

void AutoWCheck(void)
{
	do
	{ 
		R_ST();
	}
	while((status&0x08)==0);
}				

/*
********************************************************************************************************
* Function:DataWrite
*
* Descriptions:写数据函数
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/
				
void DataWrite(uchar data1)
{
	RWCheck();
	cd=0;//
	rd=1;
	wr=0;
	P0 = data1;
	wr=1;
}

/*
********************************************************************************************************
* Function:ComWrite
*
* Descriptions:写指令函数
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/
	  	
void ComWrite(uchar command)	
{
	RWCheck();
	cd=1;//
	rd=1;
	wr=0;
	P0=command;
	wr=1;
}		

/*
********************************************************************************************************
* Function:Data1ComWrite
*
* Descriptions:写带一个参数指令
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/
void Data1ComWrite(data1,comand) //写带一个参数指令  	
{
	DataWrite(data1);
	ComWrite(comand);
}

/*
********************************************************************************************************
* Function:Data2ComWrite
*
* Descriptions:写带两个参数指令 
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void Data2ComWrite(data1,data2,comand) //写带两个参数指令   
{
	DataWrite(data1);
	DataWrite(data2);
	ComWrite(comand);
}

/*
********************************************************************************************************
* Function:	CLEAR
*
* Descriptions:清屏子函数,将液晶显示区全部清掉
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void CLEAR(void)
{
    uchar i=0, j=0x0f;
    Data2ComWrite(GrahomeAddr,GrahomeAddr>>8,0x24);
    ComWrite(0xB0);
    do
	{
    	do
		{
        	AutoWCheck();
           	DataWrite(0x00);
        }while((--i)!=0);

    }while((--j)!=0);
   	ComWrite(0xB2);
}									

/*
********************************************************************************************************
* Function:InitLcd
*
* Descriptions:对LCD240*128初始化
*
* Input:无
* 
* OutPut:无
*******************************************************************************************************
*/
void InitLcd(void)
{	   
	uchar i=0xe0, j=0x11;

	GrahomeAddr = 0x01E0;//MenuHomeAddr[0];
  	ComWrite(0x90);
	Data2ComWrite(0x25,0x20,0x21);
   	Data2ComWrite(0x00,0x00,0x40);
   	Data2ComWrite(0x1e,0x00,0x41);
    Data2ComWrite(GrahomeAddr,GrahomeAddr>>8,0x42);
    Data2ComWrite(0x1e,0x00,0x43); 
  	ComWrite(0xA7);
    Data2ComWrite(0x0f,0x00,0x22); 
    ComWrite(0x81);
	Data2ComWrite(0x00,0x00,0x24);
    ComWrite(0xB0);
    do{
    	do{
        	AutoWCheck();
           	DataWrite(0x00);
        }while((--i)!=0);

    }while((--j)!=0);
   	ComWrite(0xB2);
   	Data2ComWrite(0x0,0x0,0x21); 
   	ComWrite(0x9c);	
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:液晶汉字写入子函数,X,Y为坐标,M,N为宽度,P是数据指针
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void WRI_CC(uchar x, uchar y, uchar m, uchar n, uchar p[])
{
    uchar k,temp;
    uint   z;

    z = y * 0x1e + x + GrahomeAddr;
    x = z & 0x00ff;
    y = (z & 0xff00)>>8;
    m = m / 8;
    do
	{
    	Data2ComWrite(x, y, 0x24);
       	for(k=0; k<m; k++)
        {
        	temp =*p;
            if(fb==1)	temp = ~temp;
            p++;
            Data1ComWrite(temp,0xC0);
        }
        z = (0x1e+x+(y<<8));
        x = (uchar)(z&0x00ff);
        y = (uchar)((z&0xff00)>>8);
    }while((--n)!=0);
	fb = 0;
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:液晶汉字写入子函数,X,Y为坐标,M,N为宽度,P是数据指针
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void WRI_CC_Black(uchar x, uchar y, uchar m, uchar n, uchar p[])
{
    uchar k,temp;
    uint   z;

    z = y * 0x1e + x + GrahomeAddr;
    x = z & 0x00ff;
    y = (z & 0xff00)>>8;
    m = m / 8;
    do
	{
    	Data2ComWrite(x, y, 0x24);
       	for(k=0; k<m; k++)
        {
        	temp =*p;
			temp = ~temp;
            p++;
            Data1ComWrite(temp,0xC0);
        }
        z = (0x1e+x+(y<<8));
        x = (uchar)(z&0x00ff);
        y = (uchar)((z&0xff00)>>8);
    }while((--n)!=0);
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:	液晶描点子程序,X,Y为坐标点,Y的最高位为1时,描,0时,清
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void  WRI_D(uchar x, uchar y)
{
    uint  temp1,temp2,temp3;
    uchar i, j;
    //绘点子程序
    temp1=(y&0x7f)*0x1e+GrahomeAddr;
    temp2=temp1&0x00ff;
    temp3=(temp1&0xff00)>>8;
    temp1=temp2+x/0x08;
    temp2=temp1&0x00ff;
    if(temp1>255) j=1;
    else    j=0;
    temp3=temp3+j;
    Data2ComWrite(temp2,temp3,0x24);
    i=x%0x08;
    i=~i;
    i=i&0x07;
    j=y;
    y=i;
    i=((j&0x0f)<<4)+((j&0xf0)>>4);
    i=i&0x08|0xf0;
    ComWrite(i|y);
}

/*
********************************************************************************************************
* Function:
*
* Descriptions:	液晶画线子程序,点到点,画线还是清线由M决定,为1时清;
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void ONLINE(uchar x1, uchar y1, uchar x2, uchar y2, uchar m)
{
    uchar k;      //画线程序调用绘点子程序//
    uchar x;
    if(m==3||m==4)
    {
        k=(y2-y1)/2;
        do
		{
            y1=(m==3) ? (y1|0x80):y1;
            WRI_D(x1, y1);
            y1=y1+2;                                  // 竖线    //
        }while((--k)!=0);
        return ;
    }
    if(x1==x2)
    {
        k=y2-y1;
        do{
            y1=(m==0) ? (y1|0x80):(y1&0x7f);
            WRI_D(x1, y1);
			y1++;                                  //竖线   //
        }while((--k)!=0);
    }
    else if(y1==y2)
    {
        k=x2-x1;
        do
		{
            y1=(m==0) ? (y1|0x80):(y1&0x7f);
            WRI_D(x1, y1);                          //  横线 //
            x1++;
        }while((--k)!=0);
    }
    else
    {
        k=x2-x1;
        if(y1<y2)x=1;else x=0;
        do
		{
            y1=(m==0) ? (y1|0x80):(y1&0x7f);
            WRI_D(x1, y1);                        // 45度角的直线//
            x1++;
            if(x)   y1++;  else  y1--;
        } while((--k)!=0);
    }
}
/*
********************************************************************************************************
* Function:
*
* Descriptions:画矩形
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void Print_Box(uchar x1, uchar y1,uchar x2,uchar y2,m)	   //画矩形
{
	ONLINE(x1,y1,x1,y2,m);
	ONLINE(x1,y1,x2,y1,m);
	ONLINE(x1,y2,x2,y2,m);
	ONLINE(x2,y1,x2,y2+1,m);
}

/*
********************************************************************************************************
* Function:
*
* Descriptions: 清汉字
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void CLEAR_ICC(uchar x, uchar y, uchar m, uchar n)
{
    uchar  k;
    uint  z;

    z=y*0x1e+x+GrahomeAddr;
    x=z&0x00ff;
    y=(z&0xff00)>>8;
    m=m/8;

    do{
		Data2ComWrite(x,y,0x24);
        for(k=0;k<m;k++)
        {
         	Data1ComWrite(0,0xc0);
        }

        z=(0x1e+x+(y<<8));
        x=(uchar)(z&0x00ff);
        y=(uchar)((z&0xff00)>>8);
    }while((--n)!=0);
}

/*
********************************************************************************************************
* Function:
*
* Descriptions:西文字符显示子程序
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void WRI_N(uchar x, uchar y, uchar p)
{   
    uint z;
    z = y*0x1e+x;
    x = z&0x00ff;
    y = z>>8;
   	Data2ComWrite(x, y, 0x24);
    Data1ComWrite(p-0x20, 0xC4);
}

/*
********************************************************************************************************
* Function:
*
* Descriptions:
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void WRI_CGRAM(uchar *p)
{
    uchar i=0;
    
	Data2ComWrite(0x00,0x7c,0x24);
    ComWrite(0xB0);
    for(i=0; i<120; i++)
    {
		AutoWCheck(); 
		DataWrite(*p++);
	}
    ComWrite(0xB2);
}

/*********************************************************************************************************
* Function:
*
* Descriptions:数值显示函数 ,x、y 地址,value 显示值,小数点n 数字位数
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/

void WRI_VALUE(uchar x, uchar y, ulong value, uchar n)
{
	uchar cnt, m,xs;
     xs=(n - 1);
	if(value >= 1000000)           m = 7;
    else if(value >= 100000)       m = 6;
	else if(value >= 10000) 	   	 m = 5;
	else if(value >= 1000)      	 m = 4;
	else if(value >= 100)		     m = 3;
	else if(value >= 10)		     m = 2;
	else{
		if(n == 0)	m = 1;else m = 2;
	}
	cnt = 0;
	WRI_String(x-6, y, "   ");
 if(n < m)
  { 
	for(; m>0; m--)
	{
		WRI_N(x-cnt, y, value%10+0x30);
		value /= 10;
		cnt += 1;
		if (cnt == n)
		{
			WRI_String(x-cnt,  y ,".");
			cnt += 1;
		}
	}
  }
  else
  {
    for(;n>0;n--)
     {
      WRI_N(x-cnt, y, value%10+0x30);
	  value /=10; 
      cnt += 1;
      if (cnt == xs)
		{
			WRI_String(x-cnt, y, ".");
			cnt += 1;
		}               
     }

   } 
}
// 起点X坐标
void WRI_CC_VALUE(uchar x, uchar y, uint value, uchar m, uchar n)
{
	uchar i;
	if(n != 0)	m += 1;	
	x = x + m -1;
	for(i=0; i<m; i++)
	{
		if(n&&i==n)
		{
			WRI_CC(x-i, y, 8, 8, Number[10]);
			continue;
		}
		WRI_CC(x-i, y, 8, 8, Number[value%10]);
		value /= 10;
	}
}

void WRI_CC_VALUE_Black(uchar x, uchar y, uint value, uchar m, uchar n)
{
	uchar i;
	if(n!=0)	m += 1;	
	x = x + m - 1;
	for(i=0; i<m; i++)
	{
		if(n&&i==n)
		{
			WRI_CC_Black(x-i, y, 8, 8, Number[10]);
			continue;
		}
		WRI_CC_Black(x-i, y, 8, 8, Number[value%10]);
		value /= 10;
	}
}

/*
********************************************************************************************************
* Function:
*
* Descriptions:字符串显示函数 ,x、y 地址,p 字符串首地址
*
* Input:
* 
* OutPut:
*******************************************************************************************************
*/
void WRI_String(uchar x, uchar y, uchar p[])
{
	uchar temp = '@';
	while(*p != '\0')
	{
		temp = *p;
		WRI_N(x, y, temp);
		x += 1; 	p++;
		if(x>=30) {x -= 30,y += 1;};
	}

}

uchar WRI_Number(uchar x, uchar y, uint value, uchar n)
{
	uchar i, cnt, m;

	for(i=0; i<6; i++)
	{
		WRI_CC(x+i, y, 8, 8, Blank);
	}

	if(value >= 10000) 		m = 5;
	else if(value >= 1000)	m = 4;
	else if(value >= 100)		m = 3;
	else if(value >= 10)		m = 2;
	else{if(n == 0)	m = 1;else m = 2;}
	x = x + m;				if(n == 0) x -= 1;
	cnt = 0;
	for(; m>0; m--)
	{
		WRI_CC(x-cnt, y, 8, 8, Number[value%10]);
		value /= 10;
		cnt += 1;
		if (cnt == n)
		{
			WRI_CC(x-cnt, y, 8, 8, Number[10]);
			cnt += 1;
		}
	}
	return x + 1;
}

⌨️ 快捷键说明

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