?? lcdfile.c
字號:
/**************************************************************************
* lcdfiel.c v1.00 *
* 版權(c) 2003- 北鞠達電磚眾河技術有限責任公司 *
* 設計者: 戴展波 *
**************************************************************************/
//#include "seed.h"
#ifndef _register
#define _register
ioport unsigned port0019;
#define c_addr port0019
ioport unsigned port0018;
#define d_addr port0018
#endif
#ifndef bool
#define bool unsigned short
#define FALSE 0
#define TRUE 1
#endif
void wr_data(unsigned int dat1);
void wr_data1(unsigned int dat1);
void wr_com(unsigned int com);
void wr_letter(unsigned int code,unsigned int o_y,unsigned int o_x,unsigned short fanxian);
void wr_hex(unsigned int code,unsigned int o_y,unsigned int o_x,unsigned short fanxian);
void wr_dot(unsigned int o_y,unsigned int o_x,unsigned short flag);
void getASC(unsigned int apcode, unsigned int *ptr);
void getASC(unsigned int apcode, unsigned int *ptr);
extern void GUILCD_init(void);
extern void GUILCD_clear(void);
extern void GUILCD_writeLetterStr(unsigned int Row, unsigned int Column,unsigned char *cString,unsigned short fanxian);
extern void GUILCD_writeCharStr(unsigned int Row, unsigned int Column, unsigned char *cString ,unsigned short fanxian);
extern void GUILCD_writeCurse(unsigned int Row, unsigned int Column);
extern void GUILCD_clearCurse(unsigned int Row, unsigned int Column);
extern void GUILCD_drawxChart(unsigned int Row, unsigned int Column, int *Data, unsigned short flag);
extern void GUILCD_drawyChart(unsigned int Row, unsigned int Column, int *Data, unsigned short flag);
extern void GUILCD_onLed(void);
extern void GUILCD_offLed(void);
extern void GUILCD_seed(unsigned int Row, unsigned int Column);
/***************************************************************************
* 函數: void wr_data(unsigned int data)
* 目的: 寫LCD數據參數,判斷0和1位
* 輸入: dat1 參數單元
* 輸出: 無
* 參數: status局部變量,用來存儲LCD的狀態量
***************************************************************************/
void wr_data(unsigned int dat1)
{
unsigned int status;
do
{
status = c_addr;
status = status & 0x03; /* 屏蔽status的2~15位為0 */
}while(status != 0x03);
d_addr = dat1;
}
/***************************************************************************
* 函數: void wr_data1(unsigned int dat1)
* 目的: 寫LCD數據參數,判斷3位
* 輸入: dat1 參數單元
* 輸出: 無
* 參數: status局部變量,用來存儲LCD的狀態量
***************************************************************************/
void wr_data1(unsigned int dat1)
{
unsigned int status;
do
{
status = c_addr;
status = status & 0x08; /* 屏蔽status的0~2和3~15位為0 */
}while(status != 0x08);
d_addr = dat1;
}
/***************************************************************************
* 函數: void wr_com(WORD com)
* 目的: 寫LCD指令參數
* 輸入: com 指令單元
* 輸出: 無
* 參數: status局部變量,用來存儲LCD的狀態量
***************************************************************************/
void wr_com(unsigned int com)
{
unsigned int status;
do
{
status = c_addr;
status = status & 0x03;
}while(status != 0x03);
c_addr = com;
}
/***************************************************************************
* 函數: extern void GUILCD_init(void)
* 目的: 初始化LCD顯示,設置顯示方式為圖形方式,開顯示
* 輸入: 無
* 輸出: 無
****************************************************************************/
extern void GUILCD_init(void)
{
wr_data(0x00); /*設置圖形顯示區域首地址*/
wr_data(0x00); /*或為文本屬性區域首地址*/
wr_com(0x42);
wr_data(0x20); /*設置圖形顯示區域寬度*/
wr_data(0x00); /*或為文本屬性區域寬度*/
wr_com(0x43);
wr_com(0xa0); /*光標形狀設置*/
wr_com(0x81); /*顯示方式設置,邏輯或合成*/
wr_com(0x9b); /*顯示開關設置,僅文本開顯示*/
}
/***************************************************************************
* 函數: extern void GUILCD_clear(void)
* 目的: 清LCD屏,用自動方式,將LCD屏清為白屏
* 輸入: 無
* 輸出: 無
參數: page0局部變量
***************************************************************************/
extern void GUILCD_clear(void)
{
int page0;
wr_data(0x00); /*設置顯示RAM首地址*/
wr_data(0x00);
wr_com(0x24);
wr_com(0xb0); /*設置自動寫方式*/
for(page0 = 0x2000; page0 >= 0; page0--)
{
wr_data1(0x00); /* 清0 */
}
wr_com(0xb2); /* 自動寫結束 */
}
/***************************************************************************
* 函數: void wr_letter(unsigned int code,unsigned int o_y,unsigned int o_x,bool fanxian)
* 目的: 寫字母,根據字母代碼,將查找到的字母寫到LCD的Y和X坐標處
* 輸入: code 字母代碼,字母為16×16點陣
o_y y坐標,范圍0~7
o_x x坐標,范圍0~14
fanxian 字母是否需要反顯,0不需要反顯,1需要反顯
* 輸出: 無
參數:
***************************************************************************/
void wr_letter(unsigned int code,unsigned int o_y,unsigned int o_x,unsigned short fanxian)
{
unsigned int i1,dat1_temp,dat2_temp;
unsigned int asc_code[32];
int i2;
i1 = o_y * 0x20;
i1 = i1 + o_x;
dat1_temp = i1 & 0xff;
dat2_temp = (i1>>8) & 0xff;
getasc(code,&asc_code[0]); /* 從FLASH中讀取字母點陣 */
if(fanxian == TRUE) /* 是否反顯 */
{
for(i2 = 0; i2 < 32; i2++)
{
asc_code[i2] = (~asc_code[i2]) & 0xff;
}
}
for(i2 = 0; i2 < 16; i2++)
{
wr_data(dat1_temp);
wr_data(dat2_temp);
wr_com(0x24); /* 字母在LCD的位置 */
wr_data(asc_code[2*i2]); /* 寫字母點陣 */
wr_com(0xc0);
wr_data(asc_code[2*i2+1]); /* 寫字母點陣 */
wr_com(0xc0);
i1 = i1 + 0x20;
dat1_temp = i1 & 0xff;
dat2_temp = (i1>>8) & 0xff; /* 寫完后,修改在LCD的位置 */
}
}
/***************************************************************************
* 函數: void wr_hex(unsigned int code,unsigned int o_y,unsigned int o_x,bool fanxian)
* 目的: 寫漢字,將漢字區位代碼中的字寫入X和Y位置,可以設置為反顯
* 輸入: code 漢字區位代碼
o_y y坐標,范圍0~7
o_x x坐標,范圍0~14
fanxian 反顯 0:無 1:反顯
* 輸出: 無
***************************************************************************/
void wr_hex(unsigned int code,unsigned int o_y,unsigned int o_x,unsigned short fanxian)
{
unsigned int dat1_temp,dat2_temp;
unsigned int *code_temp;
int i1,i2,code_temp1;
unsigned int hanzi_conv[16];
unsigned int hex_code[32];
code_temp1 = (code >> 8) & 0xff;
code_temp1 = code_temp1 - 0xa1;
code_temp1= code_temp1 * 94;
code_temp1 = code_temp1 + (code & 0xff);
code_temp1 = code_temp1 - 0xa1; /* 生成漢字區位代碼 */
gethz(code_temp1,&hanzi_conv[0]); /* 從漢字字庫中讀取漢字點陣 */
for(i2 = 0; i2 < 16; i2++)
{
if(fanxian == FALSE) /* 是否反顯 */
{
hex_code[i2+0] = (hanzi_conv[i2] >> 8) & 0xff;
hex_code[i2+16] = hanzi_conv[i2] & 0xff;
}
else
{
hex_code[i2+0] = ~(hanzi_conv[i2] >> 8);
hex_code[i2+0] = hex_code[i2+0] & 0xff;
hex_code[i2+16] = (~hanzi_conv[i2]) & 0xff;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -