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

📄 lcd._c

📁 基于AVR单片机的热电偶测量系统源码
💻 _C
字号:
/************************************************************
  FileName: lcd.c
  Description: 液晶显示模块初始化lcd,向lcd发送命令字和数据,显示指定大小的图像,清屏。                        
  Function List:  
    1.Send_Byte()
      功能:向lcd的控制芯片发送数据
      
    2.Send_Commnad()
      功能:向lcd的控制芯片发送命令字
      
    3.Gen_Column_MSB()
      Gen_Column_MSB()
      功能:生成设置高4位和低4位列地址的命令字

    4.Initial_LCD()
      功能:初始化lcd
      
    5.Gen_Page()
      功能:生成设置页地址的命令字
      
      
    6.Clear_DDRAM()
      功能:清除lcd指定页内显示的所有数据
      
    7.Bmp8x8()
      功能:显示8个点乘8个点的图像
      
    9.Bmp8x16()
      功能:显示8个点乘16个点的图像
      
      
    10.Bmp8x16_Rev()_
      功能:反白显示8个点乘16个点的图像

    11.Draw_NtoArab()
      功能:将数值显示为阿拉伯数字

***********************************************************/
#include <iom16v.h>
#include <macros.h>
#include "main.h"
#include "lcd.h"

void Send_Byte(unsigned char bdata)
{    
     set_CS;    		//模拟时序信号
     set_CS;
	 set_RS;
	 set_WR;
	 _nop;      		//开始发送数据
	 PORTA = bdata;    	//将显示数据放在端口A 
     set_RS;
     clr_CS;
     clr_WR;
     _nop;
     clr_WR;
     _nop;
     set_WR;
     _nop;
     set_CS;
     set_RS;
}


void Send_Command(unsigned char cdata)
{    
         set_CS;
	 set_RS;
	 set_WR;
	 _nop;               //开始发送命令
	 PORTA = cdata;     //将命令字放在端口A
	 clr_RS;
	 clr_CS;
	 _nop;
	 clr_WR;
	 _nop;
	 set_WR;
	 _nop;
	 set_CS;
	 set_RS;
}



unsigned char Gen_Column_MSB(unsigned char column)
{
    unsigned char temp; //用于保存列数的高4bit命令字
    temp = column+0x04 ;	
    temp = temp >>4;  //右移4位,得到高4位的列数据
    temp |=0x10;   //00010000,将列地址的DB4置1
    return temp;
}




unsigned char Gen_Column_LSB(unsigned char column)
{
    unsigned char temp = column;
    temp = column+0x04 ;	
    temp &= 0x0f;	//取出column的低四位
    return temp;
}




unsigned char Gen_Page(unsigned char page)
{
    unsigned char temp;
    temp = page & 0x0f;
    temp |= 0xb0;   //得到显示数据页的控制字
    return temp;
}




void Initial_LCD(void)
{
	  Send_Command(0xe2);	//初始化内部功能(RESET),初始化初始显示线,列地址,页地址和普通
	  			//输出地址状态到初始状态,但是不能影响显示数据RAM的内容
          wait;                 //等待2个时钟周期
	  Send_Command(0xaf);	//Display on
	  Send_Command(0x23);	//internal voltage regulator resistor ratio,(4.5)0x23
	  Send_Command(0x2f);	//内部供电VC=VR=VF:111,使内部VC,VR,VF的电压控制电路工作
	  Send_Command(0x40);	//初始化显示线在line address 0
	  Send_Command(0x81);	//设置参考电压模式对比度共64级	
	  Send_Command(0xa1);	
	  Send_Command(0xa1);	
	  Send_Command(0xa3);	//选择LCD偏置电压比率以驱动LCD,bias=1
	  Send_Command(0xa4);	//全亮显示,EON=0,normal display(不管显示RAM中有何数据)
	  Send_Command(0xb0);	//设置页地址为0
	  Send_Command(0x0c);   //选择COM(行地址)输出扫描方向,决定LCD驱动器的输出状态。SHL=0,normal direction(COM0-COM63)
	  Send_Command(0xad);	//设置STATIC INDICATOR STATUS(SM=1,STATIC INDICATOR ON)
	  Send_Command(0x03);	//STATUS OF STATIC INDICATOR OUTPUT ALWAYS ON
}



