打印

关于ht1621的问题

[复制链接]
3069|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huandaczq|  楼主 | 2018-6-29 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 huandaczq 于 2018-6-30 14:11 编辑

网上买了个段码液晶屏,后面黑胶显示是ht1621,链接口有1vss+ 2vcc+ 3dat+4wr+5cs+6bla+7blk;分别连接着地、+5v,rb7和rc34. 通电后,背光白色,没有任何段码被点亮。pcb上除了以上7个连接口连着单片机的io或者电源地,其他都没有动,只有几个贴片电阻和一个0.1uf。所以下面命令里加了一个rc振荡器。
也不知道哪里出了问题,有没有大神帮忙看一下,万分万分感谢。

下面是代码
//ht1621 第一次
#define BIAS 0x24
#define SYSEN 0x01
#define LCDOFF 0x02
#define LCDON 0x03
#define uc unsigned char
#define cs LATBbits.LATB7
#define wr LATCbits.LATC3
#define data LATCbits.LATC4

void send_low_bit_ht1621(uc data_sent, uc n_bit)
{
        uc i;
        for (i=0, i<n_bit, i++)
        {
                if (data_sent&0x01==1)
                {
                        data=1;
                }
                else
                {
                        data=0;
                }
                wr=0;
                nop();
                wr=1;
                data_sent>>1;
        }        
}

void send_high_bit_ht1621(uc data_sent, uc n_bit)
{
        uc i;
        for (i=0, i<n_bit, i++)
        {
                if (data_sent&0x80==1)
                {
                        data=1;
                }
                else
                {
                        data=0;
                }
                wr=0;
                nop();
                wr=1;
                data_sent<<1;
        }        
}

void write_cmd_ht1621(uc cmd)
{
        cs=0;
        send_high_bit_ht1621(0x80,3);        //100==>1000@3
        send_high_bit_ht1621(cmd,9);
        cs=1;
}

void write_low_bit_ht1621(uc address, uc data_sent)
{
        uc i;
        cs=0;
        write_cmd_ht1621(0xa0,3);        //101==>1010@3
        send_high_bit_ht1621(address<<2,6);                //a5,a4,a3,a2,a1,a1;
        sent_low_bit_ht1621(data_sent,4);                        //d0,d1,d2,d3
        cs=1;
}
/****************************************/
void main()
{
        write_cmd_ht1621(0x18);//        系统时钟源,片内rc振荡器
        write_cmd_ht1621(BIAS);               
        write_cmd_ht1621(SYSEN);
        write_cmd_ht1621(LCDON);        
        write_low_bit_ht1621(0x09,0x01);        
}

相关帖子

沙发
huandaczq|  楼主 | 2018-6-29 18:07 | 只看该作者
需要给wr和data线接上啦电阻还是怎么吗?自己顶一下

使用特权

评论回复
板凳
ningling_21| | 2018-6-29 18:45 | 只看该作者
huandaczq 发表于 2018-6-29 18:07
需要给wr和data线接上啦电阻还是怎么吗?自己顶一下

没有资料手册吗

使用特权

评论回复
地板
tyw| | 2018-6-29 18:54 | 只看该作者
ht1621.rar (903.77 KB)

使用特权

评论回复
5
huandaczq|  楼主 | 2018-6-30 14:03 | 只看该作者

使用1621点不都差不多的吗?应该查看ht1621就可以了呀

使用特权

评论回复
6
huandaczq|  楼主 | 2018-6-30 14:37 | 只看该作者
本帖最后由 huandaczq 于 2018-6-30 14:44 编辑

多些大神的资料。除了那个asm的文件没看过也看不懂以外,其他都在百度ht1621里看过很多次了。
根据上传的图片,难道图上的vlcd就是pcb上的bla吗?如果是的话,那么我需要重新连一个电阻了。

其次一个成品的段码液晶屏(淘宝购买,驱动方式也是说,见ht1621)应该也不需要外加晶振了吧,因为我看液晶屏背面除了黑胶覆盖ht1621后,外接的电阻电容都有说明,且给予我们连接的只有vcc  vss dat wr cs bla blk。

