📄 lcd701_functions.c
字号:
//======================================================
// 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 + -