一个初始化HT1621的小程序!初学ARM不知道怎么回事液晶总是不亮,请各位帮帮我<br /><br /><br />* File:SPIDISP.C<br />* 功能:使用硬件SPI接口输出显示。(硬件:HT1621输出控制液晶显示)<br />* 说明:将跳线器JP9短接。<br />****************************************************************************/<br />#include "config.h" <br /><br />#define CS 0x00002000 /* P0.13 */<br />#define WR 0x00001000 /* P0.12 */<br /><br />#define CLK 0x00000800 /* P0.11 */<br />#define SPI_IOCON 0x00003800 <br />#define BIAS 0x52 <br />#define SYSEN 0x02<br />#define LCDON 0x06<br /><br />#define LCDOFF 0x04<br />#define uchar unsigned char<br />#define uint unsigned int<br />/****************************************************************************<br />* 名称:DelayNS()<br />* 功能:长软件延时<br />* 入口参数:dly 延时参数,值越大,延时越久<br />* 出口参数:无<br />****************************************************************************/<br />void DelayNS(uint32 dly)<br />{ uint32 i;<br /><br /> for(; dly>0; dly--) <br /> for(i=0; i<50000; i++);<br />}<br /><br /><br /><br />/****************************************************************************/<br />void SendBit_1621(uchar id,uchar cnt) //data的高cnt位写入HT1621,高位在前<br />{<br /> uchar i;<br /> //har y;<br /> for(i =0; i <cnt; i ++)<br /> { <br /> if((id&0x80)==0) <br /> IOCLR=CLK;<br /> else IOSET=CLK;<br /> IOCLR=WR;<br /> <br /> DelayNS(1); <br /> <br /> IOSET=WR;<br /> id<<=1;<br /> <br /> }<br />}<br /><br />/****************************************************************************/<br />void SendDataBit_1621(uchar id,uchar cnt) //data的低cnt位写入HT1621,低位在前<br />{<br /> uchar i;<br /> <br /> for(i =0; i <cnt; i ++)<br /> {<br /> if((id&0x01)==0)<br /> IOCLR=CLK;<br /> else IOSET=CLK;<br /> IOCLR=WR;<br /> DelayNS(1);<br /> IOSET=WR;<br /> id>>=1;<br /> <br /> }<br />}<br />/****************************************************************************/<br />void SendCmd(uchar command)<br />{<br /> IOCLR=CS;<br /> SendBit_1621(0x80,4); //写入标志码"100"和9位command命令<br /> SendBit_1621(command,8); <br /> IOSET=CS; //直接将command的最高位写"0"<br />}<br />/****************************************************************************/<br />void Write_1621(uchar addr,uchar id)<br />{<br /> IOCLR=CS;<br /> SendBit_1621(0xa0,3); //写入标志码"101"<br /> SendBit_1621(addr,6); //写入addr的高6位<br /> SendDataBit_1621(id,4); //写入data的低4位<br /> IOSET=CS;<br />}<br />/****************************************************************************/<br /><br /> <br />/****************************************************************************<br />* 名称:main()<br /> <br />****************************************************************************/<br />int main(void)<br />{ <br /> PINSEL0 = 0x00000000; // 设置spi<br /> PINSEL1 = 0x00000000;<br /> <br /> <br /> IODIR = SPI_IOCON; //将端口设为输出<br /> <br /> SendCmd(BIAS); //设置偏压和占空比<br /> SendCmd(SYSEN); //打开系统振荡器<br /> SendCmd(LCDON); //打开LCD偏压发生器<br /> <br /> Write_1621(0x08,0xaa); // 发送显示数据<br /> <br />SendCmd(LCDOFF);<br /> |
|