?? 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 + -