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

📄 lcd701_functions.c

📁 利用SPCE061A实现中文输入,必要时可适当删减
💻 C
📖 第 1 页 / 共 2 页
字号:
//======================================================
//  The information contained herein is the exclusive property of
//  Sunnnorth Technology Co. And shall not be distributed, reproduced,
//  or disclosed in whole in part without prior written permission.
//             (C) COPYRIGHT 2003  SUNNORTH TECHNOLOGY CO.
//                          ALL RIGHTS RESERVED
//  The entire notice above must be reproduced on all authorized copies.
//========================================================

//============================================================
// 文件名称:LCD701_Functions.c
// 实现功能:SPLC701B函数包,包括显示屏设置、文字与图形显示函数
// 日期:    2005/6/18
// 修订:	 剪裁掉未用到的图形显示函数
//============================================================

#include "LCD701_Drv.h"					// 底层驱动函数声明
#include "LCD701_Defs.h"					// 常量定义


unsigned CurTextRow,CurTextCol,TextOverflow;
unsigned CurScroll;
unsigned CurContrast;
unsigned CurTextMode;
unsigned CurScrMode;
unsigned CurPaintMode;

//======================================================
// 函数名称:	LCD701_Delay(私有函数)
// 格式:		void LCD701_Delay(void)
// 实现功能:	用于初始化及清屏等延时
// 参数:		无
// 返回值:		无
//======================================================
void LCD701_Delay(void)
{
	unsigned i;
	for(i=0;i<2000;i++)CLR_WDT();
}

//======================================================
// 函数名称:	LCD701_Init
// 格式:		void LCD701_Init(void)
// 实现功能:	SPLC701B初始化,设置到可以正常显示的状态。
// 参数:		无
// 返回值:		无
//======================================================
void LCD701_Init(void)
{
	void LCD701_ClrScr(unsigned);

	LCD701_InitIO();
	LCD701_Cmd(0x0101);					// Start Oscillation
	LCD701_Delay();
	LCD701_Cmd(0x0243);					// 4 Disp Lines
	LCD701_Cmd(0x0300);					// B_Pattern Waveform
	LCD701_Cmd(0x0410);					// 1/8 Bias, Mid Contrast
	LCD701_Cmd(0x0500);					// Power Off
	LCD701_Cmd(0x0600);					// Key Scan Off
	LCD701_Cmd(0x070B);					// SuperImpose Mode
	LCD701_Cmd(0x0800);					// Cursor None
	LCD701_Cmd(0x0932);					// MainScreen&Icon Both ON
	LCD701_Cmd(0x0A00);					// No Scroll

	LCD701_ClrScr(CLR_ALL);
	LCD701_Cmd(0x05A0);					// Power On 
	
	CurTextRow = 0;						// Initial Global Variables
	CurTextCol = 0;
	CurScroll = 0;
	TextOverflow = 0;
	CurContrast = 16;
	CurTextMode = TEXT_NORMAL;
	CurScrMode = MODE_SPRIMPOSE;
	CurPaintMode = PAINT_COVER;
}

//======================================================
// 函数名称:	LCD701_Power
// 格式:		void LCD701_Power(unsigned ModeCode)
// 实现功能:	SPLC701B电源管理
// 参数:		ModeCode - 可以是下列参数之一:
//					PWR_ON: 	正常工作模式
//					PWR_SLEEP:	睡眠模式,屏幕不显示,但内容在唤醒后仍保留
//					PWR_STANDBY: 待机模式,比SLEEP省电,但显示内容会丢失
//					PWR_OFF:	关闭电源
// 返回值:		无
//======================================================
void LCD701_Power(unsigned ModeCode)
{
	switch(ModeCode)
	{
	case PWR_ON:
		LCD701_Cmd(0x0101);
		LCD701_Delay();
		LCD701_Cmd(PWR_ON);
		break;
	case PWR_SLEEP:
		LCD701_Cmd(PWR_SLEEP);
		break;
	case PWR_STDBY:
		LCD701_Cmd(PWR_STDBY);
		break;
	default:
		LCD701_Cmd(PWR_OFF);
	}
}

