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

📄 lcd.c.txt

📁 基于51单片机的温度和电压采集与循环显示的控制程序
💻 TXT
字号:
#include <INTRINS.H>
#include <ABSACC.H>

//定义背光控制信号
sbit LCD_BL = P1^4;

/*
函数:LcdLightOn()
功能:点亮背光灯
*/
void LcdLightOn()
{
	LCD_BL = 1;
}


/*
函数:LcdLightOff()
功能:熄灭背光灯
*/
void LcdLightOff()
{
	LCD_BL = 0;
}


/*
函数:LcdGetBF()
功能:读出状态位BF
返回:
	BF=1,表示忙,不可进行任何操作
	BF=0,表示不忙,可以进行正常操作
*/
bit LcdGetBF()
{
	unsigned char dat;
	dat = XBYTE[0xD002];	//XBYTE的定义见<ABSACC.H>
	return (bit)(dat & 0x80);
}


/*
函数:LcdWriteCmd()
功能:向LCD发送命令
参数:
	cmd:命令字,详见器件的数据手册
*/
void LcdWriteCmd(unsigned char cmd)
{
	while ( LcdGetBF() ); //忙则等一周期
	XBYTE[0xD000] = cmd;
}


/*
函数:LcdWriteDat()
功能:向LCD写入数据
参数:dat,要写入的数据
说明:目标地址由地址计数器AC隐含指定,写完后AC自动加1
*/
void LcdWriteDat(unsigned char dat)
{
	while ( LcdGetBF() );
	XBYTE[0xD001] = dat;
}

/*
函数:LcdSetAC()
功能:设置DDRAM(显示数据RAM)的AC(地址计数器)值
参数:
	ac:地址计数器值,范围0~63
*/
void LcdSetAC(unsigned char ac)
{
	ac &= 0x3F;
	ac |= 0x80;
	LcdWriteCmd(ac);
}


/*
函数:LcdClear()
功能:LCD清屏,并使光标回到0
*/
void LcdClear()
{
	LcdWriteCmd(0x01);	//清屏命令
	LcdCursor = 0;
}


/*
函数:LcdDelay()
功能:延时(t*100)个机器周期
*/
void LcdDelay(unsigned char t)
{
	unsigned char n;
	do
	{
		n = 49;
		while ( --n != 0 );
	} while ( --t != 0 );
}


/*
函数:LcdInit()
功能:LCD初始化
*/
void LcdInit()
{
	LcdWriteCmd(0x30);	//设置基本指令集
	LcdDelay(3);
	LcdWriteCmd(0x30);	//设置基本指令集(需要再执行一次)
	LcdDelay(1);
	LcdWriteCmd(0x0C);	//开启显示
	LcdDelay(3);
	LcdClear();			//清屏
	LcdDelay(250);
	LcdWriteCmd(0x06);	//设置进入点
	LcdDelay(10);




        LcdPuts("电压/V");
  (  调整AC值至第三行;)
        LcdPuts("温度/oC");
        
}


/*
函数:LcdCheckAC()
功能:根据光标位置调整AC
*/
void LcdCheckAC()
{
	switch ( LcdCursor )
	{
	case 16:
		LcdSetAC(16);
		break;
	case 32:
		LcdSetAC(8);
		break;
	case 48:
		LcdSetAC(24);
		break;
	case 64:
		LcdCursor = 0;
		LcdSetAC(0);
		break;
	default:
		break;
	}
}


/*
函数:LcdPutChar()
功能:显示ASCII码
参数:
	c为可显示的ASCII码(0x20~0x7F)
*/
void LcdPutChar(unsigned char c)
{
	LcdWriteDat(c);
	LcdCursor++;
	LcdCheckAC();
}


/*
函数:LcdPuts()
功能:显示字符串
参数:
	*s:要显示的字符串(可同时包含ASCII码和汉字)
*/
void LcdPuts(unsigned char *s)
{
	unsigned char ch, cl;
	for (;;)
	{
		ch = *s++;
		if ( ch == '\0' ) break;
		if ( ch < 0x80 )
		{
			LcdPutChar(ch);
		}
		else
		{
			cl = *s++;
			LcdPutHZ(ch,cl);
		}
	}
}





函数:LcdClearme
功能:自定义的LCD清除屏幕上某一行的内容
参数:ac为电压或温度在LCD屏上所在行的AC值  ???acv=16  act=48???
void LcdClearme(unsigned char ac)
{  unsigned char i; 
  
   LcdSetAC(ac);
   for(i=0;i<16;i++)
     LcdPutChar(' '); 
}


⌨️ 快捷键说明

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