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

📄 splc501_lcd.c

📁 软件工程为SED1565(SPLC501)LCM的基本功能演示
💻 C
字号:
//========================================================================
// 文件名: SPLC501_LCD.c
// 作  者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
//			www.Mzdesign.com.cn
// 日  期: 2007/01/10
// 描  述: 针对于SPLC501LCD的特性编写的LCD显示、控制功能代码
//
// 参  考: 请参考具体显示器的硬件描述说明书或者是DataSheet,并以此来编写加速
//			版接口程序;适用于16位MCU
// 版  本:
//      2007/01/10      First version    Mz Design
//========================================================================
#include "LCD_Dis.h"
#include "LCD_Driver_User.h"
#include "LCD_Config.h"


unsigned int CurPowerMode=1;				//Show the Power Mode of LCD501
unsigned int CurLCDSet=8;					//Show the LCD Set灰度
unsigned int CurScroll=0;					//Show the scroll dotes
unsigned int CurScrMode=1;				//显示正相/反相(1/0)
//========================================================================
// 函数: void F_LCD_ON_OFF(unsigned int SetCom)
// 描述: 液晶开关函数  C语言调用 
// 参数: SetCom		SetCom=0:LCD Off  SetCom!=0:LCD On
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void F_LCD_ONOFF(unsigned int SetCom)
{
	if(SetCom)							//ON LCD
		LCD_RegWrite(M_LCD_ON);
	else								//OFF LCD
		LCD_RegWrite(M_LCD_OFF);
}
//========================================================================
// 函数: void LCD501_Power(unsigned int ModeCode)
// 描述: SPLC501电源管理,进入参数指定的模式,而当LCD在SLEEP和STDBY模式下时,
//			调用该函数会使LCD唤醒 
// 参数: ModeCode - 可以是下列参数之一:
//				1	PWR_ON: 	正常工作模式
//				2	PWR_SLEEP:	睡眠模式,屏幕不显示,但内容在唤醒后仍保留
//				3	PWR_STDBY: 待机模式,比SLEEP省电,但显示内容会丢失
//				0	PWR_OFF:	关闭电源
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_Power(unsigned int ModeCode)
{
	if(CurPowerMode == 2)
	{
		LCD_RegWrite(M_LCD_ALL_LOW);
		LCD_RegWrite(M_LCD_STATIC_ON);
		LCD_RegWrite(0x0003);
		CurPowerMode = 1;
	}
	else if(CurPowerMode == 3)
	{
		LCD_RegWrite(M_LCD_ON);
		LCD_RegWrite(M_LCD_ALL_LOW);
		CurPowerMode = 1;
	}
	else{
		switch(ModeCode)
		{
			case 1:
				LCD_RegWrite(M_LCD_ON);
				break;
			case 2:
				LCD_RegWrite(M_LCD_STATIC_OFF);
				LCD_RegWrite(0x0000);
				LCD_RegWrite(M_LCD_OFF);
				LCD_RegWrite(M_LCD_ALL_LIGNT);
				break;
			case 3:
				LCD_RegWrite(M_LCD_STATIC_ON);
				LCD_RegWrite(0x0003);
				LCD_RegWrite(M_LCD_OFF);
				LCD_RegWrite(M_LCD_ALL_LIGNT);
				break;
			default://POW_OFF
				LCD_RegWrite(M_LCD_OFF);
				break;
		}//
		CurPowerMode = ModeCode;
	}
}
//========================================================================
// 函数: void LCD501_SetContrast(unsigned int Contrast)
// 描述: 设置显示对比度   C语言调用
// 参数: Contrast - 对比度值,范围从0到31,数值越大对比度越高
// 返回: 无
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_SetContrast(unsigned int Contrast)
{
	if(Contrast>0x003f)
		Contrast = 0x003f;
	LCD_RegWrite(M_LCD_ELE_VOL);			//电量设置模式(显示亮度)
	LCD_RegWrite(Contrast);			//电量设置模式(显示亮度)
	CurLCDSet = Contrast;
}
//========================================================================
// 函数: unsigned int LCD501_GetContrast(void)
// 描述: 获取显示对比度   C语言调用
// 参数: null
// 返回: 当前显示的对比度值
// 备注: 
// 版本:
//      2006/10/15      First version
//========================================================================
unsigned int LCD501_GetContrast(void)
{
	return CurLCDSet;//
}
//========================================================================
// 函数: void LCD501_ScrollUp(unsigned int Rows)
// 描述: 屏幕向上滚动   C语言调用
// 参数: Rows  屏幕向上滚动的像素数,范围从1到64
// 返回: null
// 备注: 该函数从原来的SPLC501的V20版本当中直接移植过来的
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_ScrollUp(unsigned int Rows)
{
	CurScroll = CurScroll+Rows;
	while(CurScroll>=Dis_Y_MAX)
		CurScroll -= Dis_Y_MAX;
	LCD_RegWrite(M_LCD_BEGIN_LINE+CurScroll);	//设置显示起始行对应RAM
}
//========================================================================
// 函数: unsigned int LCD501_GetScroll(void)
// 描述: 获取屏幕已经向上滚动的值   C语言调用
// 参数: null
// 返回: 屏幕已经向上滚动的值
// 备注: 该函数从原来的SPLC501的V20版本当中直接移植过来的
// 版本:
//      2006/10/15      First version
//========================================================================
unsigned int LCD501_GetScroll(void)
{
	return CurScroll;//
}
//========================================================================
// 函数: void LCD501_ReverseColor(void)
// 描述: 屏幕反色显示。每执行一次该函数,屏幕颜色翻转一次
// 参数: null
// 返回: null
// 备注: 该函数从原来的SPLC501的V20版本当中直接移植过来的
// 版本:
//      2006/10/15      First version
//========================================================================
void LCD501_ReverseColor(void)
{
	if(CurScrMode)//
	{
		LCD_RegWrite(M_LCD_ALL_REV);			//正向反向显示控制指令
		CurScrMode = 0;
	}
	else
	{
		LCD_RegWrite(M_LCD_ALL_NOR);			//正向反向显示控制指令
		CurScrMode = 1;
	}
}
//========================================================================
// 函数: void LCD501_Bitmap(int x,int y,unsigned int *p)
// 描述: 写入一个BMP图片,起点为(x,y)
// 参数: x、y为画入位图的起始坐标点,*p为位图字模数据的首地址  
// 返回: 无
// 备注: 该函数所对应的位图字模为16位为单位的字模数据,取模顺序为:从左到右
//			自上到下,每行的点数不为16的整数倍时,在前面补上0
//			建议使用凌阳提供的DM Tool取字模,因为该函数正是为适应其所取的字
//			模规格而设计的。
// 版本:
//      2007/01/12      First version
//========================================================================
void LCD501_Bitmap(int x,int y,unsigned int *p)
{
	int Temp_With,Temp_High,i,j;	//数据暂存
	unsigned int Temp;
	unsigned int Index=1;
	Temp_With = *p&0x00ff;
	Temp_High = *(p ++)>>8;			//图片宽度
	Temp = Temp_With&0x0f;
	switch(Temp)
	{
		case 0: Index = 0x8000; break;
		case 1: Index = 0x0001; break;
		case 2: Index = 0x0002; break;
		case 3: Index = 0x0004; break;
		case 4: Index = 0x0008; break;
		case 5: Index = 0x0010; break;
		case 6: Index = 0x0020; break;
		case 7: Index = 0x0040; break;
		case 8: Index = 0x0080; break;
		case 9: Index = 0x0100; break;
		case 10: Index = 0x0200; break;
		case 11: Index = 0x0400; break;
		case 12: Index = 0x0800; break;
		case 13: Index = 0x1000; break;
		case 14: Index = 0x2000; break;
		case 15: Index = 0x4000; break;
	}
	j = 0;
	while((j ++) < Temp_High)
	{
		if(y > Dis_Y_MAX) break;
		i = 0;
		Temp = Index;
		while(i < Temp_With)
		{		
			if((x+i) > Dis_X_MAX) break;
			if(Temp&(*p)) Write_Dot_LCD(x+i,y,BMP_Color);
			Temp = Temp >> 1;
			if(Temp==0)	
			{
				p++;
				Temp = 0x8000;
			}
			i++;
		}
		y ++;
	}	
}

⌨️ 快捷键说明

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