//======================================================
// 函数名称:	LCD701_ClrScr
// 格式:		void LCD701_ClrScr(unsigned Part)
// 实现功能:	清除屏幕内容
// 参数:		Part - 欲清除哪部分屏幕,可以是下列参数(可组合使用):
//					CLR_TEXT: 	清除所有文字
//					CLR_GRAPHIC:清除所有图形
//					CLR_ICON:	清除所有图标
//					CLR_ALL:	清除全部(文字、图形、图标)
// 返回值:		无
//======================================================
void LCD701_ClrScr(unsigned Part)
{
	unsigned i;
	
	if(Part&CLR_TEXT)				// Clear DDRAM
	{
		LCD701_Cmd(0x0001);
		LCD701_Delay();
	}
	if(Part&CLR_GRAPHIC)			// Clear CGRAM
	{
		LCD701_Cmd(0x0D80);			
		LCD701_Cmd(0x0E00);
		for(i=0;i<840;i++)
			LCD701_Cmd(0x0f00);
	}
	if(Part&CLR_ICON)				// Clear SGRAM
	{
		LCD701_Cmd(0x0DC0);			
		LCD701_Cmd(0x0E00);
		for(i=0;i<120;i++)
			LCD701_Cmd(0x0f00);
	}
}

//======================================================
// 函数名称:	LCD701_SetContrast
// 格式:		void LCD701_SetContrast(unsigned Contrast)
// 实现功能:	设置显示对比度
// 参数:		Contrast - 对比度值,范围从0到31,数值越大对比度越高
// 返回值:		无
//======================================================
void LCD701_SetContrast(unsigned Contrast)
{
	if(Contrast>31)Contrast=31;
	CurContrast = Contrast;
	LCD701_Cmd(0x0400|CurContrast);
}

//======================================================
// 函数名称:	LCD701_GetContrast
// 格式:		unsigned LCD701_GetContrast(void)
// 实现功能:	获取当前显示对比度
// 参数:		无
// 返回值:		当前屏幕对比度值,范围从0到31
//======================================================
unsigned LCD701_GetContrast(void)
{
	return CurContrast;
}

//======================================================
// 函数名称:	LCD701_SetDispMode
// 格式:		void LCD701_SetDispMode(ModeCode)
// 实现功能:	设置显示模式
// 参数:		ModeCode - 显示模式参数,可以是下列数值之一:
//					MODE_TEXT:		文本模式,屏幕只显示文本
//					MODE_GRAPHIC:	图形模式,屏幕只显示点阵图形
//					MODE_SPRIMPOSE:	混合模式,图形与文本同时显示(默认)
// 返回值:		无
//======================================================
void LCD701_SetDispMode(unsigned ModeCode)
{
	CurScrMode &= MODE_REVERSAL;
	switch(ModeCode)
	{
	case MODE_TEXT:						// TextMode
		CurScrMode |= MODE_TEXT;
		LCD701_Cmd(CurScrMode);
		LCD701_Cmd(0x0D00);
		LCD701_Cmd(0x0E00);
	case MODE_GRAPHIC:					// Graphic Mode
		CurScrMode |= MODE_GRAPHIC;
		LCD701_Cmd(CurScrMode);
		LCD701_Cmd(0x0D80);
		LCD701_Cmd(0x0E00);
		break;
	default:							// SuperImposed Mode
		CurScrMode |= MODE_SPRIMPOSE;
		LCD701_Cmd(CurScrMode);
		break;
	}
}

//======================================================
// 函数名称:	LCD701_GetDispMode
// 格式:		unsigned LCD701_GetDispMode(void)
// 实现功能:	获取当前显示模式
// 参数:		无
// 返回值:		函数返回值可能是下列数值之一:
//					MODE_TEXT:		文本模式,屏幕只显示文本
//					MODE_GRAPHIC:	图形模式,屏幕只显示点阵图形
//					MODE_SPRIMPOSE:	混合模式,图形与文本同时显示
//======================================================
unsigned LCD701_GetDispMode(void)
{
	return CurScrMode & 0x070F;
}

//======================================================
// 函数名称:	LCD701_ScrollUp
// 格式:		void LCD701_ScrollUp(unsigned Rows)
// 实现功能:	屏幕向上滚动
// 参数:		Rows - 屏幕向上滚动的像素数,范围从1到51
// 返回值:		无
//======================================================
void LCD701_ScrollUp(unsigned Rows)
{
	unsigned StartLine= 0x0000, RasterRow = 0x0000;
	CurScroll = CurScroll + Rows;
	while(CurScroll >= SCR_MAX_ROW)
		CurScroll -= SCR_MAX_ROW;
	Rows = CurScroll;
	while(Rows >= 13)
	{
		StartLine += 0x0010;
		Rows -= 13;
	}
	RasterRow = Rows;
	LCD701_Cmd(0x0A00 | StartLine | RasterRow);
}

//======================================================
// 函数名称:	LCD701_GetScroll
// 格式:		unsigned LCD701_GetScroll(void)
// 实现功能:	获取当前屏幕已向上滚动的像素数
// 参数:		无
// 返回值:		屏幕向上滚动的像素数,范围从0到51
//======================================================
unsigned LCD701_GetScroll(void)
{
	return CurScroll;
}

