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

📄 lcd.h

📁 驱动t6963系列的液晶显示器
💻 H
字号:

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <absacc.h>

#define uchar unsigned char
#define uint unsigned int

#define LCD_LENGTH  128 
#define LCD_WIDTH  64

#define Graphic            1
#define TXT            0

#define LCD_DATA  XBYTE[0x0000]
#define LCD_Command  XBYTE[0x0100]         

sbit P10=P1^0;

sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;

/*************************** 是否处于忙态 ************************/

void CheckRW(void)		//指令&数据读写状态,看是否处于忙态
{
	while( (LCD_Command & 0x03) != 0x03) ;
}

void CheckAutoWrite(void)  //数据自动写状态,看是否处于忙态
{
	while( (LCD_Command & 0x08) == 0) ;	
}

void CheckScreen(void)	  //屏读屏拷贝是否出错
{
	while( LCD_Command & 0x40 );		
}


/********************** 读写数据 ************************/
void WriteData(uchar uData)	//写入
{
	LCD_DATA = uData;	
}

uchar ReadData(void)  //读
{
	uchar uData;
	uData = LCD_DATA;
	return uData;
}

/************************ 设置命令操作 *****************/
void Set_Com(uchar com)
{
	CheckRW();
	LCD_Command = com;
}

void  Set_Com_1(uchar param1,uchar com) 
{
	CheckRW();
	LCD_DATA = 	param1;
	CheckRW();
	LCD_Command = com;
}

void Set_Com_2(uchar param1,uchar param2,uchar com)
{
	CheckRW();
	LCD_DATA = 	param1;
	CheckRW();
	LCD_DATA = 	param2;
	CheckRW();
	LCD_Command = com;	
}

/******************** 延时子程序 **************/

void Delay(uint time)
{
     uchar us,usn;
     while(time!=0)                        //12M Crystal
     { 
           usn = 2;
           while(usn!=0)
           {
                 us=0xf2;
                 while (us!=0){us--;};
                 usn--;
           }
           time--;
     }	
}

/************************* 初使化LCD ****************/ 

void Init_LCD(void)
{
   Set_Com_2(0x00,0x00,0x40);		//设置文本显示区首地址
   Set_Com_2(LCD_LENGTH/8,0x00,0x41);	//设置文本显示区宽度
   Set_Com_2(0x00,0x08,0x42);				//设置图形显示区首地址0x0800	
   Set_Com_2(LCD_WIDTH/8,0x00,0x43);    //设置图形显示区宽度
   Set_Com(0xA7);				//设置光标形状 8x8方块
   Set_Com(0x81);				 //显示方式设置 文本xor图形(异或)	
   Set_Com(0x9C);				 //显示开关设置 文本开,图形开,光标闪烁关		
}

/******************** 清屏操作 *******************************/

void Clear_LCD(uchar FillByte)	//使用FillByte清屏
{
     uint i = 8192;      		
     if(FillByte)      				
     {                  			
           i -= 2*1024;	
           Set_Com_2(0x00,0x08,0x24);      //填充0xff时候要在图形区
     }
     else
           Set_Com_2(0x00,0x00,0x24);
     Set_Com(0xB0);                  				//进入自动写
     while(i--)
     {
           CheckAutoWrite();
           WriteData( FillByte );
     }
     Set_Com(0xB2);  
}

/*********************** 设定显示地址 *****************/
void LocateXY(uchar x,uchar y,uchar mode)		   //0为字符模式,1为图形模式				
{
     uint  temp;
     temp= LCD_LENGTH/8*y + x;
     if(mode)                        //mode=1为Graphic
     {                              //如果图形模式要加上图形区首地址0x0800
           temp+=0x0800;
     }
     Set_Com_2(temp & 0xff,temp/256,0x24);
}

/*********************** 显示字符和字符串 ***************/
void Show_Char(uchar x,uchar y,uchar CharByte)
{
	LocateXY(x,y,TXT);
	Set_Com_1(CharByte,0xC4);	
}

void Show_String(uchar x,uchar y,uchar *str)
{
     while(*str != 0)
     {
           if(x> 29)            //自动换行
           {
                 x=0;
                 y++;
           }
           Show_Char(x,y,*str);
           ++x;
           ++str;
     }	
}

⌨️ 快捷键说明

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