打印
[STM32F1]

驱动芯片控制段码液晶显示屏

[复制链接]
3801|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家有没有用过HT16C22这个驱动芯片,用它驱动段码液晶显示屏,有没有参考的代码分享一下

~B_K1(G~%5{4@XZ~%2YI_L1.png (78.44 KB )

~B_K1(G~%5{4@XZ~%2YI_L1.png
沙发
mmuuss586| | 2016-11-2 15:58 | 只看该作者
没用过呢,根据DATASHEET自己写代码好了

使用特权

评论回复
板凳
歇斯底里|  楼主 | 2016-11-2 17:01 | 只看该作者
mmuuss586 发表于 2016-11-2 15:58
没用过呢,根据DATASHEET自己写代码好了

#include "stm32f10x.h"
#include "delay.h"
#include "HT16C22.h"
#define SDA_IN()   GPIOA->CRH &= 0xFFFFFFF0; GPIOA->CRL |=0x00000004
#define SDA_OUT()  GPIOA->CRH &= 0xFFFFFFF0; GPIOA->CRL |=0x00000003
int8_t disbuf[12];
//¶ÎÂë±í³£Á¿Êý×é       
int8_t const table[31]=
{
    0x77,/*0*/0x24,/*1*/0x5D,/*2*/0x6D,/*3*/0x2E,/*4*/
    0x6B,/*5*/0x7B,/*6*/0x25,/*7*/0x7F,/*8*/0x6F,/*9*/
    0x3F,/*A*/0x7A,/*b*/0x58,/*C*/0x7C,/*d*/0x5B,/*E*/
    0x1B,/*F*/0x3A,/*h*/0x3E,/*H*/0x78,/*o*/0x1F,/*p*/
    0x52,/*L*/0x18,/*r*/0x6E,/*y*/0x08,/*-*/0x40,/*_*/
    0x00,/* */       
};
//PB9 SCL PB8 SDA
void InitI2C(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//GPIOB Periph clock enable               
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
       
   GPIO_SetBits(GPIOB,GPIO_Pin_9);//SCLH;
         GPIO_SetBits(GPIOB,GPIO_Pin_8);//SDAH;

        I2CInitial();//HT16C22 IIC ×ÜÏß³õʼ»¯
}
void Clr_disbuf(void)                                //DisbufÇåÁã
{
  int8_t i;
        for(i=0;i<12;i++)       
                disbuf=0x00;       
}       

void Setb_disbuf(void)                        //DisbufÈ«ÖÃ1
{
  int8_t i;
        for(i=0;i<12;i++)       
                disbuf=0xff;
}
//»ñÈ¡SDAµÄµ±Ç°Öµ£¬D0
int8_t GetSDA()
{
        if( (GPIOB->IDR & GPIO_Pin_8)!=0)
        {
                return 0x01;
        }
        else
        {
                return 0x00;
        }
}
//PB9 SCL PB8 SDA

void Start()
{
    GPIO_SetBits(GPIOB,GPIO_Pin_8);//SDAH;
    GPIO_SetBits(GPIOB,GPIO_Pin_9);//SCLH;
    __nop();       
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);//SDAL;
     __nop();       
    GPIO_ResetBits(GPIOB,GPIO_Pin_9);//SCLL;
}

void Stop()
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_9);//SCLL;
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);//SDAL;
    __nop();       
    GPIO_SetBits(GPIOB,GPIO_Pin_9);//SCLH;
    GPIO_SetBits(GPIOB,GPIO_Pin_8);//SDAH;
}

int8_t TestAck()
{
    int8_t ErrorBit;
    GPIO_SetBits(GPIOB,GPIO_Pin_8);//SDAH;
    GPIO_SetBits(GPIOB,GPIO_Pin_9);//SCLH;
    ErrorBit=GetSDA();
    GPIO_ResetBits(GPIOB,GPIO_Pin_9);//SCLL;
    return(ErrorBit);
}

void NoAck()
{
   GPIO_SetBits(GPIOB,GPIO_Pin_8);//SDAH;
   GPIO_SetBits(GPIOB,GPIO_Pin_9);//SCLH;
    __nop();
   GPIO_ResetBits(GPIOB,GPIO_Pin_9);//SCLL;
}
void Ack()
{
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);//SDAL;
    GPIO_SetBits(GPIOB,GPIO_Pin_9);//SCLH;
    __nop();
    GPIO_ResetBits(GPIOB,GPIO_Pin_9);//SCLL;
    GPIO_SetBits(GPIOB,GPIO_Pin_8);//SDAH;
}