//======================================================
// 函数名称:	LCD701_ReverseColor
// 格式:		void LCD701_ReverseColor(void)
// 实现功能:	屏幕反色显示。每执行一次该函数,屏幕颜色翻转一次。
// 参数:		无
// 返回值:		无
//======================================================
void LCD701_ReverseColor(void)
{
	if((CurScrMode & MODE_REVERSAL) == MODE_REVERSAL)
		CurScrMode &= ~MODE_REVERSAL;
	else
		CurScrMode |= MODE_REVERSAL;
	LCD701_Cmd(CurScrMode);
}

//======================================================
// 函数名称:	LCD701_SetTextMode
// 格式:		void LCD701_SetTextMode(unsigned TextMode)
// 实现功能:	设置文本显示模式
// 参数:		TextMode - 显示模式,可以是下列数值之一:
//					TEXT_NORMAL: 	正常模式
//					TEXT_REVERSAL:	文本反色显示
//					TEXT_BLINK:		文本闪烁
//					TEXT_REVERSAL|TEXT_BLINK: 文本反色闪烁
// 返回值:		无
//======================================================
void LCD701_SetTextMode(unsigned TextMode)
{
	if((TextMode & TEXT_REVERSAL)==0 && (TextMode & TEXT_BLINK)==0)
		TextMode = TEXT_NORMAL;
	CurTextMode = TextMode;
}

//======================================================
// 函数名称:	LCD701_GetTextMode
// 格式:		unsigned LCD701_GetTextMode(void)
// 实现功能:	获取当前的文本显示模式
// 参数:		无
// 返回值:		返回当前的显示模式值,可能是下列数值:
//					TEXT_NORMAL: 	正常模式
//					TEXT_REVERSAL:	文本反色显示
//					TEXT_BLINK:		文本闪烁
//					TEXT_REVERSAL|TEXT_BLINK: 文本反色闪烁
//======================================================
unsigned LCD701_GetTextMode(void)
{
	return CurTextMode;
}

//======================================================
// 函数名称:	LCD701_SetTextPos
// 格式:		void LCD701_SetTextPos(unsigned Row, unsigned Col)
// 实现功能:	设定文本的显示位置
// 参数:		Row - 字符所在行,范围0到3
//				Col - 字符所在列,范围0到19
// 返回值:		无
//======================================================
void LCD701_SetTextPos(unsigned Row, unsigned Col)
{
	unsigned RamAddr;
	
	if(Row >= TEXT_MAX_ROW)Row = TEXT_MAX_ROW - 1;
	if(Col >= TEXT_MAX_COL)Col = TEXT_MAX_COL - 1;
	
	RamAddr = Row << 5;
	RamAddr += Col;

	LCD701_Cmd(0x0D00);
	LCD701_Cmd(0x0E00 | RamAddr);
	CurTextRow = Row;
	CurTextCol = Col;
}

//======================================================
// 函数名称:	LCD701_GetTextPos
// 格式:		void LCD701_GetTextPos(unsigned *Row, unsigned *Col)
// 实现功能:	获取即将显示的字符所在位置
// 参数:		Row - 即将显示的字符所在行的地址
//				Col - 即将显示的字符所在列的地址
// 返回值:		无
//======================================================
void LCD701_GetTextPos(unsigned *Row, unsigned *Col)
{
	*Row = CurTextRow;
	*Col = CurTextCol;
}

//======================================================
// 函数名称:	LCD701_PutChar
// 格式:		void LCD701_PutChar(unsigned char CharCode)
// 实现功能:	显示一个半角字符
// 参数:		CharCode - 字符的ASCII码值
// 返回值:		无
//======================================================
const unsigned Char_Map[]={				//ASCII,0x21~0x40
	0x7E,0x7B,0x60,0x20,0x20,0x5B,0x7B,0x5D,0x5E,0x40,0x20,0x0E,0x10,0x0F,0x5C,0x00,
	0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0C,0x0D,0x20,0x20,0x20,0x7F,0x7D
};
void LCD701_PutChar(const unsigned char CharCode)
{
	unsigned CharAddr;
	void LCD701_NewLine(void);
	
	if(CharCode >= 0x21 && CharCode <= 0x40)	// Find from Char_Map
		CharAddr = Char_Map[CharCode-0x21];
	else if(CharCode>='A' && CharCode<='Z')
		CharAddr = CharCode;
	else if(CharCode>='a' && CharCode<='z')
		CharAddr = CharCode;
	else if(CharCode == '\n')
	{
		LCD701_NewLine();
		return;
	}
	else
		CharAddr = 0x20;						// Display Space

	if(CurTextCol>=TEXT_MAX_COL)
		LCD701_NewLine();
	LCD701_SetTextPos(CurTextRow,CurTextCol);
	LCD701_Cmd(0x0B0F);
	LCD701_Cmd(0x0C00);
	LCD701_Cmd(0x0F80|CharAddr);
	CurTextCol += 1;
}

