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

📄 lcd.c

📁 本人用avr 单片机atmega128开发控制产品的源码。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <iom128v.h>
#include <control.h>
#include <lcd.h>
#include <macros.h>
#define   chg1(a) (((a&0xf0)>>4)*10+(a&0x0f))
#define   chg2(a) (((a/10)<<4)+(a%10))

extern const unsigned char FONT_LOGO[][492];
extern const unsigned char FONT_CHAR[];
extern const unsigned char FONT_HEAD[][246];
extern unsigned char time[7];
extern unsigned char  temp_alarm[3],temp_alarm1[3];
extern unsigned char temperature_h[2],temperature_l[2]; 


//-----------液晶---------------------
//D_I=PF0,LCD_E1=PF1,LCD_E2=PF2,LCD_R/W=PF3
unsigned char LCD_BACK_FLAG;			   //反白标志=1:反白
unsigned char LCD_ASCII_FLAG;			   //8*8字符标志
unsigned char LCD_UNDER_LINE_FLAG;		   //下划线
unsigned char LCD_ROW;					   //当前光标字符行
unsigned char LCD_COL;					   //当前光标字符列
unsigned char LCD_X;					   //当前显示列(点)
unsigned char LCD_WIDTH;
//---------------------------------------------------------
// NAME:	LCD_WR_L()
// ENTRY:	b
// RETURN:	void
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_WR_L(unsigned char b)//液晶数据发送子程序(左)
{
	SREG&=~0X80; 
	PORTF&=~0X01;	  
	PORTF|=0X01;	    	   
	PORTF&=~0X08;    
	DDRA=0XFF;		  
	PORTA=b;
	PORTF|=(1<<2);	   
	PORTF|=(1<<1);	  
	PORTF&=~(1<<1);	   	
	SREG|=0X80; 	   
}
//---------------------------------------------------------
// NAME:	LCD_W_CTRL()
// ENTRY:	b
// RETURN:	void
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_W_CTRL(unsigned char b)//液晶控制码发送子程序
{
	SREG&=~0X80; 
	PORTF&=~(1<<0);	   //D_I=0;
	PORTF&=~(1<<3);	   //RW=0;
	DDRA=0XFF;		   //P0=b;
	NOP();
	PORTA=b;
	NOP();
	PORTF&=~(1<<1);	   //CS1=0;
	PORTF|=(1<<1);	   //CS1=1;
	PORTF&=~(1<<1);	   //CS1=0;
	
	PORTF&=~(1<<0);	   //D_I=0;
	PORTF&=~(1<<3);	   //RW=0;
	DDRA=0XFF;		   //P0=b;
	NOP();
	PORTA=b;
	NOP();
	PORTF&=~(1<<2);	   //CS2=0;
	PORTF|=(1<<2);	   //CS2=1;
	PORTF&=~(1<<2);	   //CS2=0;
	SREG|=0X80; 
}
//---------------------------------------------------------
// NAME:	LCD_WR_R()
// ENTRY:	b
// RETURN:	void
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_WR_R(unsigned char b)//液晶数据发送子程序(左)
{
	SREG&=~0X80; 
	DDRA=0XFF;		   
	PORTF&=~(1<<0);	   //D_I=0;
	PORTF|=(1<<0);	   //D_I=1;
	PORTA=b;		   		   //P0=b;
	NOP();
	NOP();
	NOP();
	PORTF|=(1<<1);	   //CS1=1;
	PORTF|=(1<<2);	   //CS2=1;
	PORTF&=~(1<<2);	   //CS2=0;
	SREG|=0X80; 
}
//---------------------------------------------------------
// NAME:	LCD_W_Y()
// ENTRY:	Y
// RETURN:	void
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_W_Y(unsigned char y)	//RAM行设置
{
	unsigned char a;
	a=0xb8+y;
	LCD_W_CTRL(a);
}
//---------------------------------------------------------
// NAME:	LCD_W_X()
// ENTRY:	X
// RETURN:	void
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_W_X(unsigned char x)	//RAM列设置
{
	LCD_W_CTRL(x);
}
//---------------------------------------------------------
// NAME:	LCD_WD16()
// ENTRY:	*P,N,u_line
// RETURN:	void
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_WD16( unsigned char *p,unsigned char n,unsigned char u_line)	//写16点阵字模,
{
	unsigned char x;		  			 //点
	unsigned char d;					 //点
	x=LCD_X;
	if(x<LCD_HALF_X)					 //半屏列数
	{
		LCD_W_X(x % LCD_HALF_X);		 //RAM列设置
		while((x<LCD_HALF_X)&&(n>0))
		{
			d=(*p++);    				 //取字模
			if(LCD_ASCII_FLAG)
				d=(d>>4)|(*(p)<<4);     	 //组合
			if(u_line) d=d | 0x80;
			if(LCD_BACK_FLAG) d = ~d;	 //反白标志
			LCD_WR_L(d);	  	  		 //液晶数据发送子程序(左)
			p++; n--; x++;
		}
	}
	if(x<LCD_MAX_X)       				 //每屏列数(122*32)
	{
		LCD_W_X(x % LCD_HALF_X);		 //RAM列设置
		while((x<LCD_MAX_X)&&(n>0))
		{
			d=(*p++);			   		 //液晶数据发送子程序(左)
			if(LCD_ASCII_FLAG)
				d=(d>>4)|(*(p)<<4);     //组合
			if(u_line) d=d | 0x80;
			if(LCD_BACK_FLAG) d = ~d;	//反白标志
			LCD_WR_R(d);	  	  		//液晶数据发送子程序(左)
			p++; n--; x++;
		}
	}
}
//---------------------------------------------------------
// NAME:	SHOW_LOGO()
// ENTRY:	S
// RETURN:	void
// FUNCTION:: 显示LOGO画面
// MODIFY:	2004.2.3
//--------------------------------------------------------
void SHOW_LOGO(unsigned char s) //显示LOGO画面
{
	unsigned char y,z,a;
	unsigned int x;
	LCD_W_X(0);
	LCD_W_Y(0);
	x=0;
	for(a=0;a<=122;a++)
	{
		for(y=4;y>=1;y--)
		{
			LCD_W_Y(y-1);
			if(a<61)
			{
				LCD_W_X(a); 
				z=FONT_LOGO[s][x];      
				LCD_WR_L(z);
			}
			else
			{
				LCD_W_X(a%62);
				z=FONT_LOGO[s][x];                             
				LCD_WR_R(z);
			}
			x+=1;
		}
	}
}
//---------------------------------------------------------
// NAME:	SHOW_LOGO()
// ENTRY:	void
// RETURN:	void
// FUNCTION:LCD清屏子程序   
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_CLR(void)
{
	unsigned char x,y;
	LCD_W_CTRL(0xc0);
	for(y=0;y<=8;y++)
	{
		LCD_W_CTRL(y+0xb8);
#ifdef LCD_4LINE
		LCD_W_CTRL(0x40);
#else
		LCD_W_CTRL(0);
#endif
		
		//                LCD_W_CTRL(0x40);
		for(x=0;x<=64;x++)
		{
			LCD_WR_R(0x00);
			LCD_WR_L(0x00);
		}
	}
}
//---------------------------------------------------------
// NAME:	LCD_CURSOR()
// ENTRY:	ROW,COL
// RETURN:	void
// FUNCTION:LCD定光标     
// MODIFY:	2004.2.3
//--------------------------------------------------------
void LCD_CURSOR(unsigned char ROW,unsigned char COL)
{
	LCD_ROW=ROW;
	LCD_COL=COL;
	LCD_X=COL*LCD_WIDTH;	//字符宽度(点)
}
//---------------------------------------------------------
// NAME:	Disp_char_16_8()
// ENTRY:	page,colum
// RETURN:	void
// FUNCTION:Display 16*8 char   
// MODIFY:	2004.2.3
//--------------------------------------------------------
void Disp_char_16_8(unsigned char page,unsigned char colum,unsigned char k, unsigned char ch)       //显示16*8点阵字体
{                                                              //ch=1, 反白
	unsigned char  i;
	if((page > 3)||(colum > 121))  return;
	LCD_W_CTRL(0xC0);
	if( colum<61 )
	{
		LCD_W_CTRL(page|0xb8);      //Page address
		LCD_W_CTRL(colum&0x7f);     //colum address
		for(i=1;i<=8;i++)
		{
			if(ch)
				LCD_WR_L(~FONT_CHAR[k*16+2*i-1]);
			else
				LCD_WR_L(FONT_CHAR[k*16+2*i-1]);
		}
		LCD_W_CTRL((page+1)|0xb8);      //Page address
		LCD_W_CTRL(colum&0x7f);     //colum address
		if(ch)
			LCD_WR_L(0xff);
		else 
			LCD_WR_L(0);	   
		LCD_W_CTRL((colum+1)&0x7f);     //colum address
		for(i=1;i<=7;i++)
		{
			if(ch)
				LCD_WR_L(~FONT_CHAR[k*16+2*i]);
			else
				LCD_WR_L(FONT_CHAR[k*16+2*i]);
		}       
	}
	else
	{
		LCD_W_CTRL(page|0xb8);
		LCD_W_CTRL((colum-61)&0x7f);
		for(i=1;i<=8;i++)
		{
			if(ch)
				LCD_WR_R(~FONT_CHAR[k*16+2*i-1]);
			else
				LCD_WR_R(FONT_CHAR[k*16+2*i-1]);
		}
		LCD_W_CTRL((page+1)|0xb8);      //Page address
		LCD_W_CTRL((colum-61)&0x7f);     //colum address
		if(ch)
			LCD_WR_R(0xff);
		else
			LCD_WR_R(0);
		for(i=1;i<=7;i++)
		{
			if(ch)
				LCD_WR_R(~FONT_CHAR[k*16+2*i]);
			else
				LCD_WR_R(FONT_CHAR[k*16+2*i]);
		}        
	}
}

//---------------------------------------------------------
// NAME:	SHOW_ALL_HEAD()
// ENTRY:	n
// RETURN:	void
// FUNCTION:display the head     
// MODIFY:	2004.2.3             
//---------------------------------------------------------
void SHOW_ALL_HEAD(unsigned char n) 
{
	unsigned char y,z,a;
	unsigned int x=0;
	LCD_W_X(0);
	LCD_W_Y(0);
	for(a=0;a<=121;a++)
	{
		for(y=2;y>=1;y--)
		{
			LCD_W_Y(y-1);
			if(a<61)
			{
				LCD_W_X(a);
				z=FONT_HEAD[n][x];
				LCD_WR_L(z);
			}
			else
			{
				LCD_W_X(a%62);
				z=FONT_HEAD[n][x];
				LCD_WR_R(z);
			}
			x+=1;
		}
	}
	
}
//---------------------------------------------------------
// NAME:	LCD_INIT()
// ENTRY:	void
// RETURN:	void
// FUNCTION:液晶初始化   
// MODIFY:	2004.2.3             
//---------------------------------------------------------
void LCD_INIT(void)

⌨️ 快捷键说明

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