void Clear_DDRAM(unsigned char c_page_start,unsigned char c_page_end)
{ 
	unsigned char i,j;
	unsigned char start_page;   //用于存放清除的起始页数
	unsigned char c_column_msb=0x10,c_column_lsb=0x04;  //清除的起始列为第4列
	
	start_page = Gen_Page(c_page_start);    //取得清除的起始页地址
	for(j=c_page_start;j<=c_page_end;j++)
	{
    	Send_Command(0x10);	//从第4列开始清除LCD显示的数据
        Send_Command(0x04);
        Send_Command(start_page);	//清除位置在第start_page页
        for(i=0;i<=127;i++)
        {
        	Send_Byte(WHITE);	//清除页内所有列显示的数据
        }
        start_page++;   //清除下一页数据
    }
}

//////////////////////////////////////////////////////////////////////////
//绘制一个8*8大小的位图
//////////////////////////////////////////////////////////////////////////
void Bmp8x8(unsigned char page,unsigned char column,const unsigned char 
*pdata)
{
	  unsigned char i;
	  
	  Send_Command(Gen_Page(page));	//送页地址
	  Send_Command(Gen_Column_LSB(column));	//送低4位地址
	  Send_Command(Gen_Column_MSB(column));	//送高4位地址
	  for(i=0;i<=7;i++)	//水平宽度为8列
	  {
	  	  Send_Byte(*pdata);
	  	  pdata++;
	  }
}
//////////////////////////////////////////////////////////////////////////
//绘制一个8*16大小的位图
//////////////////////////////////////////////////////////////////////////
void Bmp8x16(unsigned char page,unsigned char column,const unsigned char 
*pdata)
{
	   unsigned char i;
	   unsigned char j;
	   
	   for(j=0;j<=1;j++)
	   {
	   	   Send_Command(Gen_Page(page));
	       Send_Command(Gen_Column_LSB(column));
	       Send_Command(Gen_Column_MSB(column));  
     	   for(i=0;i<=7;i++)
	       {
	   	       Send_Byte(*pdata);
	   	       pdata++;
	       }
	       page++;
	   }
}

//////////////////////////////////////////////////////////////////////////
//绘制一个反白显示8*16大小的位图
//////////////////////////////////////////////////////////////////////////
void Bmp8x16_rev(unsigned char page,unsigned char column,const unsigned char 
*pdata)
{
	   unsigned char i;
	   unsigned char j;
	   
	   for(j=0;j<=1;j++)
	   {
	   	   Send_Command(Gen_Page(page));
	       Send_Command(Gen_Column_LSB(column));
	       Send_Command(Gen_Column_MSB(column));  
     	   for(i=0;i<=7;i++)
	       {
	   	       Send_Byte(~(*pdata));
	   	       pdata++;
	       }
	       page++;
	   }
}