//======================================================
// 函数名称:	LCD701_PutHZ
// 格式:		void LCD701_PutHZ(unsigned char *HZCode)
// 实现功能:	显示一个全角字符
// 参数:		HZCode - 全角字符编码的首地址
// 返回值:		无
//======================================================
void LCD701_PutHZ(const unsigned char *HZCode)
{
	unsigned HZAddr;
	void LCD701_NewLine(void);
	
	HZAddr = (*HZCode - 0xA1) * 94 + (*(HZCode + 1) - 0xA1);
	if(HZAddr >= 1410)
		HZAddr -= 400;
	if(HZAddr <= 4064)
		HZAddr += 32;
	else
		HZAddr += 64;
	if(CurTextCol == TEXT_MAX_COL - 1)
	{
		LCD701_PutChar(' ');
	}
	if(CurTextCol >= TEXT_MAX_COL)
		LCD701_NewLine();
	LCD701_SetTextPos(CurTextRow,CurTextCol);
	LCD701_Cmd(0x0F00|(HZAddr&0xff));
	LCD701_Cmd(0x0F00|(HZAddr>>8)|CurTextMode);
	CurTextCol += 2;
}

//======================================================
// 函数名称:	LCD701_NewLine(私有函数)
// 格式:		void LCD701_NewLine(void)
// 实现功能:	文字显示的换行处理
// 参数:		无
// 返回值:		无
//======================================================
void LCD701_NewLine(void)
{
	unsigned TempCode;
	unsigned i,j;
	
	CurTextCol = 0;
	CurTextRow += 1;
	if(CurTextRow >= TEXT_MAX_ROW)
	{
		LCD701_Cmd(0x0D00);
		for(i=1;i<TEXT_MAX_ROW;i++)
		{
			for(j=0;j<TEXT_MAX_COL;j++)
			{
				LCD701_Cmd(0x0E00|(i<<5)|j);
				TempCode = LCD701_Read();
				LCD701_Cmd(0x0E00|((i-1)<<5)|j);
				LCD701_Cmd(0x0F00|TempCode);
			}
		}
		LCD701_Cmd(0x0E00|((TEXT_MAX_ROW-1)<<5));
		for(i=0;i<TEXT_MAX_COL;i++)
		{
			LCD701_Cmd(0x0FA0);
		}
		LCD701_Cmd(0x0E00|((TEXT_MAX_ROW-1)<<5));
		CurTextRow = TEXT_MAX_ROW - 1;
	}
}

//======================================================
// 函数名称:	LCD701_Print
// 格式:		void LCD701_Print(unsigned char *String)
// 实现功能:	显示一个字符串(可以由半角和全角字符混合组成)
// 参数:		String - 字符串的首地址
// 返回值:		无
//======================================================
void LCD701_Print(const unsigned char *String)
{
	unsigned CharCode;
	while(1)
	{
		CharCode = *String++;
		if(CharCode == '\0')break;
		if((CharCode&0x80)==0)				// ASCII
			LCD701_PutChar(CharCode);
		else								// HZ
		{
			LCD701_PutHZ(String-1);
			String++;
		}
	}
}

//======================================================
// 函数名称:	LCD701_SetTextCursor
// 格式:		void LCD701_SetTextCursor(unsigned ModeCode)
// 实现功能:	设置文本光标显示模式
// 参数:		ModeCode - 光标显示模式,可以是下列数值之一:
//					CURSOR_NONE:	无光标
//					CURSOR_BLINK:	闪烁光标
//					CURSOR_ULINE:	下划线光标
//					CURSOR_REVERSAL: 光标所在位置的内容反显
//					CURSOR_WHOLELINE: 光标的作用范围为整行,可与其他参数配合使用
//									如CURSOR_BLINK|CURSOR_WHOLELINE,整行闪烁
// 返回值:		无
//======================================================
void LCD701_SetTextCursor(unsigned ModeCode)
{
	if(ModeCode > 0x080F)
		ModeCode = CURSOR_NONE;
	LCD701_Cmd(ModeCode);
}

⌨️ 快捷键说明

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