打印
[复制链接]
2042|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aashee|  楼主 | 2013-8-31 18:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <pic.h>
#include"HT1621.h"
#define uchar unsigned char
void ioInit()
{
        //---------------端口方向定义
        TRISA=0X1f;
        TRISB=0X00;
        TRISC=0xC0;       

        //---------------状态
        PORTA=0X00;
        PORTB=0x00;
        PORTC=0x00;
        //---------------用户端口初始化
}

void main()
{
    unsigned char ucKey = 0;
    ioInit();
    lcdInit();
        RB3=1;                                                       /* 启动定时器ID检测使用         */

    while(1) {
    }
}

#ifndef        _HT1621_H_
#define _HT1621_H_
#include<pic.h>
#define uchar unsigned char
#define                SDA_LCD1621                RC1                //数据线
#define                SCL_LCD1621                RC0                //时钟线
#define                CS1_LCD1621                RC5
#define                CS2_LCD1621                RC4


#define                T_SDA_LCD1621         TRISC1
#define                T_SCL_LCD1621         TRISC0
#define                T_CS1_LCD1621         TRISC5
#define                T_CS2_LCD1621         TRISC4

#define BIAS 0x52
#define SYSEN 0x02
#define LCDON 0x06
#define LCDOFF 0x04


extern void lcdInit();
extern void Write_1621(uchar addr,uchar data);
extern void WriteAll_1621(uchar addr,uchar *p,uchar cnt);
#endif       

#include"HT1621.h"
void __ht1621Sendbit(unsigned char a,unsigned char i)
{

    if (i == 0) {
        return;
    }

        while(i--)
        {
                if(a&0x01)       
                {
                        SDA_LCD1621=1;        //?í "1"
                }
                else
                {
                        SDA_LCD1621=0;        //?í"0"
                }
                SCL_LCD1621=0;        //ê±??
                _nop();
                SCL_LCD1621=1;
                _nop();
                SCL_LCD1621=0;        //ê±??
                _nop();
                a=a>>1;
        }
}
void SendBit_1621(uchar data,uchar cnt) //data 的高cnt 位元寫入HT1621,高位在前
{
        uchar i;
        for(i =0; i <cnt; i ++)
        {
                if((data&0x80)==0) SDA_LCD1621=0;
                else SDA_LCD1621=1;
                SCL_LCD1621=0;
                _nop();
                SCL_LCD1621=1;
                data<<=1;
        }
}

void SendDataBit_1621(uchar data,uchar cnt) //data 的低cnt 位寫入HT1621,低位在前
{
        uchar i;
        for(i =0; i <cnt; i ++)
        {
                if((data&0x01)==0) SDA_LCD1621=0;
                else SDA_LCD1621=1;
                SCL_LCD1621=0;
                _nop();
                SCL_LCD1621=1;
                data>>=1;
        }
}

void lcdClear(unsigned char ucColor)
{
    unsigned char i=3;

    CS1_LCD1621=0;       
        CS2_LCD1621=0;
    //__ht1621Sendbit(0x5,9);
    for(i=0;i<16;++i) {
       // __ht1621Sendbit(ucColor,8);
    }
        CS1_LCD1621=1;                        //ê1?ü
        CS2_LCD1621=1;
}

void SendCmd(uchar command)
{
        CS1_LCD1621=0;                        //ê1?ü
        CS2_LCD1621=0;
        SendBit_1621(0x80,4); //寫入旗標碼”100”和9 位command 命令,由於
        SendBit_1621(command,8); //沒有使有到更改時鐘輸出等命令,為了編程方便
        CS1_LCD1621=1;                        //ê1?ü
        CS2_LCD1621=1; //直接將command 的最高位寫”0”
}

void Write_1621(uchar addr,uchar data)
{
        CS1_LCD1621=0;                        //ê1?ü
        CS2_LCD1621=0;
        SendBit_1621(0xa0,3); //寫入旗標碼”101”
        SendBit_1621(addr,6); //寫入addr 的高6 位元
        SendDataBit_1621(data,4); //寫入data 的低4 位元
        CS1_LCD1621=1;                        //ê1?ü
        CS2_LCD1621=1; //直接將command 的最高位寫”0”
}

void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
        uchar i;
        CS1_LCD1621=0;
        CS2_LCD1621=0;
        SendBit_1621(0xa0,3); //寫入旗標碼”101”
        SendBit_1621(addr,6); //寫入addr 的高6 位元
        for(i =0; i <cnt; i ++,p++) //連續寫入資料
        {
                SendDataBit_1621(*p,8);
        }
        CS1_LCD1621=1;
        CS2_LCD1621=1; //直接將command 的最高位寫”0”
}

void lcdInit()
{
   unsigned char i=3;

    TRISC &= ~(1 << 0);
                                                     /* CLK                          */
    TRISC &= ~(1 << 1);                                                        /* DATA                         */                                                                                        
   
        TRISC &= ~(1 << 4);
                                                /* CS2                          */
    TRISC &= ~(1 << 5);

        CS1_LCD1621=0;                        //ê1?ü
        CS2_LCD1621=0;
        __ht1621Sendbit(0x01,8);
    __ht1621Sendbit(0x4,4);
        CS1_LCD1621=1;                        //ê1?ü
        CS2_LCD1621=1;

        CS1_LCD1621=0;                        //ê1?ü
        CS2_LCD1621=0;
        __ht1621Sendbit(0x1,8);
    __ht1621Sendbit(0x6,4);
        CS1_LCD1621=1;                        //ê1?ü
        CS2_LCD1621=1;

        CS1_LCD1621=0;                        //ê1?ü
        CS2_LCD1621=0;
        __ht1621Sendbit(0xa1,8);
    __ht1621Sendbit(0x4,4);
        CS1_LCD1621=1;                        //ê1?ü
        CS2_LCD1621=1;

    CS1_LCD1621=0;       
        CS2_LCD1621=0;
    __ht1621Sendbit(0x5,9);

    for(i=0;i<16;++i) {
        __ht1621Sendbit(0x0,8);
    }
        CS1_LCD1621=1;                        //ê1?ü
        CS2_LCD1621=1;
}
各位帮忙看一下,怎么就是点不亮HT1621呢?

lianxiyi.zip

1.75 KB

沙发
谈的元| | 2013-8-31 22:40 | 只看该作者
示波器调试测量波形看,看哪点波形不对

使用特权

评论回复
板凳
NE5532| | 2013-9-2 16:17 | 只看该作者
测是否有阶梯波产生。

使用特权

评论回复
地板
小鱼儿1045| | 2013-9-3 09:05 | 只看该作者
首先看看可能全显

使用特权

评论回复
5
mzb2012| | 2016-6-22 08:13 | 只看该作者
这个芯片我们用了很多系列;很方便的

使用特权

评论回复
6
xushuo888| | 2018-8-6 12:11 | 只看该作者
之前用过VK1621 的驱动芯片,可完全替代HT1621的,价格更优,发份资料给你参考

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

1.41 MB

使用特权

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

本版积分规则

12

主题

59

帖子

0

粉丝