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

📄 lcd.h

📁 万年历
💻 H
字号:
#ifndef _LCD
#define _LCD
/*********************预定义***************************/
#define uchar unsigned char
#define DelayNOP(); {_nop_();_nop_();_nop_();_nop_();};

/*******************LCD端口配置************************/
#define LCD_data P0  //12864数据口
sbit RS=P1^0;      //寄存器选择输入 
sbit RW=P1^1;      //液晶读/写控制
sbit EN=P1^2;  
    //液晶使能控制

/******************************************************/
/* 函数名称:Delay(uint m)
/* 功    能:延迟时间=a*1ms
/* 入口参数:
/* 出口参数:无
/******************************************************/
void Delay(uchar m)           
{
	unsigned int i,j;
	for(i=0;i<m;i++)
    	for(j=0;j<10;j++);
}

/******************************************************/
/* 函数名称:LCD_Busy(void)
/* 功    能:检测BF标志,0时为闲
/* 入口参数:
/* 出口参数:无
/******************************************************/
bit LCD_Busy(void)
{                          
    bit result;
    RS = 0;
    RW = 1;
    EN = 1;
    DelayNOP();
    result = (bit)(P0&0x80);
    EN = 0;
    return(result); 
}

/******************************************************/
/* 函数名称:LCD_Wcmd(uchar cmd)
/* 功    能:RS=L,RW=L,E=高脉冲,D0-D7=指令码
/* 入口参数:cmd
/* 出口参数:无
/******************************************************/
void LCD_Wcmd(uchar cmd)
{                          
   while(LCD_Busy());
    RS = 0;
    RW = 0;
    EN = 0;
    _nop_();
    _nop_(); 
    P0 = cmd;
    Delay(1);
    EN = 1;
    Delay(1);
    EN = 0; 
}

/******************************************************/
/* 函数名称:LCD_Wdat(uchar dat)
/* 功    能:RS=H,RW=L,E=高脉冲,D0-D7=数据
/* 入口参数:dat
/* 出口参数:无
/******************************************************/
void LCD_Wdat(uchar dat)
{                          
   while(LCD_Busy());
    RS = 1;
    RW = 0;
    EN = 0;
    P0 = dat;
    DelayNOP();
    EN = 1;
    Delay(1);
    EN = 0; 
}

/******************************************************/
/* 函数名称:LCD_Init()
/* 功    能:LCD初始化
/* 入口参数:
/* 出口参数:无
/******************************************************/
void LCD_Init()
{ 
	P0=0xFF;
	P2=0xFF;
	Delay(40);
         //并口方式。
	Delay(1);

	Delay(1);

	Delay(10);
	LCD_Wcmd(0x30);
	Delay(100);
	LCD_Wcmd(0x30);
	Delay(37);
	LCD_Wcmd(0x08);
	Delay(100);
	LCD_Wcmd(0x10);
	Delay(100);
	LCD_Wcmd(0x0c);      //显示开,关光标
	Delay(100);
	LCD_Wcmd(0x01);      //清除LCD的显示内容
	Delay(100);
	LCD_Wcmd(0x06);
	Delay(100);
}

/******************************************************/
/* 函数名称:LCD_Pos(uchar X,uchar Y)
/* 功    能:字符显示位置设置
/* 入口参数:X,Y
/* 出口参数:无
/******************************************************/
void LCD_Pos(uchar X,uchar Y)
{                          
   uchar pos;
   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}
   pos = X+Y ; 
   LCD_Wcmd(pos);     //显示地址
}

