📄 splc501_lcd.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 + -