搜索
bottom↓
回复: 19

MEGA8 驱动液晶芯片HT1621B原理图和程序

[复制链接]

出0入0汤圆

发表于 2008-4-15 21:33:35 | 显示全部楼层 |阅读模式

原理图 (原文件名:HT1621.GIF)

HT1261Bourdev_253183.pdf(文件大小:189K) (原文件名:HT1621B-48SSOP.pdf)





//ICC-AVR application builder : 2000-12-14 16:33:32
// Target : M8
// Crystal: 1.0000Mhz

//此版本适用于DIP28封装的MEGA8  
//保密位: 0X00C0
//熔丝位: 0X9121  1M
//熔丝位: 0xD124  8M
#include <iom8v.h>
#include <macros.h>



void port_init(void)
{
PORTB = 0b11000000;
DDRB  = 0b00000011;
PORTC = 0x00; //m103 output only
DDRC  = 0b00111000;
PORTD = 0b00000000;
DDRD  = 0b11111111;
}

//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
        WDR(); //this prevents a timout on enabling
        WDTCR = 0x1F;  
        WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}

void watchdog(void)
{
WDR(); //看门狗计数清零
WDTCR=0x1F; //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S
WDTCR=0x0F; //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S
}


//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
        CLI(); //disable all interrupts
        port_init();
        watchdog_init();
        MCUCR = 0x00;
        GICR  = 0x00;
        TIMSK = 0x45; //timer interrupt sources
        //TIMSK = 0x05; //timer interrupt sources
        SEI(); //re-enable interrupts
//all peripherals are now initialized
}

//------------------------------------------------------------------------------
//Ht1621相关引脚
#define HT_WR PB7
#define SET_HT_WR()    PORTB |= (1 << HT_WR)
#define CLS_HT_WR()    PORTB &= ~ (1 << HT_WR)

   
#define HT_DATA PD5
#define SET_HT_DATA()  PORTD |= (1 << HT_DATA)
#define CLS_HT_DATA()  PORTD &= ~ (1 << HT_DATA)

#define HT_CS PB6
#define SET_HT_CS()    PORTB |= (1 << HT_CS)
#define CLS_HT_CS()    PORTB &= ~ (1 << HT_CS)



#define BIAS   0x28
#define SYSEN  0x01
#define LCDOFF 0x02
#define LCDON  0x03

void delay(void)
{
        unsigned char i;
        for (i = 16; i > 0; i--)
        {
                _NOP();               
        }
}


void SendBit_1621(unsigned char data, unsigned char cnt) //data的高cnt位写入HT1621,高位在前
{
    unsigned char i;
         
    for (i = 0; i < cnt; i++)
    {          
        if ((data & 0x80) == 0)
        {
                    CLS_HT_DATA();
        }
                else
                {
            SET_HT_DATA();                       
        }
                delay();
               
                CLS_HT_WR();        
           // delay();                 
        SET_HT_WR();       
                //delay();
                 
        data <<= 1;
    }
}

void SendDataBit_1621(unsigned char data, unsigned char cnt) //data的低cnt位写入HT1621,低位在前
{
    unsigned char i;
       
    for (i = 0; i < cnt; i++)
    {            
        if ((data & 0x01) == 0)
        {   
                        CLS_HT_DATA();                           
                }
                else
        {
                    SET_HT_DATA();                       
        }
                delay();
               
                CLS_HT_WR();        
            //delay();               
        SET_HT_WR();                         
                //delay();       
                       
        data >>= 1;
    }
}

void SendCmd(unsigned char command)
{
    CLS_HT_CS();   
          
    SendBit_1621(0x80,3); //写入标志码"100"
    SendBit_1621(command,9); //写入9 位数据,其中前8 位为command 命令,最后1 位任意
       
        SET_HT_CS();
}

void Write_1621(unsigned char addr, unsigned char data)
{
    CLS_HT_CS();
         
        SendBit_1621(0xa0,3); //写入标志码"101"
    SendBit_1621(addr << 2,6); //写入6 位addr       
    SendDataBit_1621(data,4); //写入data 的低4 位
          
        SET_HT_CS();
}

