code uchar Table[]= { /*-- 文字: 欢 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00, 0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
/*-- 文字: 迎 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00, 0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
/*-- 文字: 光 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x40,0x42,0x44,0x5C,0xC8,0x40,0x7F,0x40,0xC0,0x50,0x4E,0x44,0x60,0x40,0x00, 0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,
/*-- 文字: 临 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xF8,0x00,0x00,0xFE,0x40,0x30,0x8F,0x0A,0x08,0x18,0x68,0x08,0x88,0x08,0x00, 0x00,0x1F,0x00,0x00,0x7F,0x00,0x00,0x7F,0x21,0x21,0x3F,0x21,0x21,0x7F,0x01,0x00 }; /*---------------------------------------------------------------------------- 下面这个函数用于向液晶模块写入显示数据。 函数入口参数:Data------ 向液晶模块写入的显示数据 。 CS_Num-------左右半屏的选数值 ----------------------------------------------------------------------------*/ void LCD_WriteData(uchar Data,uchar CS_Num) { LCD_Check_Busy(); if(CS_Num==1) /*选择左半屏*/ { LCD_CS1 = 0; LCD_CS2 = 1; } else if(CS_Num==2) /*选择右半屏*/ { LCD_CS1 = 1; LCD_CS2 = 0; } LCD_EN = 0; LCD_RS = 1; /* 置寄存器选择为H */ LCD_RW = 0; /* 置读/写选择为L */ LCD_PORT = Data; /* 将显示数据输出到的数据端口 */ LCD_EN = 1; /* 使能信号为H */ Delay_us(1); /* 延时2us */ LCD_EN = 0; /* 使能信号为L */ LCD_CS1= 1; /* 置片选1为L */ LCD_CS2= 1; /* 置片选2为L */ }
/*--------------------------------------------------------------------------- *下面这个函数用于向液晶模块左右半屏写入汉字显示数据。 *函数入口参数:DisBuf-----向液晶模块写入的汉字显示数据 Side_Num------液晶模块左右半屏的选择数 Page_Num------开始显示页数(0----7),共八页 Clm_Num------开始显示列数 (16的倍数),共64列 Word_Num------每页显示的汉字个数(最多为4个) ---------------------------------------------------------------------------*/ void LCD_Play(uchar Page_Num,uchar Clm_Num,uchar Word_Num,uchar *DisBuf,uchar Side_Num) { uchar i,k,COM; COM=0xB8+Page_Num; LCD_WriteCommand(COM,Side_Num); COM=0x40+Clm_Num; LCD_WriteCommand(COM,Side_Num); for(i=0;i<Word_Num;i++) //每行显示汉字的个数 { for(k=0;k<16;k++) { LCD_WriteData(DisBuf[k+32*i],Side_Num);//这句为什么是32?左半屏显示4个汉字应该为16呀? } }
Page_Num++; COM=0xB8+Page_Num; LCD_WriteCommand(COM,Side_Num); COM=0x40+Clm_Num; LCD_WriteCommand(COM,Side_Num); for(i=0;i<Word_Num;i++) { for(k=16;k<32;k++) { LCD_WriteData(DisBuf[k+32*i],Side_Num);//这句不明白为什么是32?而不是16? } } Delay_us(2); } /*--------------------------------------------------------------------------- 下面这个函数为主函数,根据程序要实现的功能写相应的应用程序 ---------------------------------------------------------------------------*/ void main(void) {
LCD_Initial(); while(1) { LCD_CLR(Left); LCD_CLR(Right); LCD_Play(2,0,4,Table,Left); LCD_Play(2,0,4,Table,Right);//有右半屏四个字略
Delay_x10ms(250); Delay_x10ms(250); Delay_x10ms(250); Delay_x10ms(250); } }
就是这句不明白 LCD_WriteData(DisBuf[k+32*i],Side_Num);我看了很多例子都是这样写LCD_WriteData(DisBuf[k+16*i],Side_Num); |