//程序见下面<br />//参考了某位网友的模拟总线程序,时间好久了想不起来了。<br />//在此感谢那位网友<br />//程序要结合1335的硬件才能更明白<br />//接口用的是0口<br /><br /><br /><br />#define uchar unsigned char<br />#define uint unsigned int<br />#define D1 0x0000 /*D1/D2/D3:分别为LCD第一二三区之首地址*/<br />#define D2 0x2580<br />#define D3 0x4b00<br /><br />//lcd interface<br />#define WR_N (1<<13)<br />#define RD_N (1<<12)<br />#define CS_N (1<<16) <br />#define A0 (1<<15) <br /><br />#define DB0 (1<<4)<br />#define DB1 (1<<5)<br />#define DB2 (1<<6)<br />#define DB3 (1<<7)<br />#define DB4 (1<<8) <br />#define DB5 (1<<9)<br />#define DB6 (1<<10)<br />#define DB7 (1<<11)<br /><br />#define LCD 1 //显示效果不错 ,还需要改进<br />void OutData(unsigned char Data)<br />{<br /> volatile uchar i;<br /> IO0CLR|=A0;<br /> IO0CLR|=CS_N;<br /> for(i=0;i<LCD;i++)<br /> ;<br /> IO0SET|=(Data<<4);<br /> Data=(~Data);<br /> IO0CLR|=(Data<<4);<br /> IO0CLR|=WR_N;<br /> for(i=0;i<LCD;i++)<br /> ;<br /> IO0SET|=WR_N;<br /> for(i=0;i<LCD;i++)<br /> ;<br /> IO0SET|=CS_N;<br /> <br />}<br />void OutCommand(unsigned char CMD)<br />{<br /> volatile uchar i;<br /> IO0SET|=A0;<br /> IO0CLR|=CS_N;<br /> for(i=0;i<LCD;i++)<br /> ;<br /> IO0SET|=(CMD<<4);<br /> CMD=(~CMD);<br /> IO0CLR|=(CMD<<4);<br /> IO0CLR|=WR_N;<br /> for(i=0;i<LCD;i++)<br /> ;<br /> IO0SET|=WR_N;<br /> for(i=0;i<LCD;i++)<br /> ;<br /> IO0SET|=CS_N;<br />}<br />void send_I2par(uchar z,uchar x,uchar y) /*送LCD两参数指令函数,第一形参为指令码*/<br />{<br /> OutCommand(z);<br /> OutData(x);<br /> OutData(y);<br /> }<br />void send_I1par(uchar z,uchar x) /*送LCD单参数指令子程,第一形参为指令码*/<br />{<br /> OutCommand(z);<br /> OutData(x);<br />}<br />void send_I0par(uchar z) /*送LCD无参数指令子程,形参为指令码*/<br />{<br /> OutCommand(z);<br />}<br />void wr_one8(uint d,uchar x,uchar y,uint z) /* 向LCD写一个8x8字符函数,<br />ch:8x8字符位于字库中的具体区域(CH8,CH16,CH24);d:欲写入LCD之显示区;x:LCD地址水平坐标;y:LCD<br />地址纵坐标,起点自上而下;z:字库中字符代码值*/<br />{<br /> uchar a,b ;<br /> const uchar * pCharLib;<br /> uint m,r,i;<br /> r=(d+x)+y*0x28; /*根据横纵坐标计算LCD实际地址,并将地址送b,a*/<br /> a=r; /*a,LCD低8位地址*/<br /> r >>= 8;<br /> b=r; /*B,LCD高8位地址*/<br /> m=z*8;<br /> send_I0par(0x4f);<br /> send_I2par(0x46,a,b);<br /> send_I0par(0x42);<br /> pCharLib=CharLib;<br /> for(i=m;i<(m+8);i++)<br /> {<br /> OutData(*(pCharLib+i));<br /> } <br />}
|