?? lcdb_driver.c
字號:
/************************************************************************************
* Copyright (c), 2004-2007,西安銘朗電子科技有限責(zé)任公司
* All rights reserved.
*
* File name: LCDB.C
* Processor: C8051F020
* Compiler : Keil C51 Compiler
*
* Author: 李林利
* Version: 1.20
* Date: 2007.6.1
* Email: GavinLi@126.com
* History:
* 1. Author: 李林利
* Version: 1.10
* Date: 2007.3.12
* Modification: none
*
* 2. Author: 李林利
* Version: 1.00
* Date: 2004.11.24
* Modification: 建立文件
*
*************************************************************************************/
/************************************************************************************/
// 引用外部頭文件
#include <INTRINS.H>
#include <ABSACC.H>
#include <MATH.H>
#include "delay.h" // 引用延時(shí)驅(qū)動模塊
#include "LCDB_Driver.h"
/************************************************************************************/
/************************************************************************************
// 常量及全局變量定義
*************************************************************************************/
#define SEDWRCOM XBYTE[0x8801] // 寫指令代碼
#define SEDRDCSR XBYTE[0x8801] // 讀光標(biāo)指針(指向的數(shù)據(jù))
#define SEDWRDAT XBYTE[0x8800] // 寫指令參數(shù)和顯示數(shù)據(jù)
#define FALSE 0
#define TRUE 1
#define MAP3 0x40
#define MAP2 0x10
#define MAP1 0x04
#define CURSOR 0x02
#define VRAM_SIZE 0x8000 // 顯存容量
#define CGRAM_ADDR 0x0000 // CGRAM區(qū)地址
#define CGRAM_SIZE 0x0C00 // CGRAM區(qū)大小
#define SAD1_ADDR 0x0C00 // 第1顯示區(qū)起始地址
#define SAD2_ADDR 0x3280 // 第2顯示區(qū)起始地址
#define SAD3_ADDR 0x5900 // 第3顯示區(qū)起始地址
#define SAD4_ADDR 0x7F80 // 第4顯示區(qū)起始地址
#define SADx_SIZE 0x2680 // 顯示區(qū)大小
unsigned int xdata LCDBGraph_BaseAddr;
unsigned char xdata LCDB_LineChar; // LCD 每行字符數(shù)變量(8x8字符)
unsigned char code SYSTAB[8]={0x37,0x87,0x0f,0x28,0x4c,0xF0,0x29,0x00};
unsigned char code SYSTAB2[8]={0x37,0x87,0x0f,0x1E,0x4c,0xA0,0x1F,0x00};
unsigned char code SCRTAB[10]={00,0x0C,0xF0,0x80,0x32,0xF0,0x00,0x59,0x80,0x7F};
/*************************************************************************************/
//
// SED1335為控制器的LCD顯示驅(qū)動程序函數(shù)定義
//
/*************************************************************************************/
/***********************************************************************************
* Function: LCDB_WriteData;
*
* Description: 向LCD數(shù)據(jù)口寫數(shù)據(jù);
*
* Input: val,要寫的數(shù)據(jù);
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void LCDB_WriteData(unsigned char val)
{
SEDWRDAT = val;
_nop_();
}
/***********************************************************************************
* Function: LCDB_WritePara;
*
* Description: 向LCD數(shù)據(jù)口寫參數(shù);
*
* Input: *p,參數(shù); len,參數(shù)長度;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void LCDB_WritePara(unsigned char *p, unsigned char len)
{
unsigned char xdata i;
for(i=0; i<len; i++)
LCDB_WriteData(*p++);
}
/***********************************************************************************
* Function: LCDA_ReadData;
*
* Description: 從LCD數(shù)據(jù)口讀數(shù)據(jù);
*
* Input: none;
*
* Output: none;
*
* Return: 讀到的數(shù)據(jù);
*
* Note: none;
************************************************************************************/
unsigned char LCDB_ReadData(void)
{
return(SEDRDCSR);
}
/***********************************************************************************
* Function: LCDB_WriteCmd;
*
* Description: 向LCD寫命令;
*
* Input: cmd,LCD操作命令;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void LCDB_WriteCmd(unsigned char cmd)
{
SEDWRCOM = cmd;
_nop_();
}
/***********************************************************************************
* Function: LCDB_WriteCmdPara;
*
* Description: 向LCD命令口寫入命令,接下來向LCD數(shù)據(jù)口寫參數(shù);
*
* Input: cmd,LCD控制命令, *para,參數(shù)指針; len,參數(shù)長度;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void LCDB_WriteCmdPara(unsigned char cmd, unsigned char *para, unsigned char len)
{
unsigned char xdata i;
SEDWRCOM = cmd;
_nop_();
for(i=0; i<len; i++)
{
SEDWRDAT = *para++;
_nop_();
}
}
/***********************************************************************************
* Function: LCDB_ClearVRAM;
*
* Description: 顯示存儲器清零函數(shù);
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: LCD顯示VRAM范圍 0000h--FFFFh (64k);
************************************************************************************/
void LCDB_ClearVRAM(void) //顯示存儲器清零
{
unsigned int xdata i;
LCDB_WriteCmd(CMD_CSRRGT);
LCDB_WriteCmd(CMD_CSRW);
LCDB_WriteData(0x00);
LCDB_WriteData(0x00);
LCDB_WriteCmd(CMD_MWRITE);
for(i=0;i<0x8000;i++)
{
LCDB_WriteData(0x00);
LCDB_WriteData(0x00);
}
}
/***********************************************************************************
* Function: LCDB_ClearScreen;
*
* Description: LCD清屏函數(shù);
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: 本函數(shù)只清除所設(shè)定的當(dāng)前顯示區(qū)即當(dāng)前屏幕顯示;
************************************************************************************/
void LCDB_ClearScreen(void)
{
unsigned int xdata i;
LCDB_WriteCmd(CMD_CSRRGT);
LCDB_WriteCmd(CMD_CSRW);
LCDB_WriteData((unsigned char)LCDBGraph_BaseAddr);
LCDB_WriteData((unsigned char)(LCDBGraph_BaseAddr>>8));
LCDB_WriteCmd(CMD_MWRITE);
for(i=0;i<SADx_SIZE;i++)
LCDB_WriteData(0);
}
/***********************************************************************************
* Function: LCDA_Init;
*
* Description: LCD初始化函數(shù);
*
* Input: x, LCD行數(shù); y, LCD列數(shù); 例如:320x240 的LCD, line=240,column=320;
*
* Output: none;
*
* Return: none;
*
* Note: 本函數(shù)完成的設(shè)置:1.光標(biāo)形狀(0xa7):8x8; 2顯示方式: 三屏圖形顯示,
* 以"或"方式合成;3.設(shè)置顯示開關(guān): 圖形顯示/光標(biāo)顯示(閃爍);
* 4.顯示存儲器清零; 5. 設(shè)置圖形顯示區(qū)(編號):0;
************************************************************************************/
void LCDB_Init(unsigned int x, unsigned int y)
{
//初始化LCD顯示參數(shù)以及界面
//unsigned char i;
unsigned char xdata para[2];
x=!!x; //無效操作 避免出現(xiàn)警告提示
LCDB_LineChar = (y>>3)+1;
// SYSTAB[3] = LCDB_LineChar;
// SYSTAB[5] = x;
// SYSTAB[6] = LCDB_LineChar + 1;
if (y==320)
LCDB_WriteCmdPara(CMD_SYSSET, SYSTAB, 8);
else if (y==240)
LCDB_WriteCmdPara(CMD_SYSSET, SYSTAB2, 8);
// SCRTAB[2] = x + 1;
// SCRTAB[5] = x + 1;
LCDB_WriteCmdPara(CMD_SCROLL, SCRTAB, 10);
para[0] = 0;
LCDB_WriteCmdPara(CMD_HDOTSCR, para, 1);
para[0] = 0x1c;
LCDB_WriteCmdPara(CMD_OVLAY, para, 1);
para[0] = 0x56;
LCDB_WriteCmdPara(CMD_DISPOFF, para, 1);
LCDB_ClearVRAM();
para[0] = 0x01;
para[1] = 0x07;
LCDB_WriteCmdPara(CMD_CSRFORM, para, 2);
para[0] = MAP1|CURSOR;
LCDB_WriteCmdPara(CMD_DISPON, para, 1);
LCDBGraph_BaseAddr = SAD1_ADDR;
para[0] = 0x00;
para[1] = 0x00;
LCDB_WriteCmdPara(CMD_CGRAMADR, para, 2);
LCDB_ClearScreen();
}
/***********************************************************************************
* Function: LCDB_SetGraphMaps;
*
* Description: 設(shè)置圖形顯示區(qū);此函數(shù)可更換不同的圖形顯示;
*
* Input: id, 圖形顯示區(qū)編號, 范圍:0~2;
*
* Output: none;
*
* Return: TRUE,設(shè)置正確; FALSE,設(shè)置失敗;
*
* Note: none;
************************************************************************************/
unsigned char LCDB_SetGraphMaps(unsigned char id)
{
unsigned char xdata para;
if(id == 0)
{
para = MAP1|CURSOR;
LCDBGraph_BaseAddr = SAD1_ADDR;
}
else if(id == 1)
{
para = MAP2|CURSOR;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -