?? t6963c-demo(ok060520).c
字號:
//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 P3.6 /RD=/RD P3.7 *
//FOSC=12MHz D0-D7=P0.0-P0.7 /RSET=/(CPU RSET) *
//***************************************************************************
#include "STC89C51RC_RD_PLUS.H" // <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 128 //64
#define LineChar 30 // 240/8=30
char xdata LcmDataPort _at_ 0x0000;
char xdata LcmCmdPort _at_ 0x0100;
sbit FS = P3^5;
sbit Key= P3^4;
uchar code bmp1[];
uchar code str1[];
unsigned char code HZTable[][32];
unsigned char code CharTable[][16];
//指令&數據讀寫狀態(tài)
void CheckRWCD(void)
{
while((LcmCmdPort & 0x03) != 0x03); //低電平忙
}
//數據自動寫狀態(tài)
void CheckAutoWrite(void)
{
while((LcmCmdPort & 0x08) == 0); //低電平忙
}
//屏讀/屏考貝出錯狀態(tài)
void CheckScreen(void)
{
while(LcmCmdPort & 0x40); //1出錯,0正確
}
//一個數據子寫入函數
void LcmWriteData(uchar uData)
{
LcmDataPort = uData;
}
//一個數據讀出函數
uchar LcmReadData( void )
{
uchar uData;
uData = LcmDataPort;
return uData;
}
//無參數指令寫入函數
void LcmWriteCommand(uchar Command)
{
CheckRWCD(); //檢測指令讀寫狀態(tài)
LcmCmdPort = Command;
}
//單參數指令寫入函數
void LcmWriteCommandWith1Par(uchar Parameter,uchar Command)
{
CheckRWCD(); //檢測指令讀寫狀態(tài)
LcmDataPort = Parameter;
CheckRWCD();
LcmCmdPort = Command;
}
//雙參數指令寫入函數
void LcmWriteCommandWith2Par(uchar Parameter1,uchar Parameter2,uchar Command)
{
CheckRWCD(); //檢測指令讀寫狀態(tài)
LcmDataPort = Parameter1;
CheckRWCD();
LcmDataPort = Parameter2;
CheckRWCD();
LcmCmdPort = Command;
}
//LCM初始化函數
void LcmInit( void )
{
LcmWriteCommandWith2Par(0x00,0x00,0x40); //設置文本顯示區(qū)首地址
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41); //設置文本顯示區(qū)寬度
LcmWriteCommandWith2Par(0x00,0x08,0x42); //設置圖形顯示區(qū)首地址0x0800
LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43); //設置圖形顯示區(qū)寬度
LcmWriteCommand(0xA7); //設置光標形狀 8x8方塊
LcmWriteCommand(0x81); //顯示方式設置 文本xor圖形(異或)
LcmWriteCommand(0x9C); //顯示開關設置 文本開,圖形開,光標閃爍關
}
//延時函數
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--;
}
}
//通過按鍵設定延時函數
void DelayKey(unsigned char HalfSecond)
{ //Delay_key加入時間參數0.5秒一級
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);
}
}
//清顯示存儲器函數
void LcmClear( uchar FillByte )
{
uint i = 8192; //此處僅清8K RAM,如果您32K RAM都使用,請修改i=32768(后面也要改)
if(FillByte) //注意如果填充ff時,如果RAM僅使用了8K,那么8192次會寫入到文本區(qū)
{ //會形成亂碼.(24064出廠時候默認將R7斷開,即默認使用8KRAM)
i -= 2*1024;//所以如果填入ff時候要扣除2K的文本區(qū)
LcmWriteCommandWith2Par(0x00,0x08,0x24); //填充0xff時候要在圖形區(qū)
}
else
LcmWriteCommandWith2Par(0x00,0x00,0x24);
LcmWriteCommand(0xB0); //進入自動寫
while(i--)
{
CheckAutoWrite();
LcmWriteData( FillByte );
}
LcmWriteCommand(0xB2); //退出自動寫
}
//設定顯示地址函數
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);
}
//顯示一個ASCII碼函數
void PutChar(uchar x,uchar y,uchar CharByte)
{
LocateXY(x,y,TXT);
LcmWriteCommandWith1Par(CharByte,0xC4);
}
//顯示一個字符串函數
void PutString(uchar x,uchar y,uchar *str)
{
while(*str != 0)
{
if(x> 29) //自動換行
{
x=0;
y++;
}
PutChar(x,y,*str);
++x;
++str;
}
}
void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode) //圖形方式顯示1個漢字
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+lin*LineChar + column; //圖形顯示RAM區(qū)為0800開始
for(i=0;i<16;i++)
{
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
LcmWriteCommandWith1Par( HZTable[hzcode][i*2], 0xc0); //數據寫地址+1
LcmWriteCommandWith1Par( HZTable[hzcode][i*2+1], 0xc4); //數據寫地址不變
StartAddr=StartAddr + LineChar;
}
}
void ShowHZReverse(unsigned char lin,unsigned char column,unsigned int hzcode) //圖形方式反顯 顯示1個漢字
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+lin*LineChar + column; //圖形顯示RAM區(qū)為0800開始
for(i=0;i<16;i++)
{
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
LcmWriteCommandWith1Par(~HZTable[hzcode][i*2], 0xc0); //數據寫地址+1
LcmWriteCommandWith1Par(~HZTable[hzcode][i*2+1], 0xc4); //數據寫地址不變
StartAddr=StartAddr + LineChar;
}
}
void ShowChar(unsigned char lin,unsigned char column,unsigned int hzcode) //圖形方式顯示1個英文字符
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+lin*LineChar + column; //圖形顯示RAM區(qū)為0800開始
for(i=0;i<16;i++)
{
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
LcmWriteCommandWith1Par( CharTable[hzcode][i], 0xc4); //數據寫地址不變
StartAddr=StartAddr + LineChar;
}
}
void ShowEmpty(unsigned char lin,unsigned char column) //圖形方式顯示1個空字符
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+lin*LineChar + column; //圖形顯示RAM區(qū)為0800開始
for(i=0;i<16;i++)
{
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
LcmWriteCommandWith1Par( 0x00, 0xc4); //數據寫地址不變
StartAddr=StartAddr + LineChar;
}
}
void line(unsigned char lin) //圖形方式畫一條線
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+lin*LineChar; //圖形顯示RAM區(qū)為0800開始
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
for(i=0;i<LineChar;i++)
{
LcmWriteCommandWith1Par( 0xFF, 0xc0); //數據寫地址不變
}
}
//顯示一副圖片函數
void DisplayOneBmp(uchar *puts)
{
uchar i,j;
uint X=0;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //進入自動寫
for(i=0;i<30;i++) //LcmWidthDots->30
{
for(j=0;j<LcmLengthDots/8;j++)
{
CheckAutoWrite();
LcmWriteData(puts[X]);
X++;
}
}
LcmWriteCommand(0xB2); //退出自動寫
}
//反顯一副圖片函數
void ReverseOneBmp( void )
{ //利用數據一次讀寫操作
uchar i,j,X; //只能對一段RAM取反
LocateXY(0,0,Graphic);
for(i=0;i<30;i++) //LcmWidthDots ->30
{
for(j=0;j<LcmLengthDots/8;j++)
{
LcmWriteCommand(0xC5); //讀數據,地址不變
CheckRWCD();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -