請教高手,那個我這邊怎么只顯示下半屏呢?求指教!
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs =P2^0 ;
sbit rw =P2^1 ;
sbit ep =P2^2 ;
sbit cs1 =P2^3 ;
sbit cs2 =P2^4 ;
sbit rst =P2^5 ;
uchar code hzk[] ={
0x10,0x90,0xF0,0x1F,0x10,0xF0,0x40,0x3C,
0x10,0x10,0xFF,0x10,0x10,0x10,0x00,0x00,
0x40,0x22,0x15,0x08,0x16,0x21,0x40,0x42,
0x42,0x42,0x7F,0x42,0x42,0x42,0x40,0x00,//*,"姓",1*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//*" ",2*/
//* (16 X 16 , 宋體 )*/
0x00,0x20,0x20,0x10,0x08,0x14,0x67,0x84,
0x44,0x24,0x14,0x0C,0x00,0x00,0x00,0x00 ,
0x04,0x04,0x04,0x02,0xFE,0x43,0x43,0x42 ,
0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,//*"名",3*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//*" ",4*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,
0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00,0x00,
0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,
0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00,//*"單",5*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0xFE,0x20,0x20,0x20,0x20,
0x20,0x3F,0x20,0x20,0x20,0x20,0x00,0x00,
0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,
0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,//*"片",6*/
//* (16 X 16 , 宋體 )*/
0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,
0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,
0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,//*"機(jī)",7*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//*" ",8*/
//* (16 X 16 , 宋體 )*/
0x02,0x02,0xFE,0x92,0x92,0xFE,0x02,0x02,
0xFC,0x04,0x04,0x04,0x04,0xFC,0x00,0x00,
0x08,0x18,0x0F,0x08,0x04,0xFF,0x04,0x80,
0x63,0x19,0x01,0x01,0x09,0x33,0xC0,0x00,//*"職",9*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//*" ",10*/
//* (16 X 16 , 宋體 )*/
0x24,0x24,0xA4,0xFE,0x23,0x22,0x40,0x30,
0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x08,0x06,0x01,0xFF,0x01,0x02,0x10,0x0C,
0x43,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,//*"稱",11*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//*" ",12*/
//* (16 X 16 , 宋體 )*/
0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,
0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,//*"工",13*/
//* (16 X 16 , 宋體 )*/
0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x3E,
0x22,0x22,0x22,0x22,0x22,0x3E,0x00,0x00,
0x08,0x06,0x01,0xFF,0x01,0x06,0x40,0x49,
0x49,0x49,0x7F,0x49,0x49,0x49,0x41,0x00,//*"程",14*/
//* (16 X 16 , 宋體 )*/
0x00,0xFC,0x00,0x00,0xFF,0x00,0x02,0xE2,
0x22,0x22,0xFE,0x22,0x22,0xE2,0x02,0x00,
0x00,0x87,0x40,0x30,0x0F,0x00,0x00,0x1F,
0x00,0x00,0xFF,0x08,0x10,0x0F,0x00,0x00,//*"師",15*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//*" ",16*/
//* (16 X 16 , 宋體 )*/
0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,
0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,
0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,
0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00,//*"愛",17*/
//* (16 X 16 , 宋體 )*/
0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,
0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,
0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,
0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,//*"好",18*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//*" ",19*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x45,
0x46,0x44,0x44,0x44,0x44,0x7C,0x00,0x00,
0x40,0x20,0x18,0x07,0x00,0xFC,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0xFC,0x00,0x00,//*"啟",20*/
//* (16 X 16 , 宋體 )*/
0x22,0x2A,0xAA,0xFF,0xAA,0xAA,0xA2,0x80,
0xA2,0xAA,0xAA,0xFF,0xAA,0x2A,0x22,0x00,
0x80,0x60,0x08,0x0A,0x6A,0x8A,0x8A,0x9A,
0xAA,0x8A,0x8A,0xCA,0x0F,0x20,0xC0,0x00,//*"慧",21*/
//* (16 X 16 , 宋體 )*/
0x00,0xFC,0x44,0x44,0x44,0xFC,0x00,0x00,
0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x00,0x0F,0x04,0x04,0x04,0x8F,0x40,0x30,
0x0F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,//*"明",22*/
//* (16 X 16 , 宋體 )*/
0x10,0x94,0x53,0x32,0x1E,0x32,0x52,0x10,
0x00,0x7E,0x42,0x42,0x42,0x7E,0x00,0x00,
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,
0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,//*"智",23*/
//* (16 X 16 , 宋體 )*/
0x80,0x64,0x2C,0x34,0x24,0x24,0x2C,0x32,
0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,
0x80,0x80,0x41,0x43,0x25,0x29,0x11,0x11,
0x11,0x29,0x25,0x43,0x40,0x80,0x80,0x00,//*"受",24*/
//* (16 X 16 , 宋體 )*/
0x08,0x08,0x88,0x49,0x2A,0x08,0x08,0x08,
0x08,0x08,0x2A,0x49,0x88,0x08,0x08,0x00,
0x40,0x41,0x7E,0x42,0x42,0x7E,0x42,0x42,
0x42,0x7E,0x42,0x42,0x7E,0x41,0x40,0x00,//*"益",25*/
//* (16 X 16 , 宋體 )*/
0x20,0x30,0xAC,0x63,0x30,0x20,0x10,0x18,
0xA7,0x44,0xA4,0x14,0x0C,0x00,0x00,0x00,
0x22,0x67,0x22,0x12,0x12,0x02,0x01,0x21,
0x24,0x44,0x48,0x91,0x01,0x02,0x02,0x00,//*"終",26*/
//* (16 X 16 , 宋體 )*/
0x00,0x00,0x00,0xFC,0x54,0x56,0x55,0x54,
0x54,0x54,0x54,0xFC,0x00,0x80,0x40,0x00,
0x40,0x42,0x42,0x23,0x22,0x22,0x12,0x12,
0x0A,0x46,0x82,0x7F,0x01,0x00,0x00,0x00,//*"身",27*/
//* (16 X 16 , 宋體 )*/
} ;
uchar code ezk[] ={
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,/*"p",0*/
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,/*"r",1*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",2*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,/*"t",3*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,/*"e",4*/
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"u",5*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,/*"s",6*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",8*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",9*/
} ;
void delay(uint n)
{
uint i ;
while(n--)
{
for(i = 0;i<120;i++) ;
}
}
uchar busy_check() //測試LCD忙碌狀態(tài)
{
uchar LCD_Status ;
rs = 0 ;
rw = 1 ;
do
{P0=0x00 ;
ep=1 ;
_nop_() ;
LCD_Status=P0 ;
ep = 0 ;
LCD_Status = 0x80&LCD_Status ;
}while(!(LCD_Status==0x00)) ;
return 0 ;
}
void lcd_wcmd(uchar cmd) //寫入指令數(shù)據(jù)到LCD
{
busy_check() ; //等待LCD空閑
rs = 0 ;
rw = 0 ;
ep = 0 ;
P0 = cmd ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
ep = 1 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
ep = 0 ;
}
void lcd_wdat(uchar dat) //寫入字符顯示數(shù)據(jù)到LCD
{
busy_check() ;
rs = 1 ;
rw = 0 ;
P0 = dat ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
ep = 1 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
ep = 0 ;
}
void setline(uchar page) //設(shè)置頁0xb8是首地址
{
page = 0xb8|page ; //1011 1*** <=page<=7 設(shè)定頁地址--X0-7,8行位一頁64/8=8,共8頁
lcd_wcmd(page) ;
}
void setstartline (uchar startline) //設(shè)定顯示開始行,0xc0是行的首地址
{
startline = 0xc0|startline ; //1100 0000
lcd_wcmd(startline) ; //設(shè)置從哪行開始:0-63一般從0開始顯示
}
void setcolumn(uchar column) //設(shè)定列地址--Y 0-63,0x40是列的首地址
{ column = column&0x3f ; //column最大值為64,越出0=<column<=63
column = 0x40|column ; //01** ****
lcd_wcmd(column) ;
}
void dison_off(uchar onoff) //開關(guān)顯示:0x3f是開顯示,0x3e是關(guān)顯示
{
onoff = 0x3f|onoff ; //0011 111* ,onoff只能為0或者1
lcd_wcmd(onoff) ;
}
void selectscreen (uchar no) //選擇屏幕
{
switch (no) //選擇左右兩片(全屏)
{
case 0 :
cs1 = 0 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
cs2 = 0 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
break ;
case 1 : //選擇左屏
cs1 = 1 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
cs2 = 0 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
break ;
case 2 : //選擇右屏
cs1 = 0 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
cs2 = 1 ;
_nop_() ;
_nop_() ;
_nop_() ;
_nop_() ;
break ;
default :
_nop_() ;
}
}
void clearscreen (uchar screen) //清屏
{
uchar i, j ;
selectscreen(screen) ;
for (i=0 ;i<8;i++) //控制頁數(shù)0-7,共8頁
{
setline(i) ;
setcolumn(0);
for(j=0 ;j<64;j++) //控制頁數(shù)0-63,共64列
{
lcd_wdat(0x00) ; //寫點(diǎn)內(nèi)容,列地址自動加1
}
}
}
void disp_sinogram(uchar ss ,uchar page ,uchar column,uchar number) //顯示全角漢字
{
int i; //選屏參數(shù),page選頁參數(shù),column選列參數(shù),number選第幾漢字輸出
selectscreen(ss) ;
column = column&0x3f ;
setline (page) ; //寫上半頁
setcolumn(column); //控制列
for(i=0;i<16;i++) ; //控制16列的數(shù)據(jù)輸出
{
lcd_wdat(hzk[i+32*number]) ; //i+32*number漢字的前16個數(shù)據(jù)輸出
}
setline (page+1) ; //寫下半頁
setcolumn(column); //控制列
for (i = 0;i<16;i++) //控制16列的數(shù)據(jù)輸出
{
lcd_wdat(hzk[i+32*number+16]) ; //i+32*number+16漢字的后16個數(shù)據(jù)輸出
}
}
void disp_english(uchar ss ,uchar page ,uchar column,uchar number) //顯示半角漢字和數(shù)字和字母
{
uint i; //選屏參數(shù),page選頁參數(shù),column選列參數(shù),number選第幾漢字輸出
selectscreen(ss) ;
column = column&0x3f ;
setline (page) ; //寫上半頁
setcolumn(column);
for(i=0;i<8;i++) ;
{
lcd_wdat(ezk[i+16*number]) ;
}
setline (page+1) ; //寫下半頁
setcolumn(column);
for (i = 0;i<8;i++)
{
lcd_wdat(ezk[i+16*number+8]) ;
}
}
void lcd_reset() //LCD復(fù)位
{
rst = 0 ;
delay(20) ;
rst = 1 ;
delay(20) ;
}
void lcd_init()
{
lcd_reset() ; //LCD復(fù)位
busy_check() ; //等待LCD為空閑狀態(tài)
selectscreen(0) ; //選擇全屏
dison_off(0) ; //關(guān)全屏顯示
selectscreen(0) ;
dison_off(1) ; //開全屏顯示
selectscreen(0) ;
clearscreen(0) ; //清屏
setstartline(0) ; //開始行:0
}
void main (void)
{
uint i ;
lcd_init() ; //對LCD初始化
delay(10) ;
clearscreen(0) ; //LCD清屏
setstartline(0) ; //設(shè)置顯示開始行
while(1)
{
for(i=0 ;i<4;i++)
{ //disp_sinogram(選屏參數(shù)(cs0,cs1),page選頁參數(shù),column選列參數(shù),number選第幾漢字輸出
disp_sinogram(2,0,i*16,i) ; //第一行左屏顯示4個漢字“姓名”
delay(10) ;
disp_sinogram(1,0,i*16,i+4) ; //第一行右屏顯示4個漢字“單片機(jī)”
delay(10) ;
disp_sinogram(2,0+2,i*16,i+8) ; //第二行左屏顯示4個漢字“職稱”
delay(10) ;
disp_sinogram(1,0+2,i*16,i+12) ; //第一行右屏顯示4個漢字“工程師”
delay(10) ;
disp_sinogram(2,0+2+2,16*16,17) ; //第三行左屏顯示第一個漢字“愛”
delay(10) ;
disp_sinogram(2,0+2+2,17*16,18) ; //第三行左屏顯示第二個漢字“好”
delay(10) ;
disp_sinogram(2,0+2+2,18*16,19) ; //第三行左屏顯示第三個漢字“:”
delay(10) ;
disp_sinogram(2,0+2+2+2,i*16,i+19) ; //第四行左屏顯示4個漢字“啟慧明智”
delay(10) ;
disp_sinogram(1,0+2+2+2,i*16,i+23) ; //第四行右屏顯示4個漢字“受益終身”
delay(10) ;
}
disp_english(2,0+2+2,6*8,0) ; //第三行左屏D6列開始顯示P
delay(10) ;
disp_english(2,0+2+2,7*8,1) ; //第三行左屏D7列開始顯示r
delay(10) ;
for(i=0;i<8;i++)
{
disp_english(1,0+2+2,i*8,i+2); //第三行右屏顯示“oteus7.1”
delay(10) ;
}
}
}
|