?? lcmdrv.c
字號:
/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name: LCMDRV.C
** Last modified Date:2007-12-20
** Last Version: 1.0
** Descriptions: MG12864圖形液晶模塊驅動程序。T6963C控制器
**------------------------------------------------------------------------------------------------------
** Created by: Rein Lee
** Created date: 2007-12-20
** Version: 1.0
** Descriptions: The original version
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
********************************************************************************************************/
#include "config.h"
/* 定義總線起始的GPIO,即D0對應的GPIO值(P0.4) */
/* 定義顯示緩沖區 */
#define BUS_NO 4
/* 輸出總線數據宏定義 */
#define OutData(dat) IO0DIR = IO0DIR |(0xff<<BUS_NO); IO0CLR = 0xff<<BUS_NO; IO0SET = (dat&0xff)<<BUS_NO
#define InData() IO0DIR = IO0DIR &~(0x000000ff<<BUS_NO);dat = (uint8)((IO0PIN&(0xFFFFFFFF))>>BUS_NO)
/* 定義READ控制 */
#define LCM_RD 12
#define LCM_UNREAD() IO0SET = 1<<LCM_RD
#define LCM_READ() IO0CLR = 1<<LCM_RD
/* 定義WRITE控制 */
#define LCM_WR 13
#define LCM_UNWRITE() IO0SET = 1<<LCM_WR
#define LCM_WRITE() IO0CLR = 1<<LCM_WR
/* 定義C/D#控制 */
#define LCM_CD 14
#define LCM_COM() IO0SET = 1<<LCM_CD
#define LCM_DATA() IO0CLR = 1<<LCM_CD
/* 定義C/D#控制 */
#define LCM_CE 15
#define LCM_DISABLE() IO0SET = 1<<LCM_CE
#define LCM_ENABLE() IO0CLR = 1<<LCM_CE
/* 定義LCM操作的命令字 */
// T6963C 命令定義
#define LCM_CUR_POS 0x21 // 光標位置設置
#define LCM_CGR_POS 0x22 // CGRAM 偏置地址設置
#define LCM_ADD_POS 0x24 // 地址指針位置
#define LCM_TXT_STP 0x40 // 文本區首址
#define LCM_TXT_WID 0x41 // 文本區寬度
#define LCM_GRH_STP 0x42 // 圖形區首址
#define LCM_GRH_WID 0x43 // 圖形區寬度
#define LCM_MOD_OR 0x80 // 顯示方式邏輯或
#define LCM_MOD_XOR 0x81 // 顯示方式邏輯異或
#define LCM_MOD_AND 0x82 // 顯示方式邏輯與
#define LCM_MOD_TCH 0x83 // 顯示方式文本特征
#define LCM_DIS_SW 0x90 // 顯示開關D0=1/0:光標閃爍啟用/禁用
// D1=1/0:光標顯示啟用/禁用
// D2=1/0:文本顯示啟用/禁用
// D3=1/0:圖形顯示啟用/禁用
#define LCM_CUR_SHP 0xA0 // 光標形狀選擇0xA0-0xA7表示光標占的行數
#define LCM_AUT_WR 0xB0 // 自動寫設置
#define LCM_AUT_RD 0xB1 // 自動讀設置
#define LCM_AUT_OVR 0xB2 // 自動讀/寫結束
#define LCM_INC_WR 0xC0 // 數據一次寫地址加1
#define LCM_INC_RD 0xC1 // 數據一次讀地址加1
#define LCM_DEC_WR 0xC2 // 數據一次寫地址減1
#define LCM_DEC_RD 0xC3 // 數據一次讀地址減1
#define LCM_NOC_WR 0xC4 // 數據一次寫地址不變
#define LCM_NOC_RD 0xC5 // 數據一次讀地址不變
#define LCM_SCN_RD 0xE0 // 屏讀
#define LCM_SCN_CP 0xE8 // 屏拷貝
#define LCM_BIT_OP 0xF0 // 位操作
uint8 const turnf[8] = {7,6,5,4,3,2,1,0};
uint8 const DEC_HEX_TAB1[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
uint8 const DEC_HEX_TAB[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
/*********************************************************************************************************
** 函數名稱: LCM_READSTATE
** 功能描述: 讀取LCM內部的狀態
** 輸 入: 無
** 輸 出: LCM內部狀態值
** 全局變量:
** 調用模塊:
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_READSTATE()
{
uint8 dat;
IO0DIR = IO0DIR &~(0x000000ff<<BUS_NO);
LCM_UNWRITE();
LCM_COM();
LCM_READ();
LCM_ENABLE();
//DELAY5();
//DELAY5();
//DELAY5();
//InData();
dat = (uint8)((IO0PIN)>>BUS_NO);
//LCM_UNREAD();
//LCM_UNWRITE();
LCM_DISABLE();
return dat;
}
/*********************************************************************************************************
** 函數名稱: LCM_STA01
** 功能描述: 狀態位STA1,STA0判斷讀寫指令和讀寫數據,在讀寫數據或者寫入命令前必須保證均為1
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調用模塊: LCM_READSTATE
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_STA01(void)
{
uint8 i;
for(i=10;i>0;i--)
{
if(( LCM_READSTATE() & 0x03) == 0x03) // 讀取狀態
{
break;
}
}
return(i); // 若返回零說明錯誤
}
/*********************************************************************************************************
** 函數名稱: LCM_STA3
** 功能描述: 狀態位STA3
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調用模塊: LCM_READSTATE
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_STA3(void)
{
uint8 i;
for(i=10;i>0;i--)
{
if(( LCM_READSTATE() & 0x08) == 0x08) // 讀取狀態
{
break;
}
}
return(i); // 若返回零說明錯誤
}
/*********************************************************************************************************
** 函數名稱: LCM_WrCommand
** 功能描述: 寫命令子程序
** 輸 入: command 要寫入LCM的命令字
** 輸 出: 無
** 全局變量: 無
** 調用模塊: 無
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LCM_WrCommand(uint8 command)
{
LCM_UNREAD();
LCM_COM();
LCM_WRITE();
LCM_ENABLE();
OutData(command);
//LCM_UNWRITE();
//LCM_READ();
LCM_DISABLE();
}
/*********************************************************************************************************
** 函數名稱: LCM_WrData
** 功能描述: 寫數據子程序
** 輸 入: wrdata 要寫入LCM的數據
** 輸 出: 無
** 全局變量: 無
** 調用模塊: 無
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LCM_WrData(uint8 wrdata)
{
LCM_UNREAD();
LCM_DATA();
LCM_WRITE();
LCM_ENABLE();
OutData(wrdata);
//LCM_UNWRITE();
//LCM_READ();
LCM_DISABLE();
}
/*********************************************************************************************************
** 函數名稱: LCM_WrParameter
** 功能描述: 向LCM寫入參數,帶雙參數,一個參數,或者不帶參數
** 輸 入: cmd參數;para1參數1;para2參數2;num參數個數
** 輸 出: 返回操作結果
** 全局變量: 無
** 調用模塊: 無
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 LCM_WrParameter(uint8 cmd,uint8 para1,uint8 para2,uint8 num)
{
switch (num)
{
case 0x00:
/*
if(LCM_STA01() == 0)
{
return 1;
}
*/
LCM_WrCommand(cmd);
break;
case 0x01:
/*
if(LCM_STA01() == 0)
{
return 1;
}
LCM_WrData(para1);
if(LCM_STA01() == 0)
{
return 2;
}
LCM_WrCommand(cmd);
*/
LCM_WrData(para1);
LCM_WrCommand(cmd);
break;
case 0x02:
/*
if(LCM_STA01() == 0)
{
return 1;
}
LCM_WrData(para1);
if(LCM_STA01() == 0)
{
return 2;
}
LCM_WrData(para2);
if(LCM_STA01() == 0)
{
return 3;
}
LCM_WrCommand(cmd);
*/
LCM_WrData(para1);
LCM_WrData(para2);
LCM_WrCommand(cmd);
break;
}
return 0;
}
/*********************************************************************************************************
** 函數名稱: LCM_ReadByte
** 功能描述: 讀取指定點上的字節數據
** 輸 入: x,y坐標值
** 輸 出: 返回該點上的字節數據
** 全局變量: 無
** 調用模塊: 無
**------------------------------------------------------------------------------------------------------
** Created by Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -