本帖最后由 一条大河 于 2010-6-30 14:29 编辑
这是我的一段驱动,你可以参考下<br /><br />void WriteChar7843 (unsigned char Data)<br />{<br /> unsigned char Count=0,i=0;<br /> ;P0DATA &= 0xfb; // dclk 拉低<br /> for (Count=0; Count<8; Count++)<br /> {<br /> if ((Data & 0x80) == 0x80)<br /> {<br /> ;P0DATA |= 0x40; // din输出高<br /> }<br /> else<br /> {<br /> ;P0DATA &= ~0x40; //din输出低<br /> }<br /> ;P0DATA &= 0xfb; //命令实用dclk的上升沿<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /><br /> ;P0DATA |= 0x04;<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> Data <<= 1;<br /> }<br />}<br /><br />unsigned int ReadFrom7843 (void)<br />{<br /> unsigned char Count;<br /> unsigned int i,Data;<br /><br /> <br /> ;P0DATA &= 0xfb; //dclk 输出低<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> <br /> //for (Count=0; Count<12; Count++)<br /> for (Count=0; Count<16; Count++) //读16次<br /> {<br /> Data <<= 1;<br /> ;P0DATA |= 0x04; //读数据实用dclk下降沿<br /> i = 0;i = 0;i = 0; // 延时用<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> ;P0DATA &= 0xfb;<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> i = 0;i = 0;i = 0;<br /> if ((P0DATA & 0x08) == 0x08)<br /> {<br /> Data |= 0x0001;<br /> }<br /> else<br /> {<br /> Data &= 0xfffe;<br /> }<br /> }<br /> Data >>= 4;<br /> return (Data);<br /> <br />}<br /><br />void interrupt(void)<br />{<br /> //请注意,在读数据的过程中,请关掉中断,<br /> //不然会产生重复触发<br /> Delay(10000); //延时消抖<br /><br /> WriteChar7843(0x90); //发读取x坐标命令<br /> Delay(30);<br /> Xnow = ReadFrom7843();//读取数据<br /> <br /> WriteChar7843(0xd0);//发读取y坐标命令<br /> Delay(30);<br /> Ynow = ReadFrom7843(); //读取数据<br />}<br /><br />另外,驱动是小事情啦,后面的消抖滤波可能会更麻烦一点呢。<br /><br />有问题可联系我qq
|