void Write8Bit(int8_t input)
{
    int8_t temp;
    for(temp=8;temp!=0;temp--)
    {
                if((input&0x80)!=0)
                {
                  GPIO_SetBits(GPIOB,GPIO_Pin_8);//SDAH;
                }
                else
                {
                        GPIO_ResetBits(GPIOB,GPIO_Pin_8);//SDAL;
                }        
        __nop();;
        GPIO_SetBits(GPIOB,GPIO_Pin_9);
       __nop();
        GPIO_ResetBits(GPIOB,GPIO_Pin_9);
        input=input<<1;
        __nop();
    }
}
void I2CWriteSingle(int8_t I2CData)
{
        Start();
        Write8Bit(0x7e);  //·¢ Êý¾Ý ģʽ(д) оƬµØÖ·
        TestAck();
        Write8Bit(I2CData);
        TestAck();
        Stop();       
}
void I2CInitial(void)  // ³õʼ»¯
{
        I2CWriteSingle(0x8c); //ģʽÉèÖà 1/3 Bais  ´ò¿ªLCEÏÔʾ  ¿ªÊ±ÖÓÕðµ´  ÕñƵÂÊ80HZ

        I2CWriteSingle(0x40); //ÄÚ²¿µçѹµ÷Õû   SEGÒý½Å ʹÄÜÄÚ²¿µçѹµ÷ÕûÆ÷ VLCDµçѹ Ϊ VDD

        I2CWriteSingle(0xc0); //ÉÁ˸ƵÂÊ ¹Ø
}

void LCD_xs (int8_t num)
{
  int8_t i;
        Start();
  Write8Bit(0x7e); //·¢ Êý¾Ý ģʽ(д) оƬµØÖ·
        TestAck();
  Write8Bit(0x00); //ÆðʼRAMµØÖ· 00
        TestAck();
        for(i=0;i<num;i++)                //·¢ËÍÁ¬ÐøµÄÊý¾Ý
        {
                Write8Bit(disbuf);//11111111111111111111111
                TestAck();
        }
  Stop();
}



这个我根据数据手册写的代码 但是不知道怎么和屏联系到一块 第一次用LCD

使用特权

评论回复
地板
szbanqiu1688| | 2018-7-31 11:40 | 只看该作者

VK2C22兼容HT16C22 有详细程序资料

本帖最后由 szbanqiu1688 于 2018-7-31 11:48 编辑

产品型号:VK2C22
产品品牌:VINTEK/元泰
产品年份:新年份
封装形式:LQFP48  LQFP52
联 系 人:许先生
联 系 QQ:1918885898 2689802003
联系手机:18898582398
工程服务,技术支持,价格具有优势!
概述
VK2C22/VK2C22G 是一款存储器映射和多功能 LCD 控制 / 驱动芯片。该系列芯片显示模式有 176 点 (44×4)VK2C22/VK2C22G软件配置特性使 得它适用于多种 LCD 应用,包括 LCD 模块和显示子系统。VK2C22/VK2C22G 通过双线双向 I2C 接口与大多数微处理器 / 微控制器进行通信。
VK2C2X系列为I2C介面、RAM mapping的LCD控制暨驱动IC,此系列以先进设计技术降低IC耗电、提升抗杂讯及ESD防护能力。全系列包含VK2C22/VK2C22G、VK2C23/VK2C23G、VK2C24/VK2C24G等。VK2C22已成功获得单相电表客戶的认可及采用,VK2C23及VK2C24适合于点数需求较大的三相电表的应用。
特性
★工作电压:2.4V ~ 5.5V
★内部 32kHz RC 振荡器S
★Bias:1/2 或 1/3;Duty:1/4
★带电压跟随器的内部 LCD 偏置发生器
★I2C接口
★两个可选 LCD 帧频率:80Hz 或 160Hz
★多达 44×4 位 RAM 用来存储显示数据
★最大显示模式 44×4:44 SEGs 和 4 COMs
★多种闪烁模式
★读 / 写地址自动增加
★内建 16 级 VLCD 电压调整电路
★低功耗
★提供 VLCD 引脚来调整 LCD 工作电压
★采用硅栅极 CMOS 制造工艺
★封装类型:48LQFP,52QFP
★此篇产品叙述为功能简介,如需要完整产品PDF资料可以联系许先生索取!
LCD驱动IC推出VK2C22新I2C接口系列
本公司专注于TN/STN LCD的中小尺寸应用,VK162X系列控制暨驱动IC已营销业界多年。2010年更展开I2C标准接口系列的新产品开发,此系列包含VK2C22、VK2C23、VK2C24等。IC特性强调低功耗、高抗噪声及高系统ESD防护能力,以高整合度的脚位包装,提供客户最大的显示点数。VK2C22是首先开发完成的型号,VK2C23、VK2C24会陆续推出。
VK2C22内建显示内存及RC振荡电路;工作电压宽广:2.4V~5.5V;2种Bias分压:1/2 & 1/3;最大显示点数可支持4 Common x 44 Segment(52QFP)。提供2种图框扫瞄频率:80Hzor 160Hz;可由外挂电阻调整VLCD电压,也提供16阶可由内建指令调整的VLCD电压。透过I2C接口及多项内置电路,VK2C22与系统控制芯片的传输只需2根信号线,大大省去系统零件及布线、降低客户系统成本。与其它同包装的产品,VK2C22提供更多的显示点数。
VK2C22适用于家电、车载、民生消费品、工业仪表等的LCD显示器的控制及驱动,高抗噪声及高ESD防护能力尤适合数字式LCD电表、水表、瓦斯表等。依包装不同尚有2种点数可选择:4 Common x 40 Segment(48 LQFP)及4 Common x 36 Segment(44QFP)。

使用特权

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

本版积分规则

22

主题

70

帖子

1

粉丝