void WriteAll_1621(unsigned char addr, unsigned char * p, unsigned char cnt)
{
    unsigned char i;
    CLS_HT_CS();
       
        SendBit_1621(0xa0,3); //写入标志码"101"
        SendBit_1621(addr << 2,6); //写入6 位addr
        for(i =0; i <cnt; i ++,p++) //连续写入数据
        {
                SendDataBit_1621(*p,8);
        }
    SET_HT_CS();
}



void Writetest_1621(void)
{
    unsigned int i,p;
    CLS_HT_CS();
               
        SendBit_1621(0xa0,3); //写入标志码"101"
        SendBit_1621(0,6); //写入6 位addr
        for (p = 0; p < 32; p++)
        {
                for(i = 0; i < 8; i ++) //连续写入数据
                {
                        SendDataBit_1621(p,8);
                        delay();
            }
        }
       
    SET_HT_CS();
}

void Cls_1621(void)
{
    unsigned int i,p;
    CLS_HT_CS();
               
        SendBit_1621(0xa0,8); //写入标志码"101"
        SendBit_1621(0,6); //写入6 位addr
        for (p = 0; p < 32; p++)
        {
                for(i = 0; i < 8; i ++) //连续写入数据
                {
                        SendDataBit_1621(0,8);
                        delay();
            }
        }
       
    SET_HT_CS();
}
//==============================================================================

void main(void)
{  
   init_devices();   
   SendCmd(BIAS);        //设置偏压和占空比
   SendCmd(SYSEN);    //打开系统振荡器
   SendCmd(LCDON);    //打开LCD偏压发生器

   while (1)
   {
         
    WDR(); //this prevents a timout on enabling        
         
    Write_1621(0x00,0b1001);
    Write_1621(0x01,0b1111);
    Write_1621(0x02,0b0000);
    Write_1621(0x03,0b1101);
    Write_1621(0x04,0b1110);
    Write_1621(0x05,0b1111);
     
}

出0入0汤圆

发表于 2008-4-15 23:40:01 | 显示全部楼层
路过,顶一下,正准备用M16做这东西。

出0入0汤圆

发表于 2008-4-16 09:49:06 | 显示全部楼层
HT1621也有功耗,楼主是怎么处理的,用段式LCD一般都是电池供电!

出0入0汤圆

 楼主| 发表于 2008-4-16 10:13:49 | 显示全部楼层
回2楼:这个产品没有做省电,其实你可以用M8的一个IO口给HT1621供电。。。

出0入0汤圆

 楼主| 发表于 2008-5-5 09:51:34 | 显示全部楼层
..

出0入0汤圆

发表于 2009-3-20 22:51:58 | 显示全部楼层
JIHAO

出0入0汤圆

发表于 2009-3-21 09:46:45 | 显示全部楼层
看看再说

出0入0汤圆

发表于 2009-3-21 11:26:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-4-24 12:37:17 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2009-6-5 09:55:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-25 23:41:06 | 显示全部楼层
请问楼主这个屏是彩色的吗?

出0入0汤圆

 楼主| 发表于 2009-7-15 09:40:07 | 显示全部楼层
是单色的

出0入0汤圆

发表于 2009-7-15 10:14:26 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-7-15 10:45:49 | 显示全部楼层
不是有 LCD AVR 麽?

出0入0汤圆

发表于 2010-9-20 08:28:25 | 显示全部楼层
学习~

出0入0汤圆

发表于 2012-5-3 09:07:49 | 显示全部楼层

出110入8汤圆

发表于 2013-4-20 14:46:10 | 显示全部楼层
HT1621B在用内部晶振或者外接晶振时,关闭LCD偏压器,然后执行SYS_DIS指令就会进入就会进入低功耗模式!

出0入0汤圆

发表于 2016-10-10 15:51:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2017-9-14 22:57:31 | 显示全部楼层
学习一下,谢谢分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 21:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表