指令也都是根据你给我的资料写的

第一条,(命令=100)+(系统时钟片内rc震荡=0x18)
2,[size=18.66666603088379px]1/4DUTY+1/3BAIS 【有个size的乱码忽略,我没打,显示有那个,我不知道为什么】
3,打开系统振荡器
4,打开偏压发生器
5, 0x09处 0x01.
不知道哪里出错了,难道是第二条必须放到3&4后面吗? 求大神指点

ht1621 21ic.png (314.15 KB )

ht1621 21ic.png

使用特权

评论回复
7
tyw| | 2018-6-30 15:35 | 只看该作者
本帖最后由 tyw 于 2018-6-30 15:41 编辑
huandaczq 发表于 2018-6-30 14:37
多些大神的资料。除了那个asm的文件没看过也看不懂以外,其他都在百度ht1621里看过很多次了。
根据上传的 ...

blk 定义要按店家给的说明来,不能瞎猜.
vlcd 用来调节对比度.不能省.

使用特权

评论回复
8
huandaczq|  楼主 | 2018-6-30 18:02 | 只看该作者
tyw 发表于 2018-6-30 15:35
blk 定义要按店家给的说明来,不能瞎猜.
vlcd 用来调节对比度.不能省.

店家说明就是:ic驱动参考其他ht1621(你发给我的)。
对比度的话,我不知道是不是最亮导致无法显示。
液晶屏上客供外电路连接的只有vss vcc  wr dat blk bla cs,没有vlcd,所以我觉得这板子应该没有对比度了,或者说他们已经调节好对比度,不需要我再调节了。

我完全参考你上面给我资料(也就是我自己百度的资料)进行临摹的代码,感觉应该没错。然后刚刚用万用表测试了下各种电压等。发现wr dat cs电压不是很大。换句话说,我让对应wr,dat,cs输出都是高电压,然后在连接wr,dat,cs口测电压,测出来都是0+,比0大一点点。因为如果设置了高电平,他输出cs=0,那么相当于,ht1621在“数据交换”。那么是不是该io口对驱动或者说拉电流不够,需要接个上啦电阻?如果需要接的话,那么上啦电阻多少合适?

使用特权

评论回复
9
tyw| | 2018-6-30 18:23 | 只看该作者
huandaczq 发表于 2018-6-30 18:02
店家说明就是:ic驱动参考其他ht1621(你发给我的)。
对比度的话,我不知道是不是最亮导致无法显示。
液 ...

1621BLCD液晶驱动芯片.pdf (635 KB)
HT1621B官网C语言程序.pdf (4.95 KB)
51单片机好学1602全过程C语言编程.pdf (8.91 MB)
LCD液晶显示驱动程序设计指引.pdf (261.53 KB)
HT1621液晶显示驱动详细原理及程序.pdf (858.19 KB)
Ht1621使用手册及编程说明.pdf (1.5 MB)

使用特权

评论回复
10
huandaczq|  楼主 | 2018-7-1 15:20 | 只看该作者

早上搞了半天还是不行
大神发我的除了51我之前视频看过这个编程的教程以外,其他的ht1621和ht1621b我都在百度文库里看过好多次了,几乎依葫芦画瓢的抄了一次!但是只显示白色背光,其他都空的

使用特权

评论回复
11
黑洞不黑| | 2018-7-2 10:10 | 只看该作者
给你一个我写的程序,运行没问题
/*****ht1621命令声明*****/
#define COM 0x52//100 001010010X 4COM 1/3偏压
#define RCosc 0x30//100 000110000X 内部RC振荡器
#define LCD_on 0x06//100 000000110X 打开LCD偏压发生器
#define LCD_off 0x04//100 000000100X 关闭LCD偏压
#define SYS_en 0x02//100 000000010X 打开系统振荡器
#define SYS_dis 0x00//关闭振荡器和偏压发生器
#define WDT_dis 0X0a//关闭看门狗

/*****ht1621IO口初始化函数*****/
void ht1621_IO_init()
{
    ANSC3=0;//背光控制口配置为数字口
    //ANSA4=0;//ht1621数据口默认为数字口
    ANSA5=0;//ht1621写控制口默认为数字口
    //ANSC1=0;//ht1621读控制口默认为数字口
    //ANSC0=0;//ht1621片选控制口默认为数字口
    TRISC3=0;//背光控制口配置为输出
    TRISA4=0;//ht1621数据口配置为输出
    TRISA5=0;//ht1621写控制口配置为输出
    TRISC1=0;//ht1621读控制口配置为输出
    TRISC0=0;//ht1621片选控制口配置为输出
    LCD_BACK=1;//背光控制口设为高电平
    HT1621_DATA=0;//ht1621数据口设为低电平
    HT1621_WR=0;//HT1621写控制口设为低电平
    HT1621_RD=1;//HT1621读控制口设为高电平
    HT1621_CS=1;//HT1621片选控制口设为高电平
}
/*****ht1621写字节函数*****/
void sendbit(unsigned char data,unsigned char cnt)//data的高cnt位写入,高位在前
{
    unsigned char i;
    for(i=0;i<cnt;i++)
    {
        HT1621_WR=0;
        if(data&0x80)
            HT1621_DATA=1;
        else
            HT1621_DATA=0;
        HT1621_WR=1;
        data<<=1;
    }
}
/*****ht1621写命令函数*****/
void sendcmd(unsigned char command)
{
    HT1621_CS=0;//打开片选使能
    sendbit(0x80,4);//写入标识码“100”+9位command命令
    sendbit(command,8);//由于没有使用到更改时钟输出命令,直接将command最高位写0
    HT1621_CS=1;//关闭片选使能
}
/*****ht1621写地址+数据函数*****/
void write1621(unsigned char addr,unsigned char data)
{
    addr<<=2;//地址左移2位
    data<<=4;//数据左移4位
    HT1621_CS=0;//打开片选使能
    sendbit(0xa0,3);//写入标识码“101”
    sendbit(addr,6);//写入6位地址
    sendbit(data,4);//写入4位数据
    HT1621_CS=1;//关闭片选使能
}
/*****清除ht1621函数*****/
void ht1621_off()
{
    unsigned char i;
    unsigned char addr=0;
    for(i=0;i<32;i++)
    {
        write1621(addr,0x00);
        addr++;
    }
}
/*****初始化ht1621函数*****/
void ht1621_init()
{
    sendcmd(COM);//选择公共端模式
    sendcmd(RCosc);//选择内部RC振荡器
    sendcmd(SYS_dis);//关闭振荡器和偏压发生器
    sendcmd(WDT_dis);//禁止看门狗
    sendcmd(SYS_en);//打开系统振荡器
    sendcmd(LCD_on);//打开LCD
}

使用特权

评论回复
12
coody| | 2018-7-2 13:16 | 只看该作者
直接看HT1621的规格书里的时序就可以啦,哪有那么麻烦。

使用特权

评论回复
13
huandaczq|  楼主 | 2018-8-18 17:44 | 只看该作者
xushuo888 发表于 2018-8-1 09:02
给个我之前用过的段码LCD液晶屏驱动程序的范例,有IC资料和驱动程序,我发给你,完美兼容替代HT1621B 全 ...

多谢大神回复。我去看看,3q

使用特权

评论回复
14
fsdSADASDSA| | 2018-11-2 10:18 | 只看该作者
楼主解决了吗?能否分享一下经验呢

使用特权

评论回复
15
szbanqiu1688| | 2019-2-19 14:39 | 只看该作者
我这边刚好有一份资料,发给你看看,希望可以帮到你



VK1621B-LCD液晶显示驱动IC.pdf

1.41 MB

VINTEK元泰品牌---各种常用LCD驱动IC选型表.pdf

185.63 KB

使用特权

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

本版积分规则

34

主题

186

帖子

0

粉丝