/******************************************************/
/* 函数名称:Display()
/* 功    能:消除反白图形出现噪点
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void Display()	
{ 
	uchar i,j;
	LCD_Wcmd(0x34);        //写数据时,关闭图形显示
	for(i=0;i<32;i++)
	{
		LCD_Wcmd(0x80+i);    //写入水平坐标值
		LCD_Wcmd(0x80);      //写入垂直坐标值
		for(j=0;j<16;j++)    //写入两个8位元的数据    
		LCD_Wdat(0x00);     
		Delay(1);
	}
	for(i=0;i<32;i++)
	{ 
		LCD_Wcmd(0x80+i);
		LCD_Wcmd(0x88);
		for(j=0;j<16;j++)         
		LCD_Wdat(0x00);    
		Delay(1);
	}
	LCD_Wcmd(0x36);       //写完数据,开图形显示 
}

/******************************************************/
/* 函数名称:Photo_Display(uchar x,uchar y,uchar width)
/* 功    能:反白显示
/* 入口参数:X,Y,width
/* 出口参数:无
/******************************************************/
void Photo_Display(uchar x,uchar y,uchar width)		//反白,X值为0-7,Y值为0-3,width为行反白格数
{ 
	uchar i,j,flag=0x00;
	Display();
	if(y>1)
	{
		flag=0x08;
		y=y-2;
	}
	LCD_Wcmd(0x34);        //写数据时,关闭图形显示,且打开扩展指令集
	for(i=0;i<16;i++)
	{
		LCD_Wcmd(0x80+(y<<4)+i);
		LCD_Wcmd(0x80+flag+x);
	for(j=0;j<width;j++)
	{
		LCD_Wdat(0xff);
		LCD_Wdat(0xff);
	}
	Delay(1);
	}
	LCD_Wcmd(0x36);       //写完数据,开图形显示 
}

/******************************************************/
/* 函数名称:LCD_Show(uchar *clock_time,uchar *number)
/* 功    能:基本界面显示
/* 入口参数:clock_time,number
/* 出口参数:无
/******************************************************/
void LCD_Show(uchar *clock_time,uchar *number)
{
	
	LCD_Pos(0,0);
	LCD_Wdat(0x4c);
	LCD_Wdat(0x4c);
	LCD_Pos(0,1);
	LCD_Wdat(0x59);
	LCD_Wdat(0xba);
	LCD_Pos(0,3);
	LCD_Wdat(number[clock_time[7]/10]);
	LCD_Wdat(number[clock_time[7]%10]);
	LCD_Pos(0,4);
	LCD_Wdat(number[clock_time[6]/16]);
	LCD_Wdat(number[clock_time[6]%16]);
	LCD_Pos(0,7);
	LCD_Wdat(0x0e);
	LCD_Wdat(0x0e);
	LCD_Pos(1,0);
	LCD_Wdat(number[clock_time[4]/16]);
	LCD_Wdat(number[clock_time[4]%16]);	
	LCD_Pos(1,1);
	LCD_Wdat(0xd4);
	LCD_Wdat(0xc2);
	LCD_Pos(1,2);
	LCD_Wdat(number[clock_time[3]/16]);
	LCD_Wdat(number[clock_time[3]%16]);	
	LCD_Pos(1,3);
	LCD_Wdat(0xc8);
	LCD_Wdat(0xd5);
	LCD_Pos(1,5);
	LCD_Wdat(0xd0);
	LCD_Wdat(0xc7);
	LCD_Pos(1,6);
	LCD_Wdat(0xc6);
	LCD_Wdat(0xda);
	LCD_Pos(1,7);
	LCD_Wdat(number[clock_time[5]%16]);	
	LCD_Pos(2,0);
	LCD_Wdat(number[clock_time[2]/16]);
	LCD_Wdat(number[clock_time[2]%16]);	
	LCD_Pos(2,1);
	LCD_Wdat(':');
	LCD_Wdat(number[clock_time[1]/16]);
	LCD_Pos(2,2);
	LCD_Wdat(number[clock_time[1]%16]);
    LCD_Wdat(':');	
	LCD_Pos(2,3);
	LCD_Wdat(number[clock_time[0]/16]);
	LCD_Wdat(number[clock_time[0]%16]);	
}

/******************************************************/
/* 函数名称:LCD_Clear()
/* 功    能:LCD屏幕清除
/* 入口参数:无
/* 出口参数:无
/******************************************************/
void LCD_Clear()
{
	RS=0;
	RW=0;
	Delay(100);
	LCD_Wcmd(0x01);
	Delay(100);
}

/******************************************************/
/* 函数名称:LCD_Wstr(uchar *p)
/* 功    能:单行字符显示
/* 入口参数:P
/* 出口参数:无
/******************************************************/
void LCD_Wstr(uchar *p)
{
	while(*p)
	LCD_Wdat(*p++);
}
#endif

⌨️ 快捷键说明

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