|
本帖最后由 dgahz 于 2014-11-20 22:48 編輯
lcd_address(uint page,uint column) //這里決定輸入點位置,共8頁,每頁8行,page范圍0-7;列column范圍0-127;
{ 頁(或行)決定了上下位置,列決定了左右位置。
transfer_command_lcd(0xb0+page); /*設(shè)置頁地址*/ 0xb0為規(guī)定的0頁地址
transfer_command_lcd(0x10+(column>>4&0x0f)); /*設(shè)置列地址的高4位*/ column>>4&0x0f取列地址高4位,為和格式規(guī)定的
0x10組合,需右移4位變成低4位,原因0x10已占高4位
transfer_command_lcd(column&0x0f); /*設(shè)置列地址的低4位*/ 取 列地址低4位
}
/*顯示16x16點陣圖像、漢字、生僻字或16x16點陣的其他圖標(biāo)*/
void display_graphic_16x16(uint page,uint column,uchar *dp)
{
uint i,j;
CS_12864=0; //片選選中芯片工作
for(j=0;j<2;j++)j //因為是要生成16*16,所以占2頁16列,每頁16列循環(huán)2次,注:每頁8行
{
lcd_address(page+j,column); //設(shè)置顯示位置命令
for (i=0;i<16;i++) //16列
{
transfer_data_lcd(*dp); //每次寫8位數(shù)據(jù) /*寫數(shù)據(jù)到LCD,每寫完一個8位的數(shù)據(jù)后列地址自 動加1*/
dp++; //寫完數(shù)據(jù)列地址自加,頁(行)不會自加,所以前面要加page+j這一條, 而column不用加
} //dp++必需有,它不會自加
}
CS_12864=1; //停芯片
}
/*全屏清屏*/
void clear_screen()
{
unsigned char i,j;
CS_12864=0;
for(i=0;i<9;i++) //為什么是9頁,猜可能頁地址儲存器多出一頁,清的是儲存器
{
transfer_command_lcd(0xb0+i);
transfer_command_lcd(0x10);
transfer_command_lcd(0x00);
for(j=0;j<132;j++) //列地址存儲器說明書上是83H 即0-131
{
transfer_data_lcd(0x00); //各點寫入0
}
}
CS_12864=1;
}
void display_text(uchar *s,page,column) //定點輸入16*16
{
uchar a;
for(a=0;s[a]!=0;a+=2) //選偶數(shù),a*8剛好為0,16,32,為16倍數(shù),16為一個字占位 置。a/2自己分析
{
display_graphic_16x16(page,column+a*8,tep[a/2+page]); //調(diào)用前面顯示16*16函數(shù),寫完一個字,向右挪一個字位置,
} //即列地址加16,而數(shù)據(jù)加1遞增
}
void main()
{
uchar i=0;
uchar j=0;
uchar k=0;
uint humi,gq;
P0=0;
CS_12864=0;
initial_lcd();
clear_screen();
display_text("溫度濕",0,0) ;
display_text("濕度濕",3,0);
display_text("光照濕",6,0);
} |
評分
-
查看全部評分
|