?? show.c
字號:
/*
*********************************************************************************************************
*
* 文 件 名 : LCD240160b.c
*
* 作 者 : Aoker
*
* 創(chuàng)建日期 : 2004年12月7日
* 描 述 : LCD的接口驅(qū)動函數(shù)
* 備 注: 如果顯示圖形時有陰影的豎狀條幅出現(xiàn)可以給液晶的讀寫命令加大延時.
*
* 版 本 : 1.0
*********************************************************************************************************
*/
#include <REG935.H>
#include"..\SOURCE\general.h"
#include "..\SOURCE\Lcd.h"
#include <math.h>
extern BYTE code ASCII[][16];
bit CS;
/*********************************************************************************************************
* 函數(shù)名稱: LcdWriteCmd
*
* 功能描述: 向LCD寫入指令
*
* 入口參數(shù): bCmd,命令代碼
*
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: 無
*
* 作 者: Aoker
* 創(chuàng)建時間: 2004年12月7日
********************************************************************************************************/
static void LcdWriteCmd(BYTE bCmd)
{
RD = 1;
_nop_ ();
_nop_ ();
_nop_ ();
A0 = 1;
_nop_ ();
_nop_ ();
_nop_ ();
P0 = bCmd;//命令代碼
_nop_ ();
_nop_ ();
_nop_ ();
CS = 0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
WR = 0;
_nop_ ();
_nop_ ();
_nop_ ();
WR = 1;
_nop_ ();
_nop_ ();
_nop_ ();
CS = 1;
_nop_ ();
_nop_ ();
_nop_ ();
}
/*********************************************************************************************************
* 函數(shù)名稱: LcdWriteData
*
* 功能描述: 向LCD寫入數(shù)據(jù)
*
* 入口參數(shù): bData,液晶寫入數(shù)據(jù)
*
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: 無
*
* 作 者: Aoker
* 創(chuàng)建時間: 2004年12月7日
********************************************************************************************************/
static void LcdWriteData(BYTE bData)
{
RD = 1;
_nop_ ();
_nop_ ();
_nop_ ();
A0 = 0;
_nop_ ();
_nop_ ();
_nop_ ();
P0 = bData;
_nop_ ();
_nop_ ();
_nop_ ();
CS = 0;
_nop_ ();
_nop_ ();
_nop_ ();
WR = 0;
_nop_ ();
_nop_ ();
_nop_ ();
WR = 1;
_nop_ ();
_nop_ ();
_nop_ ();
CS = 1;
_nop_ ();
_nop_ ();
_nop_ ();
}
/*********************************************************************************************************
* 函數(shù)名稱: LcdRead
*
* 功能描述: 讀出數(shù)據(jù)或光標(biāo)地址
*
* 入口參數(shù): 無
*
* 出口參數(shù): 數(shù)據(jù)或光標(biāo)地址
*
* 全局變量: 無
*
* 調(diào)用模塊: 無
*
* 作 者: Aoker
* 創(chuàng)建時間: 2004年12月7日
*-------------------------------------------------------------------------------------------------------
* 修 改 人: Aoker
*
* 說 明: 2004年12月7日的創(chuàng)建的程序讀液晶數(shù)據(jù)不對,造成在顯示圖形或漢字時,只能在橫坐標(biāo)整除8的位置處才能
* 正確顯示,其他位置處顯示時會出現(xiàn)豎狀的陰影條幅. 改正之后,如果還出現(xiàn),則可在液晶的讀寫函數(shù)里加
* 大延時即可解決.
*
* 修改時間: 2004年12月10日
********************************************************************************************************/
static BYTE LcdRead(void){
BYTE bStatus;
P0 = 0xff;
_nop_ ();
_nop_ ();
_nop_ ();
RD = 1;
_nop_ ();
_nop_ ();
_nop_ ();
A0 = 1;
_nop_ ();
_nop_ ();
_nop_ ();
CS = 0;
_nop_ ();
_nop_ ();
_nop_ ();
RD = 0;
_nop_ ();
_nop_ ();
_nop_ ();
bStatus = P0;
_nop_ ();
_nop_ ();
_nop_ ();
CS = 1;
_nop_ ();
_nop_ ();
_nop_ ();
RD = 1;
_nop_ ();
_nop_ ();
_nop_ ();
return(bStatus);
}
/*********************************************************************************************************
* 函數(shù)名稱: LcdInit
*
* 功能描述: LCD初始化
*
* 入口參數(shù): 無
*
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: LcdWriteCmd(),
* LcdWriteData(),
*
* 作 者: Aoker
* 創(chuàng)建時間: 2004年12月7日
********************************************************************************************************/
void LcdInit(void)
{
BYTE i;
const BYTE SYSTAB[8] = {0x30,0x87,0x07,0x1D,0x42,0x9f,0x1e,0x00};
const BYTE SCRTAB[8] = {0x00,0x00,0xA0,0xC0,0x12,0xA0,0x80,0x25};
LcdWriteCmd(0x40);
for(i=0; i<8; i++)
{
LcdWriteData(SYSTAB[i]);
}
LcdWriteCmd(0x44);
for(i=0; i<8; i++)
{
LcdWriteData(SCRTAB[i]);
}
LcdWriteCmd(0x5A);
LcdWriteData(0x00);
LcdWriteCmd(0x5B);
LcdWriteData(0x0C);
LcdWriteCmd(0x59);
LcdWriteData(0x04);
}
/*********************************************************************************************************
* 函數(shù)名稱: LcdClr
*
* 功能描述: 清除整個LCD屏幕
*
* 入口參數(shù): 無
*
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: LcdWriteCmd(),
* LcdWriteData(),
*
* 作 者: Aoker
* 創(chuàng)建時間: 2004年12月7日
********************************************************************************************************/
void LcdClr(void)
{
BYTE i, j;
LcdWriteCmd(0x4C);
LcdWriteCmd(0x46);
LcdWriteData(0x00);
LcdWriteData(0x00);
LcdWriteCmd(0x42);
for(i=0; i<90; i++)
{
for(j=0; j<80; j++)
{
LcdWriteData(0x00);
}
}
}
/*********************************************************************************************************
* 函數(shù)名稱: LcdDraw
*
* 功能描述: 在位置(bx, by)處顯示點(diǎn)陣為(bWidth x bHeight)大小的圖形
*
* 入口參數(shù): bx, 行坐標(biāo),取值范圍為0~239
* by, 列坐標(biāo),取值范圍為0~159
* bWidth, 圖形的寬度
* bHeight, 圖形的高度
* Attr, 圖形顯示的屬性,"1"-反白顯示; "0"-正常顯示
* ptr, 指向圖形的字模數(shù)據(jù)
*
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: LcdWriteCmd(),
* LcdWriteData(),
* LcdRead()
*
* 作 者: Aoker
* 創(chuàng)建時間: 2004年12月7日
********************************************************************************************************/
void LcdDraw(BYTE bx, BYTE by, BYTE bWidth, BYTE bHeight, bit Attr, BYTE* ptr)
{
BYTE i, j, k, tt=0;
BYTE uu=0, rr=0, ee=0, ff=0, gg=0;
WORD l;
tt = bx%8;
bx = bx/8;
l = by*ap + bx; //ap = 0x1e
bx = (BYTE)(l&0x00ff);
by = (BYTE)((l&0xff00)>>8);
LcdWriteCmd(0x4C);
for(i=0; i<bHeight; i++)
{
LcdWriteCmd(0x46);
LcdWriteData(bx);
LcdWriteData(by);
if(tt==0)
{
LcdWriteCmd(0x42);
for(j=0; j<bWidth/8; j++)
{
if(Attr)
LcdWriteData(~(*ptr));
else
LcdWriteData(*ptr);
ptr++ ;
}
}
else
{
for(j=0;j<bWidth/8;j++)
{
LcdWriteCmd(0x43);
uu = LcdRead();
rr = LcdRead();
if(Attr)
gg=~(*ptr);
else
gg = *ptr;
ptr++;
k = uu>>(8-tt);
k = k<<(8-tt);
ee = k;
k = gg>>tt;
ee = ee|k;
k = rr<<tt;
k = k>>tt;
ff = k;
k = gg<<(8-tt);
ff = ff|k;
LcdWriteCmd(0x4d);
LcdWriteCmd(0x43);
LcdRead();
LcdRead();
LcdWriteCmd(0x4C);
LcdWriteCmd(0x42);
LcdWriteData(ee);
LcdWriteData(ff);
LcdWriteCmd(0x4d);
LcdWriteCmd(0x43);
LcdRead();
LcdRead();
LcdWriteCmd(0x4c);
LcdWriteCmd(0x43);
LcdRead();
}
}
l=(ap+bx+(by<<8));
bx=(BYTE)(l&0x00ff);
by=(BYTE)((l&0xff00)>>8);
}
}
*/
/*********************************************************************************************************
* 函數(shù)名稱: LcdDraw16
*
* 功能描述: 在位置(bx, by)處顯示固定點(diǎn)陣大小(16 x 16)的圖形
*
* 入口參數(shù): bx, 行坐標(biāo),取值范圍為0~239
* by, 列坐標(biāo),取值范圍為0~159
* Attr, 圖形顯示的屬性,"1"-反白顯示; "0"-正常顯示
* ptr, 指向圖形的字模數(shù)據(jù)
*
* 出口參數(shù): 無
*
* 全局變量: 無
*
* 調(diào)用模塊: LcdWriteCmd(),
* LcdWriteData(),
* LcdRead()
*
* 作 者: Aoker
* 創(chuàng)建時間: 2004年12月7日
********************************************************************************************************/
void LcdDraw16(BYTE bx, BYTE by, bit Attr, BYTE* ptr)
{
BYTE i, j, k, tt=0;
BYTE uu=0, rr=0, ee=0, ff=0, gg=0;
WORD l;
tt = bx%8;
bx=bx/8;
l = by*ap + bx;
bx = (BYTE)(l&0x00ff);
by = (BYTE)((l&0xff00)>>8);
LcdWriteCmd(0x4C);
for(i=0; i<16; i++)
{
LcdWriteCmd(0x46);
LcdWriteData(bx);
LcdWriteData(by);
if(tt==0)
{
LcdWriteCmd(0x42);
for(j=0; j<2; j++)
{
if(Attr)
LcdWriteData(~(*ptr));
else
LcdWriteData(*ptr);
ptr++ ;
}
}
else
{
for(j=0;j<2;j++)
{
LcdWriteCmd(0x43);
uu = LcdRead();
rr = LcdRead();
if(Attr)
gg=~(*ptr);
else
gg = *ptr;
ptr++;
k = uu>>(8-tt);
k = k<<(8-tt);
ee = k;
k = gg>>tt;
ee = ee|k;
k = rr<<tt;
k = k>>tt;
ff = k;
k = gg<<(8-tt);
ff = ff|k;
LcdWriteCmd(0x4d);
LcdWriteCmd(0x43);
LcdRead();
LcdRead();
LcdWriteCmd(0x4C);
LcdWriteCmd(0x42);
LcdWriteData(ee);
LcdWriteData(ff);
LcdWriteCmd(0x4d);
LcdWriteCmd(0x43);
LcdRead();
LcdRead();
LcdWriteCmd(0x4c);
LcdWriteCmd(0x43);
LcdRead();
}
}
l=(ap+bx+(by<<8));
bx=(BYTE)(l&0x00ff);
by=(BYTE)((l&0xff00)>>8);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -