打印
[ZLG-ARM]

一个简单的液晶问题!!

[复制链接]
1633|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanis2|  楼主 | 2007-1-8 08:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个初始化HT1621的小程序!初学ARM不知道怎么回事液晶总是不亮,请各位帮帮我


* File:SPIDISP.C
* 功能:使用硬件SPI接口输出显示。(硬件:HT1621输出控制液晶显示)
* 说明:将跳线器JP9短接。
****************************************************************************/
#include  "config.h" 

#define   CS    0x00002000        /* P0.13 */
#define   WR    0x00001000    /* P0.12 */

#define   CLK    0x00000800        /* P0.11 */
#define   SPI_IOCON    0x00003800    
#define BIAS 0x52    
#define SYSEN 0x02
#define LCDON 0x06

#define LCDOFF 0x04
#define uchar unsigned char
#define uint unsigned int
/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly        延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<50000; i++);
}



/****************************************************************************/
void SendBit_1621(uchar id,uchar cnt)        //data的高cnt位写入HT1621,高位在前
{
    uchar i;
    //har y;
    for(i =0; i <cnt; i ++)
    {   
        if((id&0x80)==0) 
        IOCLR=CLK;
        else IOSET=CLK;
        IOCLR=WR;
        
        DelayNS(1);    
        
        IOSET=WR;
        id<<=1;
        
    }
}

/****************************************************************************/
void SendDataBit_1621(uchar id,uchar cnt)    //data的低cnt位写入HT1621,低位在前
{
    uchar i;
    
    for(i =0; i <cnt; i ++)
    {
        if((id&0x01)==0)
        IOCLR=CLK;
        else IOSET=CLK;
        IOCLR=WR;
        DelayNS(1);
        IOSET=WR;
        id>>=1;
        
    }
}
/****************************************************************************/
void SendCmd(uchar command)
{
    IOCLR=CS;
    SendBit_1621(0x80,4);    //写入标志码"100"和9位command命令
    SendBit_1621(command,8);         
    IOSET=CS;            //直接将command的最高位写"0"
}
/****************************************************************************/
void Write_1621(uchar addr,uchar id)
{
    IOCLR=CS;
    SendBit_1621(0xa0,3);            //写入标志码"101"
    SendBit_1621(addr,6);            //写入addr的高6位
    SendDataBit_1621(id,4);            //写入data的低4位
    IOSET=CS;
}
/****************************************************************************/

 
/****************************************************************************
* 名称:main()
 
****************************************************************************/
int  main(void)
{  
   PINSEL0 = 0x00000000;        // 设置spi
   PINSEL1 = 0x00000000;
  
  
    IODIR = SPI_IOCON;             //将端口设为输出
            
    SendCmd(BIAS);        //设置偏压和占空比
    SendCmd(SYSEN);    //打开系统振荡器
    SendCmd(LCDON);    //打开LCD偏压发生器
 
     Write_1621(0x08,0xaa);    //  发送显示数据
  
SendCmd(LCDOFF);

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

0

粉丝