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

📄 lcd.c

📁 基于MFRC500读卡芯片的完整读卡程序
💻 C
字号:
/*----------------------------------------------------------------------------------
LCD.C                                               
128*64点阵液晶基本函数库                              
-----------------------------------------------------------------------------------*/

//-----------------------------------------------------
#include "Main.h"
#include "PORT.h"
#include "CHAR_MAP.h"
#include "DELAY.h"

/*-------私有函数原型-------------------------------------------------*/
static void sendorder(void);
static void  senddata(void);
static void  setpage( int a);
static void  setpage( int a);
static void  setaddr( int addr);
static void  x(char n);
static void  ClearScreen( int a);
static  void  put_china(char a,char b,char n);

//---------------------------------------------------------
//显示中文界面
//---------------------------------------------------------
void LCD_China_Disp(void)
{
   	  put_china(6,36,10);   //欢迎光临
      put_china(6,52,11);                     
      put_china(6,70,12);
      put_china(6,86,13);

	  put_china(4, 0,3);    //卡号
      put_china(4,16,4);

      put_china(2, 0,8);    //扣除  元
      put_china(2,16,9);
	  put_china(2,80,7);

	  put_china(0, 0,5);    //余额   元
      put_china(0,16,6);
	  put_china(0,80,7);


}
//---------------------------------------------------------
//显示数据
//--------------------------------------------------------
void LCD_Update(tByte *p,tByte *q)
{    
      put_char(2,40,p);                  //显示扣除金额
	  put_char(0,40,q);                  //显示卡内余额
         	   	                     
}

//-----------------------------------------------------
//显示汉字函数
//-------------------------------------------------------
void put_china(char a,char b,char n) 
{ 
	char i,*p;
	p=cha+32*n;
	setpage(a+1);
	setaddr(b);
	for(i=0;i<16;i++)
	{x(*p);
	p++;}
	setpage(a);
	setaddr(b);
	for(i=16;i<32;i++)
	{x(*p);
	p++;}
}
//---------------------------------------------------------
//显示字符串函数
//---------------------------------------------------------
void put_char(char a,char b,tByte *n)   
{
    char i,*p;
    while(*n!='\0')
	    {
            p=chb+16*(*n-32);		
			setpage(a+1);
			setaddr(b);
			for(i=0;i<8;i++)
			{x(*p);
			p++;
			}

			setpage(a);
			setaddr(b);
			for(i=8;i<16;i++)
			{ x(*p);
			  p++;
			}

   	        b = b+8;
	    	if((b + 8) > 127)
		    {
			b = 0;
			if(a < 2 ) break;
			else a -= 2;
		    }
	        n++;
	}
}
 
//---------------------------------------------------------
//初始化LCD函数
//---------------------------------------------------------
void LCD_Init(void)
{
	P_IO_Data_Data =0x00;   //端口初始化               	
	P_IO_Control_Data =0x8f;
	P_IO_Data_Data =0xaf;	//LCD_ON								  
	sendorder();
	P_IO_Data_Data =0x2f;	//上电模式
	sendorder();
	P_IO_Data_Data =0x81;	//电量设置模式(屏幕亮度)
	sendorder();
	P_IO_Data_Data =0x30;	//指令数据
	sendorder();
	P_IO_Data_Data =0x27;	//内部电压调节电阻设置
	sendorder();
	P_IO_Data_Data =0xa2;	//偏压设置
	sendorder();
	P_IO_Data_Data =0xc0;	//Com 扫描方式设置(0xc8反向)
	sendorder();
	//P_IO_Data_Data =0xa1;
	P_IO_Data_Data =0xa0;  //Segment方向选择(0xa1反向)
	sendorder();
	P_IO_Data_Data =0xa4;  //全屏变亮(0xa5变亮)
	sendorder();
	P_IO_Data_Data =0xa6;  //正相反相显示控制指令,RAM中数据不变(0xa7)正常反白
	sendorder();
	P_IO_Data_Data =0xac;  //静态指示器控制指令(0xad为on)
	sendorder();
	P_IO_Data_Data =0x00;  
	sendorder();
	P_IO_Data_Data =0x40;  //设置显示起始行对应RAM行号
	sendorder();
	//setpage(0);
	//setaddr(0);
	ClearScreen(0);
} 
//---------------------------------------------------------
//发送命令子函数
//---------------------------------------------------------
void sendorder(void)
{
	char c;
	c=(C_AOP_Pin|C_EP_Pin|C_RWP_Pin);
	c^=0xff;
	P_IO_Control_Data=c;
	delay_nus(1);
	P_IO_Control_Data=c|C_EP_Pin;
	delay_nus(2);
	P_IO_Control_Data=c;		 
	delay_nus(10);
}
//---------------------------------------------------------
//写入数据子函数
//---------------------------------------------------------
void senddata(void)
{
	char c;
	c=(C_AOP_Pin|C_EP_Pin|C_RWP_Pin);
	c^=0xff;
	P_IO_Control_Data=c;
	delay_nus(1);
	P_IO_Control_Data=c|C_AOP_Pin|C_EP_Pin;
	delay_nus(2);
	P_IO_Control_Data=c;
	delay_nus(10);
}
//---------------------------------------------------------
//页设置子函数
//---------------------------------------------------------
 void setpage( int a)
{
	a|=0xb0;
	P_IO_Data_Data =a;
	sendorder();
}
//---------------------------------------------------------
//列设置子函数
//---------------------------------------------------------
void setaddr( int addr)
{
	int b;
	b=addr>>4;
	b&=0x1f;
	b|=0x10;
	addr&=0x0f;
	P_IO_Data_Data =addr;
	sendorder();
	P_IO_Data_Data =b;
	sendorder();
 }
//---------------------------------------------------------
//送数子函数
//---------------------------------------------------------
void x(char n)
{
	P_IO_Data_Data =n;	
	senddata();
}
//---------------------------------------------------------
//清屏子函数     fill ROM with 0 or 1
//---------------------------------------------------------
void ClearScreen( int a)
{
	 int z1,z2;
	if(a!=0) a=0xff;
	for(z1=0;z1<8;z1++)
	{
	setpage(z1);
	setaddr(0);
	    for(z2=0;z2<128;z2++)
	    {
	    P_IO_Data_Data =a;
	     senddata();
	    }
	}
}


//----------------------------------------------------------
//------------END LCD.C--------------------------------------




⌨️ 快捷键说明

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