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

📄 lcd.c

📁 这七个程序都是本人为51系列单片机开发的应用程序
💻 C
字号:

/********************************************************************
	created:	2005/11/02
	created:	2:11:2005   20:48
	filename: 	D:\astario\workspace\MCUcode\src\lcd.c
	file path:	D:\astario\workspace\MCUcode\src
	file base:	lcd
	file ext:	c
	author:		Astario
	
	  purpose:	液晶显示
	  
最后修改:		2005/11/23  18:45:49 
*********************************************************************/
#include "userdef.h"
#include "device.h"
#include "lcd.h"
#include "generalfunc.h"
#ifdef INCLUDE_lcd
/*==================================================*/
/*GDM12864E LCD */
/*==================================================*/
void LCD_Wr_Cmd(BYTE One_Byte)
{
	delay_Nms(1);
	ChipselNone();
	_nop_();
	//MPU 写指令到指令暂存器(IR)
	LCD_RS=0;//DB7——DB0 为显示指令数据
	LCD_RW=0;//写
	PORTDATA=One_Byte;
	ChipselLCD();
	_nop_();
	_nop_();
	ChipselNone();//LCDCS高变低时写入,高时读取,其他无动作
	_nop_();
	LCD_Rd_Busy();
	delay_Nms(1);
}

void LCD_Wr_Data(BYTE One_Byte)
{
	ChipselNone();
	_nop_();
	//MPU 写入数据到数据暂存器(DR)
	LCD_RS=1;//DB7——DB0 为显示数据
	LCD_RW=0;//写
	PORTDATA=One_Byte;
	ChipselLCD();
	_nop_();
	_nop_();
	ChipselNone();
	_nop_();
	LCD_Rd_Busy();
}
#if(0)
BYTE LCD_Rd_Data()
{
	BYTE ret;
	ChipselNone();
	PORTDATA=0xff;
	_nop_();
	LCD_RS=1;//DB7——DB0 为显示数据
	LCD_RW=1;//从内部RAM 读取数据D7——D0
	ChipselLCD();
	_nop_();
	_nop_();
	ret=PORTDATA;
	ChipselNone();
	_nop_();
	return ret;
}
#endif
BYTE LCD_Rd_Cmd()
{
	BYTE ret;
	ChipselNone();
	PORTDATA=0xff;
	_nop_();
	LCD_RS=0;//DB7——DB0 为显示指令数据
	LCD_RW=1;//读出忙标志(BF)及地址记数器(AC)的状态
	ChipselLCD();
	_nop_();
	_nop_();
	ret=PORTDATA;
	ChipselNone();
	_nop_();
	return ret;
}
//遇0返回
void LCD_Wr_Bytes(BYTE* str, BYTE n)
{
	BYTE i;
	for (i=0;i<n && str[i]!=0;i++)
	{
		LCD_Wr_Data(str[i]);
	}
}

void LCD_Wr_String(BYTE* str)
{
	BYTE i=0;
	while (str[i])
	{
		LCD_Wr_Data(str[i]);
		i++;
	}
}

/*LCD initiate*/
void LCD_init()
{
	LCD_Wr_Cmd(0x30);	/*0x30 8bits , base function*/
	delay_Nms(10);
	LCD_Wr_Cmd(0x0C);	/*0x0F Display on,无游标,无反白 */
	delay_Nms(10);
	//LCD_Wr_Cmd(0x03);        //AC归0,不改变DDRAM内容
	LCD_Wr_Cmd(0x01);	/*0x01 clear display*/
	delay_Nms(10);
	LCD_Wr_Cmd(0x06);	/* 0x06 cussor right move ,ACC+1*/
	delay_Nms(10);
	LCD_BACKLIGHT=!LCD_BACKLIGHT;	//没有这一句背光点不亮,奇怪了
	LCD_SetBGLight(1);
}
/*设置显示位置, row:1,2,3,4; position 1,2...8 */
code BYTE DDRAMEbase[4]={0x80,0x90,0x88,0x98};

void LCD_Wr_Num(WORD num,BYTE len)//按照固定长度显示数字,如果长度=0则正常在LCD上显示
{
	BYTE i;
	if(!len)
	{
		i=4;
		while (!getdigi(num,i) && i>0)
		{
			i--;
		}
		len=i+1;
	}
	while(len)
	{
		len--;
		LCD_Wr_Data(getdigi(num,len)+0x30);
	}
}

void LCD_Wr_BCD(BYTE bcd)
{
	BYTE tmp=0x30+Hhalf(bcd);
	if (tmp>=0x3a)
		tmp+=7;
	LCD_Wr_Data(tmp);
	tmp=0x30+Lhalf(bcd);
	if (tmp>=0x3a)
		tmp+=7;
	LCD_Wr_Data(tmp);
}
#endif

⌨️ 快捷键说明

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