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

📄 lcd.h.bak

📁 128*64液晶显示月历模式万年历
💻 BAK
字号:
#include <absacc.h>
#include <intrins.h>
#include <reg51.h>

#define dataPort P1 //定义P1口为数据口
#define uchar unsigned char
#define uint unsigned int

sbit di = P2^0; //数据/命令选择
sbit en = P2^1; //使能
sbit rw = P2^2; //读写选择
sbit cs1 = P2^3; //左屏片选(低有效)
sbit cs2 = P2^4; //右屏片选(低有效)

//状态检查
void CheckState(void)
{
  uchar dat;
  dat = 0x00;
  di=0;
  rw=1;
/*	do
	{
		P1=0xff;
		en=1;
		dat=P1; 
		en=0;
		dat&=0x80; //仅当第7位为0时才可操作
	}while(dat);*/
}

void nop(void)
{
  _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}

//显示数据,写一个直接数据
void WriteByte(uchar data)
{
  CheckState();
  di = 1;
  rw = 0;
  dataPort = data;
  en = 1;
  en = 0;
}

//发送命令
void SendCMD(uchar cmd)
{
  CheckState();
  di = 0;
  rw = 0;
  dataPort = cmd;
  en = 1;
  en = 0;  	
}

//设定行地址(页)--X 0-7
void SetLine(uchar line)
{
	line &= 0x07; // 0<=line<=7
	line |= 0xb8; //1011 1xxx
	SendCommandToLCD(line);
}

//设定列地址--Y 0-63
void SetColumn(uchar column)
{
	column &= 0x3f; // 0=<column<=63
	column |= 0x40; //01xx xxxx
	SendCommandToLCD(column);
}

//设定显示开始行--XX
void SetStartLine(uchar startline) //0--63
{
	//startline &= 0x07;
	startline |= 0xc0; //1100 0000
	SendCommandToLCD(startline);
}

//开关显示
void SetOnOff(uchar onoff)
{
	onoff |= 0x3e; //0011 111x
	SendCommandToLCD(onoff);
}

//选择屏幕
//screen: 0-全屏,1-左屏,2-右屏
void SelectScreen(uchar screen)
{ //北京显示器:负有效 cs1: 0--右; cs2: 0--左
	switch(screen)
	{ 
		case 0: 
			cs1 = 0;//全屏
			nop();
			cs2 = 0; 
			nop();
			break; 
		case 1: 
			cs1 = 1;//左屏
			nop();
			cs2 = 0;
			nop();
			break;
		case 2: 
			cs1 = 0;//右屏
			nop();
			cs2 = 1;
			nop();
			break;
		default:
			break;
	}
}

//清屏 screen: 0-全屏,1-左屏,2-右
void ClearScreen(uchar screen)
{
  uchar i = 0;
  uchar j = 0;
  for (i = 0; i < 8; i++)
  {
    SetLine(i);
    for (j = 0; j < 64; j++)
    {
      WriteByte(0x00);	
    }	
  }	
}

//初始化屏幕
void InitLCD(void)
{
  uchar i = 2000; //延时
  while (i--);
  SetOnOff(1); //开显示
  ClearScreen(1);//清屏
  ClearScreen(2);
  SetStartLine(0); //开始行:0
}

//显示8*8点阵
//lin:行(0-7), column: 列(0-127)
//address : 字模区首地址
void Show8x8(uchar line, uchar column, uchar *addr)
{
  uchar i = 0;
  
  if (column < 64 ) //如果列数<64则从第一屏上开始写
  {
    SelectScreen(1);
    SetLine(line);
    SetColumn(column);
    
    for (i = 0; i < 8; i++)
    {
      if ((column + i) < 64)
      { 
      	WriteByte( *(addr + i) );
      }
      else
      {
        SelectScreen(2);
        SetLine(line);
        SetColumn(column - 64 + i);
        WriteByte( *(addr + i) );	
      }	
    }	
  }
  else //如果列数>64则从第二屏上开始写
  {
    SelectScreen(2);
    SetLine(line);
    column = column - 64;
    SetColumn(column);
    
    for (i = 0; i < 8; i++)
    {
      if ((column + i) < 64)
      { 
      	WriteByte( *(addr + i) );
      }
      else
      {
        SelectScreen(1);
        SetLine(line);
        SetColumn(column - 64 + i);
        WriteByte( *(addr + i) );	
      }	
    }	    	
  }	
}

//显示汉字
void ShowChina(uchar line, uchar column, uchar num)
{
  uchar *address;
  address = &ChinaCode[num][0];
  
  Show8x8(line, column, *address);
  Show8x8(line, column + 8, address + 8);
  Show8x8(line + 1, column, address + 16);
  Show8x8(line + 1, column + 8, address + 24);
}

⌨️ 快捷键说明

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