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

📄 lcd_plug_12864j.c

📁 C51单片机对st7920并行方式驱动128*64液晶驱动,实现任意位置坐标位置写入图片;自动画线;自动画圆;任意位置反显等功能。
💻 C
字号:
/*=====================================================================*\
|																		|
|名称:LCD功能模块集														|
|         										    					|
|工作模块:XYadr()           位置输入函数								|
|		  wcode()     		工作状态输入函数							|
|		  wdata()			数据输入函数								|
|		  read()			数据读出函数								|
|		  LCDc()			清屏函数									|
|		  Display()			显示开/关控制函数							|
|         startline()		开始行设置函数								|
|         reset()			复位函数									|
|		  time()			延时函数									|
|																		|
|调用函数:_nop_ ()			空操作函数									|
|																		|
\*=====================================================================*/

#include <AT89X52.H>

sbit E    = P2^0;     				//时钟端(从高变低时数据输入)
sbit RW   = P2^7;    				//数据读(H)/写(L)选择
sbit RS   = P2^6;      				//数据(H)/状态(L)寄存器选择
sbit busy = P0^7;   				//lcd busy bit

#define LOW		0
#define HIGH	1
#define comm  0
#define dat   1

#define ystart     0x80
#define xustart    0x80
#define xdstart    0x88

//初始化指令
#define CLEAR_SCREEN	0x01		//清屏指令:清屏且AC值为00H
#define AC_INIT			0x02		//将AC设置为00H。且游标移到原点位置
#define CURSE_ADD		0x06		//设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE		0x30		//工作模式:8位基本指令集
#define EXT_MODE		0x36		//工作模式:8位扩展指令集
#define DISPLAY_ON		0x0f		//显示开,显示游标,且游标位置反白
#define DISPLAY_OFF		0x08		//显示关
#define CURSE_DIR		0x14		//游标向右移动:AC=AC+1
#define SET_CG_AC		0x40		//设置AC,范围为:00H~3FH
#define SET_DD_AC		0x80

void wr_lcd(bit dat_comm,unsigned char content);
void chk_busy (void);
//void delay_us(unsigned char i);
//void delay_ms(unsigned char i);
void _nop_ (void);

void init_lcd (void)
{
	wr_lcd(comm,0x30);  /*30---基本指令动作*/
  	wr_lcd(comm,0x01);  /*清屏,地址指针指向00H*/
  	wr_lcd(comm,0x0c);  /*开显示,关游标*/ 
  	wr_lcd(comm,0x06);  /*光标的移动方向*/
}

void wr_lcd(bit dat_comm,unsigned char content)	 //工作状态(1)/数据(0)输入函数
{
  	chk_busy ();
  	if(dat_comm)
   	{
    	RS = 1;   //data
    	RW = 0;   //write
   	}
  	else 
   	{
    	RS = 0;   //command
    	RW = 0;   //write
   	}
  	P0=content;   //output data or comm
	E=0;
	_nop_();
	E=1;
	_nop_();
	E=0;
}

unsigned char rd_lcd(void)				//数据读出函数
{
	unsigned char a;
	chk_busy ();
	RS = 1;
    RW = 1;   //read
    P1 = 0xFF;
	E = 1;
	a = P0;
	E = 0;
	RW = 0;   //write
	return(a);
}

void XYadr(unsigned char x,unsigned char y)
{
	if(y > 31)
	{
		x = x + xdstart;
		y = y - 32 + ystart;
	}
	else
	{
		x = x + xustart;
		y = y + ystart;
	}
	wr_lcd(comm,y);
	wr_lcd(comm,x);
}

//使用前先用 wr_lcd(comm,0x02);//对游标地址复位
void cursor_disp(bit open, unsigned char mode)	//游标反显,显示开关移动控制函数
{
	if(open)
   	{
		switch (mode)
		{
	    case 0:
			  wr_lcd(comm,0x0e);  		/*开游标,关反显,游标不移*/
			  break;
		case 1:
			  wr_lcd(comm,0x0e);  		/*开游标,关反显,游标左移*/
		      wr_lcd(comm,0x10);
			  break;
	    case 2:
			  wr_lcd(comm,0x0e);  		/*开游标,关反显,游标右移*/
		      wr_lcd(comm,0x14);
			  break;
		case 3:
			  wr_lcd(comm,0x0d);  		/*关游标,开反显,反显不移*/
			  break;
	    case 4:
			  wr_lcd(comm,0x0d);  		/*关游标,开反显,反显左移*/
		      wr_lcd(comm,0x10);
			  break;
	    case 5:
			  wr_lcd(comm,0x0d);  		/*关游标,开反显,反显右移*/
		      wr_lcd(comm,0x14);
			  break;
		case 6:
			  wr_lcd(comm,0x0f);  		/*开游标,开反显,不移*/
			  break;
		case 7:
			  wr_lcd(comm,0x0f);  		/*开游标,开反显,一起左移*/
		      wr_lcd(comm,0x10);
			  break;
		case 8:
			  wr_lcd(comm,0x0f);  		/*开游标,开反显,一起右移*/
		      wr_lcd(comm,0x14);
			  break;
		}
   	}
  	else 
   	{
    	wr_lcd(comm,0x0c); 	 			/*关游标,关反显*/
   	}
}

void LCDc(unsigned char a)				//清屏函数
{ 
	unsigned char x,y;
	wr_lcd(comm,0x30);
  	wr_lcd(comm,0x01);					/*清屏,地址指针指向00H*/
	wr_lcd(comm,0x34);
	for(y=0;y<32;y++)
	{
		wr_lcd(comm,y + ystart);
	    wr_lcd(comm,xustart);
		for(x=0;x<32;x++)
		{
			wr_lcd(dat,a);
		}
	}
    wr_lcd(comm,0x30);
}

void chk_busy(void)
{
  	P0 = 0xff;
  	RS = 0;
  	RW = 1;
  	E = 1;
  	while(busy == 1);
  	E = 0;
}
/*
void delay_us(unsigned char i)
{
		while(i!=0)i--;
}

void delay_ms(unsigned char ms)
{
  	unsigned char i,j;
  	for(i=0;i<ms;i++)
  	for(j=0;j<15;j++)
  	_nop_();
}*/

⌨️ 快捷键说明

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