//////////////////////////////////////////////////////////////////////
//数值大小与阿拉伯数字之间的转换显示
//////////////////////////////////////////////////////////////////////
void Draw_NtoArab(unsigned char page,unsigned char column,unsigned char number)
{
	switch(number)
	{
		  case 0x00:
		  	{
		  		  Bmp8x16(page,column,arab_0);
		  		  break;
		  	}
		  case 0x01:
		  	{
		  		  Bmp8x16(page,column,arab_1);
		  		  break;
		  		  
		  	}
		  case 0x02:
		  	{
		  		  Bmp8x16(page,column,arab_2);
		  		  break;
		  	}
		  case 0x03:
		  {
		  	      Bmp8x16(page,column,arab_3);
		  	      break;
		  }
		  case 0x04:
		  	{
		  		   Bmp8x16(page,column,arab_4);
		  		   break;
		  	}
		  case 0x05:
		  	{
		  		   Bmp8x16(page,column,arab_5);
		  		   break;
		  	}
		  case 0x06:
		  	{
		  		   Bmp8x16(page,column,arab_6);
		  		   break;
		  	}
		  case 0x07:
		  	{
		  		   Bmp8x16(page,column,arab_7);
		  		   break;
		  	}
		  case 0x08:
		  	{
		  		   Bmp8x16(page,column,arab_8);
		  		   break;
		  	}
		  case 0x09:
		  	{
		  		   Bmp8x16(page,column,arab_9);
		  		   break;
		  	}
		  default:
		  	{
		  		  Bmp8x16(page,column,arab_0);
		  	}
		  	    break;
	}
}
//////////////////////////////////////////////////////////////////////
//数值大小与阿拉伯数字之间的转换反白显示
//////////////////////////////////////////////////////////////////////
void Draw_NtoArab_rev(unsigned char page,unsigned char column,unsigned char number)
{
	switch(number)
	{
		  case 0x00:
		  	{
		  		  Bmp8x16_rev(page,column,arab_0);
		  		  break;
		  	}
		  case 0x01:
		  	{
		  		  Bmp8x16_rev(page,column,arab_1);
		  		  break;
		  		  
		  	}
		  case 0x02:
		  	{
		  		  Bmp8x16_rev(page,column,arab_2);
		  		  break;
		  	}
		  case 0x03:
		  {
		  	      Bmp8x16_rev(page,column,arab_3);
		  	      break;
		  }
		  case 0x04:
		  	{
		  		   Bmp8x16_rev(page,column,arab_4);
		  		   break;
		  	}
		  case 0x05:
		  	{
		  		   Bmp8x16_rev(page,column,arab_5);
		  		   break;
		  	}
		  case 0x06:
		  	{
		  		   Bmp8x16_rev(page,column,arab_6);
		  		   break;
		  	}
		  case 0x07:
		  	{
		  		   Bmp8x16_rev(page,column,arab_7);
		  		   break;
		  	}
		  case 0x08:
		  	{
		  		   Bmp8x16_rev(page,column,arab_8);
		  		   break;
		  	}
		  case 0x09:
		  	{
		  		   Bmp8x16_rev(page,column,arab_9);
		  		   break;
		  	}
		  default:
		  	{
		  		  Bmp8x16_rev(page,column,arab_0);
		  	}
		  	    break;
	}
}

//////////////////////////////////////////////////////////////////////////
//绘制菜单界面
//////////////////////////////////////////////////////////////////////////
void Draw_Menu_Interface()
{     Bmp8x16(0x00,0x18,T);
	  Bmp8x16(0x00,0x20,maohao);
	  Bmp8x16(0x00,0x38,maohao);
	  Bmp8x16(0x00,0x50,maohao);
	  Bmp8x16(0x02,0x00,t);
	  Bmp8x16(0x02,0x08,maohao);
	  Bmp8x16(0x02,0x30,xiaoshudian);
	  Bmp8x16(0x02,0x40,E);
	  Bmp8x16(0x02,0x48,maohao);
	  Bmp8x16(0x02,0x70,xiaoshudian);
	  Bmp8x16(0x04,0x10,l);
	  Bmp8x16(0x04,0x18,g);
	  Bmp8x16(0x04,0x20,P);
	  Bmp8x8(0x04,0x28,ll);
	  Bmp8x8(0x05,0x28,H);
	  Bmp8x16(0x04,0x30,maohao);
	  Bmp8x16(0x04,0x50,xiaoshudian);
      Bmp8x16(0x06,0x10,l);
	  Bmp8x16(0x06,0x18,g);
	  Bmp8x16(0x06,0x20,P);
	  Bmp8x8(0x06,0x28,lll);
	  Bmp8x8(0x07,0x28,H);
	  Bmp8x16(0x06,0x30,maohao);
	  Bmp8x16(0x06,0x50,xiaoshudian);
      
}

⌨️ 快捷键说明

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