| 
一个初始化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 /> |   
     
  
 |