?? lcm12864zk.c
字號(hào):
else if(row==4)
break;
}
}
return(i);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Lcd_clr_row(uint8 row)
- 函數(shù)說明 : LCM行清零
- 輸入?yún)?shù) : 無
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Lcd_clr_row(uint8 row)
{uint8 i,y;
switch(row)
{case 1:{y=0x80;break;}
case 2:{y=0x90;break;}
case 3:{y=0x88;break;}
case 4:{y=0x98;break;}
}
Write_command(y);
for(i=16;i!=0;i--)
Write_data(0x20);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 :void Lcm_hard_init(void)
- 函數(shù)說明 : LCD硬件初始化函數(shù)
- 輸入?yún)?shù) : 無
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Lcm_hard_init(void)
{ PINSEL0&=(~0xc0000000);/*P0.15 為通用IO */
PINSEL1&=(~0x0000000c);/*p0.17為通用IO */
IO0DIR|=0x00028000;/*P0.15、P0.17為輸出*/
PINSEL2&=(~0x00000008);/*P1.20作為通用IO口*/
PINSEL2|=0x00000030;/*P2.0-P2.15作為通用IO */
IO1DIR|=0x00100000;/*P1口設(shè)置為P1.20輸出*/
IO2DIR|=0x000007ff;/*P2口設(shè)置為P2.0-10輸出*/
PINSEL2|=0x00000030;
IO2DIR|=0x00000001;/*背光p2.0值為輸出*/
IO0SET|=PSB;
IO0SET|=RST;
Lcd_init();
}
/*
*************************************************************************************************************
- 函數(shù)名稱 :void guangbiao(uint8 a,uint8 b);
- 函數(shù)說明 : 顯示光標(biāo)
- 輸入?yún)?shù) : a當(dāng)前光標(biāo)位置 b以前光標(biāo)位置
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void guangbiao(uint8 a,uint8 b)
{ switch(b)
{case 1:Write_command(0x80);break;
case 2:Write_command(0x90);break;
case 3:Write_command(0x88);break;
case 4:Write_command(0x98);break;
}
Write_data(0x20);
switch(a)
{case 1:Write_command(0x80);break;
case 2:Write_command(0x90);break;
case 3:Write_command(0x88);break;
case 4:Write_command(0x98);break;
}
Write_data(16);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 :void backlights(uint8 st)
- 函數(shù)說明 : LCD背光開啟關(guān)閉函數(shù)
- 輸入?yún)?shù) : st 1開啟 0關(guān)閉
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void backlights(uint8 st)
{if(st==1)
IO2SET|=0x00000001;
else
IO2CLR|=0x00000001;
}
/*
*************************************************************************************************************
- 函數(shù)名稱 :void Graphy_display(uint8 h,uint8 v,uint8 *p)
- 函數(shù)說明 : 圖形顯示函數(shù)
- 輸入?yún)?shù) :
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void disply_ModeAmend(uint8 mode)
{if(mode==0)
{Write_command(0x30);/*功能設(shè)置---8BIT控制界面,基本指令集*/
Write_command(0x30);
}
else
{Write_command(0x34);
Write_command(0x34);/*功能設(shè)置---8BIT控制界面,擴(kuò)充指令集*/
}
}
void Graphy_clr(void)
{uint8 i,j;
Write_command(0x34);/*功能設(shè)置---8BIT控制界面,擴(kuò)充指令集*/
Write_command(0x34);
for(i=0;i<32;i++) //12864實(shí)際為256x32
{Write_command(0x80|i); //行位置
Write_command(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
//列位置每行自動(dòng)增加
Write_data(0);
}
disply_ModeAmend(0);
}
void Graphy_set(void)
{uint8 i,j;
Write_command(0x34);/*功能設(shè)置---8BIT控制界面,擴(kuò)充指令集*/
Write_command(0x34);
Write_command(0x36);
for(i=0;i<32;i++) //12864實(shí)際為256x32
{Write_command(0x80|i); //行位置
Write_command(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
//列位置每行自動(dòng)增加
Write_data(0xff);
}
}
/*
*************************************************************************************************************
- 函數(shù)名稱 :void Graphy_display(uint8 h,uint8 v,uint8 *p)
- 函數(shù)說明 : 圖形顯示函數(shù)
- 輸入?yún)?shù) : h(1~4),l(1~8),bytes(can not overflow)
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Graphy_display(uint h,uint l,uint8 bytes)
{/*set to extern command*/
uint8 i,j,row,line;
uint8 disp[]="您好!";
Lcd_init();
Lcd_clr();
Delay_Lcd(20);
disply_ModeAmend(1);
Graphy_clr();
Write_command(0x36);/*功能設(shè)置---8BIT控制界面,繪圖顯示ON*/
if(h==1||h==3)
row=0;
else
row=16;
if(h==1|h==2)
line=l-1;
else line=(7+l);
for(i=row;i!=(row+16);i++) //12864實(shí)際為256x32
{
Write_command(0x80|i); //行位置(0~31)
Write_command(0x80|line); //列位置(0~31)
for(j=0;j<bytes;j++) //256/8=32 byte
//列位置每行自動(dòng)增加
Write_data(0xff);
}
disply_ModeAmend(0);
// Lcd_dispp(disp,2,5,sizeof(disp)-1);
}
/*******************************************************************
;************顯示的圖形大小為128*64*********************************
;************超出后顯示不正確***************************************
********************************************************************/
void Graphy(uint8 lenth,uint8 width,uint8 row,uint8 line,uint8 *p)/*display 128*64 picture*/
{uint8 i,j,row_disp; //12864實(shí)際為256x32
uint16 t;
disply_ModeAmend(1);
Graphy_clr();
Write_command(0x36);/*功能設(shè)置---8BIT控制界面,繪圖顯示ON*/
t=0;
if(row<32)//上半屏顯示
{i=row-1;//上屏行處理
while(1)
{if(i==32||i==width+row-1)break;/*當(dāng)超出上屏或者顯示完圖形寬度退出*/
Write_command(0x80|i); //行位置(0~31)
Write_command(0x80|(line-1)); //列位置(0~15)
j=0;
while(1) //256/8=32 byte
//列位置每行自動(dòng)增加
{if(j==(lenth/8-(line-1)*2))break;//當(dāng)超出最后一列圖形沒有顯示完,未顯示的丟掉
Write_data(*(p+j+t));
j++;
}
t+=lenth/8;
i++;
}
row_disp=i-(row-1);//已經(jīng)顯示行數(shù)
}
if(row<32&&width>row_disp)//下半屏顯示(如果上半屏沒有顯示完所有圖形)
{i=0;//下屏行處理
while(1)
{if(i==width-row_disp||i==32)break;//當(dāng)超出32行或者有效圖形范圍顯示完則退出
Write_command(0x80|i); //行位置(0~31)
Write_command(0x80|(7+line));//列位置(0~15)
j=0;
while(1) //256/8=32 byte
//列位置每行自動(dòng)增加
{if(j==(lenth/8-(line-1)*2))break;//當(dāng)超出最后一列圖形沒有顯示完,未顯示的丟掉
Write_data(*(p+j+t));
j++;
}
t+=lenth/8;
i++;
}
}
else if(row>=32)
{i=row-32;//下屏行處理
while(1)
{if(i==width||i==32)break;//當(dāng)超出32行或者有效圖形范圍顯示完則退出
Write_command(0x80|i); //行位置(0~31)
Write_command(0x80|(7+line));//列位置(0~15)
j=0;
while(1) //256/8=32 byte
//列位置每行自動(dòng)增加
{if(j==(lenth/8-(line-1)*2))break;//當(dāng)超出最后一列圖形沒有顯示完,未顯示的丟掉
Write_data(*(p+j+t));
j++;
}
t+=lenth/8;
i++;
}
}
disply_ModeAmend(0);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 :void Character_Generate(uint8 address,uint8 *p)
- 函數(shù)說明 : 造字函數(shù)
- 輸入?yún)?shù) :
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Character_Generate(uint8 address,uint8 *p,uint8 mode)//僅僅是造字,對(duì)于顯示還須寫DDRAM(這時(shí)只須寫相應(yīng)編碼到DDRAM即可)
{uint8 i;
if(mode==1)//在0000h位置造字(即編碼0000h)
Write_command(0x40|address);
else if(mode==2)
Write_command(0x50|address);
else if(mode==3)
Write_command(0x60|address);
else if(mode==4)
Write_command(0x70|address);
for(i=0;i!=32;i++)
Write_data(*(p+i));
}
/*
*************************************************************************************************************
- 函數(shù)名稱 :void Character_Generate_disp(uint8 address,format)
- 函數(shù)說明 : 造字函數(shù)的顯示
- 輸入?yún)?shù) :
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Character_Generate_disp(uint8 row,uint8 line,uint8 format)
{uint8 y;
switch(row)
{case 1:{y=0x80+(--line);break;}
case 2:{y=0x90+(--line);break;}
case 3:{y=0x88+(--line);break;}
case 4:{y=0x98+(--line);break;}
}
Write_command(y); /* 定位顯示起始地址*/
if(format==1)//在0000h位置造字(即編碼0000h)
{Write_data(0x00);
Write_data(0x00);
}
else if(format==2)//在0002h位置造字(即編碼0002h)
{Write_data(0x00);
Write_data(0x02);
}
else if(format==3)//在0004h位置造字(即編碼0004h)
{Write_data(0x00);
Write_data(0x04);
}
else if(format==4)//在0006h位置造字(即編碼0006h)
{Write_data(0x00);
Write_data(0x06);
}
}
void Grapy_sifte(uint8 mode)//左右移動(dòng)屏幕
{if(mode==0)
Write_command(0x1c);
else
Write_command(0x18);
}
void Grapy_Scroll(uint8 addr)//上滾屏幕
{
disply_ModeAmend(1);
Write_command(0x34);
Write_command(0x03);
Write_command(0x40|addr);
disply_ModeAmend(0);
Delay_Lcd(200);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -