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

📄 51blcd.h

📁 基于Proteus的51单片机实验平台
💻 H
字号:
#ifndef __51BLCD_H__
#define __51BLCD_H__

#define uchar  unsigned char
#define uint   unsigned int

//以下常数定义来自LCD数据手册  
#define LCD_line_1			  0x00
#define LCD_line_2			  0x40
#define LCD_line_3			  0x14
#define LCD_line_4			  0x54

#define LCD_CLEAR_SCREEN	0x01    //清屏
#define LCD_HOMING        0x02    //光标返回原点  

#define LCD_AC_UP			    0x06
#define LCD_AC_DOWN			  0x04    //default
#define LCD_MOVE			    0x05    //画面可平移  
#define LCD_NO_MOVE			  0x04    //default

#define LCD_SHOW			    0x0c    //显示开
#define LCD_HIDE			    0x08    //显示关
#define LCD_CURSOR			  0x0a 	  //显示光标 
#define LCD_NO_CURSOR		  0x08    //无光标
#define LCD_FLASH			    0x09    //光标闪动
#define LCD_NO_FLASH		  0x08    //光标不闪动  

#define LCD_PIC_MOVE		  0x18	  //画面平移一个字符  
#define LCD_CURSOR_MOVE 	0x10	  //光标平移一个字符  
#define LCD_RIGHT_MOVE		0x14	  //右移
#define LCD_LEFT_MOVE		  0x10	  //左移

#define LCD_SET_7			    0x38	  //8位接口,双行显示,5*7字符  
#define LCD_SET_10			  0x3c	  //8位接口,双行显示,5*10字符  

#define LCD_CGRAM_ADDR(addr)	(0x40|addr)	    //cgaddr 0~3fH
#define LCD_DDRAM_ADDR(addr)	(0x80|addr)	    //ddaddr

uchar code CGRAM[8][8] = {{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x11,0x0A,0x04,0x1F,0x04,0x1F,0x04,0x00},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02},{0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02}};

#define CW_add XBYTE[0x87ff] // 1000 0111
#define CR_add XBYTE[0xA7ff] // 1010 0111
#define DW_add XBYTE[0x97ff] // 1001 0111
#define DR_add XBYTE[0xB7ff] // 1011 0111


//8us延时
void delay_lcd(uchar i)
{
	while(i--);
}

//LCD状态检测  
uchar LCD_r_state(uchar *addr)
{
	uchar temp1,temp2;
	temp1 = CR_add;//读LCD状态 	
	temp2 = temp1 & 0x7f;
	*addr = temp2;
  //根据最高位判断LCD是否忙  
	if((bit)(temp1 & 0x80)) return (1);
	else  return (0);
}

//将要显示的字符写入LCD  
void Print(uchar *str)
{
	while(*str!='\0')
	{
		DW_add = *str;//直接针对外部地址些 movx指令  
		str++;
		delay_lcd(10);
	}
}

//带定位参数的字符写函数  
void LCD_w_data(uchar line,uchar column,uchar *p_data)
{
	switch(line)
	{
		case 1:
			CW_add = LCD_DDRAM_ADDR(LCD_line_1+column-1);//光标定位  
			delay_lcd(10);
			Print(p_data);
			break;
		case 2:
			CW_add = LCD_DDRAM_ADDR(LCD_line_2+column-1);
			delay_lcd(10);
			Print(p_data);
			break;
		case 3:
			CW_add = LCD_DDRAM_ADDR(LCD_line_3+column-1);
			delay_lcd(10);
			Print(p_data);
			break;
		case 4:
			CW_add = LCD_DDRAM_ADDR(LCD_line_4+column-1);
			delay_lcd(10);
			Print(p_data);
			break;
		default:
			break;
	}
}

//LCD初始化
void LCD_init(void)
{
	uchar *p,temp1;
	p = &temp1;
	while(LCD_r_state(p));
	CW_add = LCD_SET_7;
	delay_lcd(10);
	CW_add = LCD_SHOW;
	delay_lcd(10);
	CW_add = LCD_CLEAR_SCREEN;
	delay_lcd(205);
	CW_add = LCD_AC_UP;
	delay_lcd(10);
	CW_add = LCD_CURSOR;
	delay_lcd(10);
}
#endif

⌨️ 快捷键说明

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