打印

MSP430驱动HT1621

[复制链接]
2776|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yirongfu|  楼主 | 2011-11-26 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
多年前用过HT1621,后来MCU出现集成LCD驱动了,也就不怎么用它了,缅怀一下吧,呵呵,以下内容系转载:
----------------------------------------------------------------------------------------------------
HT1621为128(32×4)段、存储器映射的多功能LCD驱动器。它可设置为1/2或1/3偏置且通过S/W配置设置为2,3或4个公共端的LCD驱动。这使得HT1621适于多种LCD应用。它与主控制器之间只需要3根或4根线接口,LCD驱动时钟从系统时钟内产生,一般为256KHZ。

HT1621的参数如下:
工作电压:2.4V~5.2V
内置256kHz RC 振荡器
外部32.768kHz 晶体 或 256kHz频率输入
可选择1/2 或 1/3 偏压比和1/2 或 1/3 或 1/4 占空比LCD应用
内部时钟源
?个可选蜂鸣器频率 (2kHz/4kHz)
Power down 命令降低功耗
内置时基发生器和WDT
时基 或 WDT 溢出输出
8 种时基时基/WDT 时钟源
32x4 LCD 驱动
内置 32x4 位显示RAM
3-线接口
内部LCD 驱动频率源
软件构造特性
数据模式和命令模式指令
R/W 地址自动增加
三种数据访问模式

因为对LCD的写操作很快,只要处理得当,每次刷新之前先将LCD清屏,再写入需要显示的数据,肉眼是看不出抖动的。因此,驱动程序没有提供读HT1621的程序。如果各位有什么疑问,欢迎讨论

以下是接口程序,430测试频率为4M.

uchar cLCD_Buff[16] = 0;   //为ht1621开辟的显示缓存

void write_abit(uchar connect, uchar mask)
{
        while(mask)
        {
                LCD_PORT_OUT &=~LCD_BWR;            
                _NOP();_NOP();
                if(connect & mask)
                        LCD_PORT_OUT |= LCD_DATA;            
                else
                        LCD_PORT_OUT &= ~LCD_DATA;            
                _NOP();_NOP();_NOP();
                LCD_PORT_OUT |= LCD_BWR;            

                mask>>=1;
        }
        _NOP();
}

//void write_commond(uchar commond)
void LCD_OUT_COMD(uchar COMD)
{
        LCD_PORT_OUT &=~LCD_BCS;
    _NOP();
    //Send command head  "100"
    write_abit(0x04,0x04);
    //Send command
    write_abit(COMD,0x80);

        write_abit(0x00,0x01);
    LCD_PORT_OUT |= LCD_BCS;
        LCD_PORT_OUT |= LCD_BWR;
}

//void write_lcd_screen(void)
void LCDWrite(void)
{
        uchar cLCDNum, *pRamAdd,LCD_Count;
    cLCDNum=16;
    pRamAdd=&cLCD_Buff[0];
        
        LCD_PORT_OUT &=~LCD_BCS;
    _NOP();
    //Send command head  "101"
    write_abit(0x05,0x04);
        //Send start address "000000"
        write_abit(0x00,0x20);

        do
    {
                uchar temp_buffer = *pRamAdd;
                for (LCD_Count=0;LCD_Count<8;LCD_Count++)
                {
                        write_abit(temp_buffer,0x01);
                        temp_buffer = temp_buffer >> 1;  
                }
                cLCDNum--;
        pRamAdd++;
        }
        while(cLCDNum > 0);
        LCD_PORT_OUT |= LCD_BCS;
        LCD_PORT_OUT |= LCD_BWR;
}

void lcd_port_init(void)
{
        LCD_PORT_OUT |= (LCD_BCS + LCD_BWR + LCD_DATA);
        LCD_PORT_DIR |= (LCD_BCS + LCD_BWR + LCD_DATA);
}

void beep_on(void)
{
        LCD_OUT_COMD(0x09);          //TONE ON
}

void LCD_Ini(void)
{
        lcd_port_init();
                                             //the 9 bit is X and is set to 0 at func
        LCD_OUT_COMD(0x01);                                //LCD SYSTEM ENABLE FIRST, LIKE AZ8851
        LCD_OUT_COMD(0x18);                                //ON CHIP RC OSCILLATE
        LCD_OUT_COMD(0x29);                                //LCD 1/3 BIAS, 4 COM OPTION
        LCD_OUT_COMD(0x03);                                //LCD ON
        LCD_OUT_COMD(0x08);                                //TONE OFF
        LCD_OUT_COMD(0x04);                                //TIMER DISABLE
        LCD_OUT_COMD(0x80);                                //IRQ DISABLE
        LCD_OUT_COMD(0x05);                                //WDT  DISABLE
}

void LCD_Off(void)
{
         LCD_OUT_COMD(0x02);          //LCD SYSTEM TIME BASE OUT
         LCD_OUT_COMD(0x00);          //LCD SYSTEM DISABLE
}
该驱动程序对外提供的接口为:

void LCD_Off(void);
void LCDWrite(void);
void LCD_Ini(void);

相关帖子

沙发
道义密码| | 2011-11-27 12:40 | 只看该作者
虽然不知道楼主说什么,但是貌似很强大的样子

使用特权

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

本版积分规则

个人签名:生活将我们磨圆,是为了让我们滚得更远。。。 我来到这个世上就没打算活着回去!

99

主题

906

帖子

2

粉丝