我在网上找到如下代码<br /><br />可调通,我有几个地方不明白,请大家帮助<br /><br />问题1:函数 void Gra(uchar x,uchar y)里<br />最后一句Sendint(0x8000>>(x%16));是啥意思<br /><br />问题2:函数void Sendint(uint dd)也不明白<br /><br />问题3:程序执行结果液晶屏的分为上下两部分两个IBM<br /> 是由哪个函数引起的我觉得是由函数<br /> void put(uchar *p)引起,原来我用过12232用字模程序倒入图像是全屏的,而这个程序分为上下两部分,<br /><br /><br />请大家帮助分析一下<br /><br /> #include <reg51.h><br />#include <intrins.h><br /><br />sbit E_CLK =P0^1;//clock input 同步时钟输入端<br />sbit RW_SID=P1^3;//data input/output 串行数据输入、输出端<br /><br /><br /><br /><br />#define uchar unsigned char<br />#define uint unsigned int<br /><br /> #define ROW1 0x80<br /> #define ROW2 0x90<br /> #define ROW3 0x88<br /> #define ROW4 0x98<br /><br /><br /><br /><br /><br />//////////////////////<br />//内部函数原型<br />//////////////////////<br /><br />void SendData(unsigned char dat);<br /><br /><br /> unsigned char code AC_TABLE[]={<br /> 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, <br /> //第一行汉字位置<br /> 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, <br /> //第二行汉字位置<br /> 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, <br /> //第三行汉字位置<br /> 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, <br /> //第四行汉字位置<br /> };<br /><br />void delay(unsigned int n)<br />{<br /> unsigned int i;<br /> for(i=0; i<n; i++) {;}<br />}<br /><br /><br /><br /> //串行发送一字节数据<br />void SendByte(unsigned char dat)<br />{<br /> unsigned char i;<br /> for(i=0;i<8;i++)<br /> {<br /> E_CLK=0;<br /> if(dat&0x80)RW_SID=1;else RW_SID=0;<br /> E_CLK=1;<br /> dat=dat<<1;<br /> }<br />}<br />//串行接收一字节数据<br />unsigned char ReceieveByte(void)<br />{<br /> unsigned char i,d1,d2;<br /> for(i=0;i<8;i++)<br /> {<br /> E_CLK=0;delay(100);<br /> E_CLK=1;<br /> if(RW_SID)d1++;<br /> d1=d1<<1;<br /> }<br /> for(i=0;i<8;i++)<br /> {<br /> E_CLK=0;delay(100);<br /> E_CLK=1;<br /> if(RW_SID)d2++;<br /> d2=d2<<1;<br /> }<br /> return (d1&0xF0+d2&0x0F);<br />}<br /><br /><br />//读取标志位BF<br />bit ReadBF(void)<br />{<br /> unsigned char dat;<br /> bit bf;<br /> SendByte(0xFA);//11111,01,0 RW=1,RS=0<br /> dat=ReceieveByte();<br /> if(dat>0x7F)bf=1;else bf=0;<br /> return bf;<br /> }<br />//写控制命令<br />void SendCMD(unsigned char dat)<br />{<br /><br /> SendByte(0xF8);//11111,00,0 RW=0,RS=0 同步标志<br /> SendByte(dat&0xF0);//高四位<br /> SendByte((dat&0x0F)<<4);//低四位<br /><br />}<br /><br /><br /><br /><br />//写显示数据或单字节字符<br />void SendData(unsigned char dat)<br />{<br /><br /> SendByte(0xFA);//11111,01,0 RW=0,RS=1<br /> SendByte(dat&0xF0);//高四位<br /> SendByte((dat&0x0F)<<4);//低四位<br /><br />}<br /><br /><br /><br /><br /><br />//初始化 LCM<br />void initlcm(void)<br />{<br /><br /> delay(100);<br /><br /> SendCMD(0x30);//功能设置,一次送8位数据,基本指令集<br /> SendCMD(0x0c);//0000,1100 整体显示,游标off,游标位置off<br /> SendCMD(0x01);//0000,0001 清DDRAM<br /> SendCMD(0x02);//0000,0010 DDRAM地址归位<br /> SendCMD(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC<br /> <br />}<br /><br /><br /><br /><br /> void PutStr(unsigned char row,unsigned char <br /> col,unsigned char *puts)<br /> {<br /> SendCMD(0x30); //8BitMCU,基本指令集合<br /> SendCMD(AC_TABLE[8*row+col]); //起始位置<br /> while(*puts != '\0') //判断字符串是否显示完毕<br /> {<br /> if(col==8) //判断换行<br /> { //若不判断,则自动从第一行到第三行<br /> col=0;<br /> row++;<br /> }<br /> if(row==4) row=0; //一屏显示完,回到屏左上角<br /> SendCMD(AC_TABLE[8*row+col]);<br /> SendData(*puts); //一个汉字要写两次<br />puts++;<br />SendData(*puts);<br />puts++;<br />col++;<br />}<br />} <br /><br /><br /> void Sendint(uint dd)<br /> {<br /> SendData(dd>>8);<br /> SendData(dd);<br /> }<br /><br /><br /> void Gra(uchar x,uchar y)<br /> {<br /> uchar xx,yy;<br /> SendCMD(0x34);<br /> SendCMD(0x36);<br /> xx=x/16;<br /> yy=63-y;<br /> if(yy>=32){xx=xx+8;yy-=32;}<br /> SendCMD(0x80+yy);<br /> SendCMD(0x80+xx);<br /> Sendint(0x8000>>(x%16));<br /> <br /> }<br /> <br /> <br /> <br /> <br /> <br /><br /> void put(uchar *p)<br /><br />{<br /> uchar xx,yy ;<br /><br />for(yy=0;yy<32;yy++)<br />for(xx=0;xx<8;xx++)<br />{<br /> SendCMD(0x80+yy); //y 按位<br /> SendCMD(0x80+xx); //x 按16位<br /> SendData(*p);<br />p++;<br /> SendData(*p);<br /> p++;<br />}<br /><br />for(yy=0;yy<32;yy++)<br /> for(xx=8;xx<16;xx++)<br /> {<br /> SendCMD(0x80+yy); //y 按位<br /> SendCMD(0x80+xx); //x 按16位<br /> SendData(*p);<br /> p++;<br /> SendData(*p);<br /> p++;<br /> }<br /> }<br /> <br /> <br /><br /> void PutBMP(unsigned char *puts)<br />{<br /> unsigned int x=0;<br /> unsigned char i,j;<br /> SendCMD(0x34); //8Bit扩充指令集,即使是36H也要写两次<br /> SendCMD(0x36); //绘图ON,基本指令集里面36H不能开绘图<br /> for(i=0;i<32;i++) //12864实际为256x32<br /> {<br /> SendCMD(0x80|i); //行位置<br /> SendCMD(0x80); //列位置<br /> for(j=0;j<32;j++) //256/8=32 byte<br /> { //列位置每行自动增加<br /> SendData(puts[x]);<br /> x++;<br /> }<br /> }<br /> }<br /> <br /> <br /> void Clear()<br /> { uchar i,j;<br /> //LCDInittest();<br /> SendCMD(0x34);<br /> SendCMD(0x3e);// RE=1 扩展指令选择 G=1 开图形显示 <br /> <br /> for(j=0;j<16;j++)<br /> for(i=0;i<32;i++)<br /> <br /> {<br /> SendCMD(0x80+i);<br /> SendCMD(0x80+j);<br /> SendData(0x00);<br /> SendData(0x00);<br /> }<br /> <br /> } <br /><br /><br /><br /> uchar code IBM[]=<br /> {<br /> <br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xE0,0x00,0x07,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xE0,0x00,0x0F,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xE0,0x00,0x0F,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,0xFE,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xF8,0x00,0x3F,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFE,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFE,0x01,0xFF,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFF,0x01,0xFF,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x03,0xFF,0xFF,0x03,0xFF,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0x80,0x03,0xFF,0xFF,0x83,0xFF,0xFF,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xCF,0xFF,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0xBF,0xFF,0xFB,0xFF,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x03,0xFF,0x8F,0xFF,0xF3,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0x87,0xFF,0xE3,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x03,0xFF,0x87,0xFF,0xE3,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x03,0xFF,0x87,0xFF,0xC3,0xFF,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0x80,0x01,0xFF,0x83,0xFF,0x83,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x81,0xFF,0x03,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x81,0xFF,0x03,0xFF,0x00,<br /> 0x00,0xFF,0xC0,0x00,0x0F,0xF8,0x00,0xFF,0xC0,0x01,0xFF,0x80,0xFF,0x03,0xFF,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x7E,0x03,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x7C,0x03,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xC0,0x3C,0x03,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFF,0x80,0xFF,0xFF,0xC0,0x3C,0x03,0xFF,0xFE,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xC0,0x18,0x03,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xC0,0x18,0x03,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xC0,0x08,0x03,0xFF,0xFE,<br /> 0x7F,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xC0,0x00,0x03,0xFF,0xFE,<br /> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br /><br /><br /> };<br /><br /><br /><br /><br /><br />void main(void)<br />{<br /> initlcm();<br /> <br /> Clear();<br /><br /> PutBMP(IBM);<br /> <br /> while(1);<br /><br />}<br /><br /><br /><br /><br /><br /> |