?? 12864_serial.c
字號:
do SendByte(0xfc); //11111,RW(1),RS(0),0
while(0x80&ReceiveByte()); //BF(.7)=1 Busy
}
/******************************************************************************************
* 函數名稱 :WriteCommand
* 功能描述 :寫命令
* 參數 : 參數名稱: 輸入/輸出? 類型 描述
*
* 返回值 :
* 作者 :
* 創建日期 :2006-12-19
* 全局變量 :
* 全局靜態變量:
* 局部靜態變量:
*----------------------------------------修改歷史------------------------------------------
* 當前版本 : 修改人: 修改日期:
* 修改說明 :
******************************************************************************************/
void WriteCommand(uchar Cbyte )
{
CheckBusy();
SendByte(0xf8); //11111,RW(0),RS(0),0
//SendByte(Cbyte);
SendByte(0xf0&Cbyte); //高四位
SendByte(0xf0&Cbyte<<4);//低四位(先執行<<)
}
/******************************************************************************************
* 函數名稱 :WriteData
* 功能描述 :
* 參數 : 參數名稱: 輸入/輸出? 類型 描述
*
* 返回值 :
* 作者 :
* 創建日期 :2006-12-19
* 全局變量 :
* 全局靜態變量:
* 局部靜態變量:
*----------------------------------------修改歷史------------------------------------------
* 當前版本 : 修改人: 修改日期:
* 修改說明 :
******************************************************************************************/
void WriteData(uchar Dbyte )
{
CheckBusy();
SendByte(0xfa); //11111,RW(0),RS(1),0
SendByte(0xf0&Dbyte); //高四位
SendByte(0xf0&Dbyte<<4);//低四位(先執行<<)
DDRC=DDRC|0x01;
}
/******************************************************************************************
* 函數名稱 :LcmInit
* 功能描述 :
* 參數 : 參數名稱: 輸入/輸出? 類型 描述
*
* 返回值 :
* 作者 :
* 創建日期 :2006-12-19
* 全局變量 :
* 全局靜態變量:
* 局部靜態變量:
*----------------------------------------修改歷史------------------------------------------
* 當前版本 : 修改人: 修改日期:
* 修改說明 :
******************************************************************************************/
void LcmInit( void )
{
DDRD|=(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
PORTD&=~(1<<PD7);
SET_CS;
WriteCommand(0x30); //8BitMCU,基本指令集合
WriteCommand(0x03); //AC歸0,不改變DDRAM內容 //地址歸0
WriteCommand(0x0C); //顯示ON,游標OFF,游標位反白OFF //整體顯示開,游標顯示關,反白關
WriteCommand(0x01); //清屏,AC歸0 //清除顯示
WriteCommand(0x06); //寫入時,游標右移動 //進入設定點
}
/******************************************************************************************
* 函數名稱 :LcmClearTXT
* 功能描述 :文本區清RAM函數
* 參數 : 參數名稱: 輸入/輸出? 類型 描述
*
* 返回值 :
* 作者 :
* 創建日期 :2006-12-19
* 全局變量 :
* 全局靜態變量:
* 局部靜態變量:
*----------------------------------------修改歷史------------------------------------------
* 當前版本 : 修改人: 修改日期:
* 修改說明 :
******************************************************************************************/
void LcmClearTXT( void )
{
uchar i;
WriteCommand(0x30); //8BitMCU,基本指令集合
WriteCommand(0x80); //AC歸起始位
for(i=0;i<64;i++)
WriteData(0x20);
}
/******************************************************************************************
* 函數名稱 :LcmClearBMP
* 功能描述 :圖形區清RAM函數
* 參數 : 參數名稱: 輸入/輸出? 類型 描述
* 圖形區和文本區顯示在兩個不同的RAM區
* 返回值 :
* 作者 :
* 創建日期 :2006-12-19
* 全局變量 :
* 全局靜態變量:
* 局部靜態變量:
*----------------------------------------修改歷史------------------------------------------
* 當前版本 : 修改人: 修改日期:
* 修改說明 :
******************************************************************************************/
void LcmClearBMP( void )
{
uchar i,j;
WriteCommand(0x34); //8Bit擴充指令集,即使是36H也要寫兩次
WriteCommand(0x36); //繪圖ON,基本指令集里面36H不能開繪圖
for(i=0;i<32;i++) //12864實際為256x32
{
WriteCommand(0x80|i); //行位置
WriteCommand(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
WriteData(0);
}
}
/******************************************************************************************
* 函數名稱 :PutStr
* 功能描述 :PutStr(x,y,str1); //X為行0--3 Y為行起始位置0--7
* 參數 : 參數名稱: 輸入/輸出? 類型 描述
*
* 返回值 :
* 作者 :
* 創建日期 :2006-12-19
* 全局變量 :
* 全局靜態變量:
* 局部靜態變量:
*----------------------------------------修改歷史------------------------------------------
* 當前版本 : 修改人: 修改日期:
* 修改說明 :
******************************************************************************************/
void PutStr(uchar row,uchar col,uchar *puts)
{
WriteCommand(0x30); //8BitMCU,基本指令集合
switch(row)
{
case 0:
WriteCommand(0x80+col);
break;
case 1:
WriteCommand(0x90+col);
break;
case 2:
WriteCommand(0x88+col);
break;
case 3:
WriteCommand(0x98+col);
break;
default:
break;
}
while(*puts != '\0') //判斷字符串是否顯示完畢
{
WriteData(*puts);
puts++;
}
}
void PutBMP(const unsigned char *puts)
{
uchar n,i,j;
unsigned char RamVar; //定義無符號變量(Ram變量)
for(n=0;n<2;n++) //分兩屏顯示
for(i=0;i<32;i++) //每屏32行
for(j=0;j<8;j++) //每行8個X地址坐標
{
WriteCommand(0x80+i); //寫Y坐標
WriteCommand(0x80+j+n*8); //寫X坐標。上半屏(n=0)地址為0x80-0x87,下半屏(n=1)地址為0x88-0x8f
RamVar = pgm_read_byte( &(*puts));
//也可RamVar = pgm_read_byte(puts);
WriteData(RamVar); //每個地址寫兩字節
RamVar = pgm_read_byte( &(*(puts+1)));
//也可RamVar = pgm_read_byte(puts+1);
WriteData(RamVar);
puts+=2;
}
WriteCommand(0x36); //打開繪圖
}
/***********************************************/
/*******PutBMP1顯示16*16點陣*******************/
/*****X0---3**************Y0--7***************************/
/***********將16*16點陣顯示在第X行第Y列**********************/
void Put16_16BMP1(const uchar *puts1,uchar x,uchar y)
{
uchar i,j;
unsigned char RamVar; //定義無符號變量(Ram變量)
//Row 行==0
if(x==0){x=0x80;y=x+y;}
if(x==1){x=0x90;y=x+y;}
if(x==2){x=0x80;y=x+y+8;}
if(x==3){x=0x90;y=x+y+8;}
WriteCommand(0x34); //8Bit擴充指令集,即使是36H也要寫兩次
WriteCommand(0x36); //繪圖ON,基本指令集里面36H不能開繪圖
for(i=0;i<16;i++) //12864實際為256x32
{
WriteCommand(x|i); //行位置
WriteCommand(y); //列位置
for(j=0;j<2;j++) //256/8=32 byte
{ //列位置每行自動增加
RamVar = pgm_read_byte( &(*puts1));////////////
//也可RamVar = pgm_read_byte(puts1);
WriteData(RamVar);
puts1++;
}
}
}
int main(void)
{
LcmInit();
LcmClearTXT();
LcmClearBMP();
while(1)
{
PutStr(0,0,"Welcome To HRBUST!");
delay(2000);
LcmClearTXT();
LcmClearBMP();
PutStr(0,0,"歡迎來到哈爾濱理工大學!");
delay(3000);
LcmClearTXT();
LcmClearBMP();
PutBMP(bmp0);
delay(2000);
LcmClearTXT();
LcmClearBMP();
PutBMP(bmp1);
delay(2000);
LcmClearTXT();
LcmClearBMP();
PutStr(1,2,str1);
PutStr(3,0,str2);
Put16_16BMP1(BMP0,0,0);
Put16_16BMP1(BMP1,0,7);
delay(2000);
LcmClearTXT();
LcmClearBMP();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -