?? ca24064b (t6963c)keilc51示例程序.txt
字號(hào):
CA24064B (T6963c)keilc51示例程序
發(fā)布: 2007-10-25 17:00 | 作者: | 來(lái)源: | 查看: 14次
CA24064B (T6963c)keilc51示例程序
// CA24064
//***************************************************************************
//* Create by :Ssmart 2004/12/01 KeilC V7.0 *
//***************************************************************************
//連線表: CPU=89C52 *
//C/D=P2.0 /CE=P2.7 FS=P3.5 /WR=/WR /RD=/RD *
//FOSC=12MHz D0-D7=P0.0-P0.7 /RSET=/(CPU RSET) *
//***************************************************************************
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define Graphic 1
#define TXT 0
#define LcmLengthDots 240
#define LcmWidthDots 64
char xdata LcmDataPort _at_ 0x0000;
char xdata LcmCmdPort _at_ 0x0100;
sbit FS = P3^5;
sbit Key= P3^4;
uchar code bmp1[];
uchar code str1[];
//指令&數(shù)據(jù)讀寫(xiě)狀態(tài)
void CheckRWCD(void)
{
while((LcmCmdPort & 0x03) != 0x03); //低電平忙
}
//數(shù)據(jù)自動(dòng)寫(xiě)狀態(tài)
void CheckAutoWrite(void)
{
while((LcmCmdPort & 0x08) == 0); //低電平忙
}
//屏讀/屏考貝出錯(cuò)狀態(tài)
void CheckScreen(void)
{
while(LcmCmdPort & 0x40); //1出錯(cuò),0正確
}
//一個(gè)數(shù)據(jù)子寫(xiě)入函數(shù)
void LcmWriteData(uchar uData)
{
LcmDataPort = uData;
}
//一個(gè)數(shù)據(jù)讀出函數(shù)
uchar LcmReadData( void )
{
uchar uData;
uData = LcmDataPort;
return uData;
}
//無(wú)參數(shù)指令寫(xiě)入函數(shù)
void LcmWriteCommand(uchar Command)
{
CheckRWCD(); //檢測(cè)指令讀寫(xiě)狀態(tài)
LcmCmdPort = Command;
}
//單參數(shù)指令寫(xiě)入函數(shù)
void LcmWriteCommandWith1Par(uchar Parameter,uchar Command)
{
CheckRWCD(); //檢測(cè)指令讀寫(xiě)狀態(tài)
LcmDataPort = Parameter;
CheckRWCD();
LcmCmdPort = Command;
}
//雙參數(shù)指令寫(xiě)入函數(shù)
void LcmWriteCommandWith2Par(uchar Parameter1,uchar Parameter2,uchar Command)
{
CheckRWCD(); //檢測(cè)指令讀寫(xiě)狀態(tài)
LcmDataPort = Parameter1;
CheckRWCD();
LcmDataPort = Parameter2;
CheckRWCD();
LcmCmdPort = Command;
}
//LCM初始化函數(shù)
void LcmInit( void )
{
LcmWriteCommandWith2Par(0x00,0x00,0x40); //設(shè)置文本顯示區(qū)首地址
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41); //設(shè)置文本顯示區(qū)寬度
LcmWriteCommandWith2Par(0x00,0x08,0x42); //設(shè)置圖形顯示區(qū)首地址0x0800
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43); //設(shè)置圖形顯示區(qū)寬度
LcmWriteCommand(0xA7); //設(shè)置光標(biāo)形狀 8x8方塊
LcmWriteCommand(0x81); //顯示方式設(shè)置 文本xor圖形(異或)
LcmWriteCommand(0x9C); //顯示開(kāi)關(guān)設(shè)置 文本開(kāi),圖形開(kāi),光標(biāo)閃爍關(guān)
}
//延時(shí)函數(shù)
void Delay(uint MS)
{
uchar us,usn;
while(MS!=0) //12M Crystal
{
usn = 2;
while(usn!=0)
{
us=0xf2;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
//通過(guò)按鍵設(shè)定延時(shí)函數(shù)
void DelayKey(unsigned char HalfSecond)
{ //Delay_key加入時(shí)間參數(shù)0.5秒一級(jí)
unsigned int i;
for(i=0;i<50*HalfSecond;i++) //12M Crystal
{
if(Key==0)
{
Delay(20);
while(Key==0) {Delay(20);}
break;
}
Delay(10);
}
}
//清顯示存儲(chǔ)器函數(shù)
void LcmClear( uchar FillByte )
{
uint i = 8192; //此處僅清8K RAM,如果您32K RAM都使用,請(qǐng)修改i=32768(后面也要改)
if(FillByte) //注意如果填充ff時(shí),如果RAM僅使用了8K,那么8192次會(huì)寫(xiě)入到文本區(qū)
{ //會(huì)形成亂碼.(24064出廠時(shí)候默認(rèn)將R7斷開(kāi),即默認(rèn)使用8KRAM)
i -= 2*1024;//所以如果填入ff時(shí)候要扣除2K的文本區(qū)
LcmWriteCommandWith2Par(0x00,0x08,0x24); //填充0xff時(shí)候要在圖形區(qū)
}
else
LcmWriteCommandWith2Par(0x00,0x00,0x24);
LcmWriteCommand(0xB0); //進(jìn)入自動(dòng)寫(xiě)
while(i--)
{
CheckAutoWrite();
LcmWriteData( FillByte );
}
LcmWriteCommand(0xB2); //退出自動(dòng)寫(xiě)
}
//設(shè)定顯示地址函數(shù)
void LocateXY(uchar x,uchar y,uchar mode)
{
uint temp;
temp= LcmLengthDots/8*y + x;
if(mode) //mode=1為Graphic
{ //如果圖形模式要加上圖形區(qū)首地址0x0800
temp+=0x0800;
}
LcmWriteCommandWith2Par(temp&0xff,temp/256,0x24);
}
//顯示一個(gè)ASCII碼函數(shù)
void PutChar(uchar x,uchar y,uchar CharByte)
{
LocateXY(x,y,TXT);
LcmWriteCommandWith1Par(CharByte,0xC4);
}
//顯示一個(gè)字符串函數(shù)
void PutString(uchar x,uchar y,uchar *str)
{
while(*str != 0)
{
if(x> 29) //自動(dòng)換行
{
x=0;
y++;
}
PutChar(x,y,*str);
++x;
++str;
}
}
//顯示一副圖片函數(shù)
void DisplayOneBmp(uchar *puts)
{
uchar i,j;
uint X=0;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //進(jìn)入自動(dòng)寫(xiě)
for(i=0;i<LcmWidthDots;i++)
{
for(j=0;j<LcmLengthDots/8;j++)
{
CheckAutoWrite();
LcmWriteData(puts[X]);
X++;
}
}
LcmWriteCommand(0xB2); //退出自動(dòng)寫(xiě)
}
//反顯一副圖片函數(shù)
void ReverseOneBmp( void )
{ //利用數(shù)據(jù)一次讀寫(xiě)操作
uchar i,j,X; //只能對(duì)一段RAM取反
LocateXY(0,0,Graphic);
for(i=0;i<LcmWidthDots;i++)
{
for(j=0;j<LcmLengthDots/8;j++)
{
LcmWriteCommand(0xC5); //讀數(shù)據(jù),地址不變
CheckRWCD();
X = LcmReadData();
X = ~X;
LcmWriteCommandWith1Par(X,0xC0);
}
}
}
//屏讀功能演示
void ScreenReadDemo( void )
{ //利用屏讀
//能對(duì)當(dāng)前屏幕反顯,包括合成內(nèi)容(本函數(shù)僅讀文本到圖形)
//但是寫(xiě)入后的內(nèi)容都在圖形區(qū)
//可以將文本區(qū)內(nèi)容讀出以圖形方式寫(xiě)到圖形區(qū)
uchar i,j,X;
//使用屏讀屏考時(shí)候必須設(shè)置寬度為40(硬件已決定)
//所以如確定要用到屏讀屏考的話最后初始化時(shí)就設(shè)40
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -