ET6226M应用

本文详细介绍了ET6226MLED驱动控制电路的硬件连接、注意事项以及MCU(如ATMEGA16)的接口通信代码示例,包括启动、停止、发送/接收数据和按键读取等操作,以帮助用户正确和规范地使用该芯片。
摘要由CSDN通过智能技术生成

ET6226M应用使用笔记

一、简介

ET6226M是一种带键盘扫描电路接口的 LED驱动控制专用电路。内部集成有控制数字接口、数据锁存器、LED驱动、键盘扫描、辉度调节等电路,具有控制简单、使用灵活的特点。

二、硬件电路图(参考应用线路图)

典型应用图

应用注意点:

  1. C1=1uF且尽可能放置在接近VCC的地方,按键串联电阻建议R5~R8 = 2kΩ。
  2. R1,R2 = 4.7kΩ; R3,R4 = 100Ω; C2,C3 = 100pF; 通讯端口上的RC滤波电容电阻网络应尽可能靠近ET6226,电阻值和电容值可根据实际抗干扰要求和验证结果进行调整。

3.通讯线离VDD走线远一点

4.MCU的GND和芯片的GND走线尽量短一点

三、ET6226M Reference code

    注: MCU:ATMEGA16 编译环境:ICC AVR  C语言

  1. ET6226采用高速两线式串行接口通讯方式。

驱动代码参考:

/*********************通讯频率建议100K***********************/

/*********************开始***********************/

void ET6226_Start(void)

{

SDA_OUT;//设置SDA端口为输出

_delay_us(2);

SDA_H;

_delay_us(2);

SCL_H;

_delay_us(2);

SDA_L;

_delay_us(2);

SCL_L;

_delay_us(2);

}

/*********************结束***********************/

void ET6226_Stop(void)

{

SDA_OUT;//设置SDA端口为输出

_delay_us(2);

SCL_L;

_delay_us(2);

SDA_L;

_delay_us(2);

SCL_H;

_delay_us(2);

SDA_H;

_delay_us(2);

}

/*******************************等待应答*******************/

//等待应答信号

//返回值:1,接收应答失败

//        0,接收应答成功

uint8_t  ET6226_Ack(void)

{

uint8_t ErrTime=0;

SDA_IN;  //设置SDA端口为输入

_delay_us(5);

SCL_H;

while(SDA_Value)//SDA IO口状态

{

ErrTime++;

if(ErrTime>250)

{ET6226_Stop();return 1;}

}

SCL_L;

_delay_us(10);

SDA_OUT;//设置SDA端口为输出

return(0);

}

注:在读ACK的时候,如果强制把数据线DAT(即代码中的SDA)强制置高,会导致第九个时钟线的地方DAT出现一个随机的中间电平,在该情况下,会出现显示异常。ACK规范写法应该是MCU将DAT端口设为输入,等待ACK信号。如果没有规范软件写法,ACK信号出现中间电平(小于0.7VDD,大于0.2VDD),会出现显示异常。

/*****************发送一个字节*********************/

void ET6226_Write(uint8_t input)

{

uint8_t i;

for(i=0;i<8;i++)

{

if(input&0x80)

SDA_H;

else

SDA_L;

_delay_us(2);

SCL_H;

_delay_us(2);

SCL_L;

_delay_us(2);

input=input<<1;

}

}

void ET6226_Send_byte(uint8_t address1,uint8_t data1)

{

ET6226_Start();

ET6226_Write(address1);

ET6226_Ack();

ET6226_Write(data1);

ET6226_Ack();

ET6226_Stop();

}

/*************************一个字节*******************/

uint8_t ET6226_Read(void)

{

uint8_t i;

uint8_t Data=0;

SDA_IN;//设置SDA端口为输

for(i=0;i<8;i++)

{

SCL_H;

Data=Data<<1;

if(SDA_Read) //SDA端口入电平

Data=Data|0x01;

else

Data=Data|0x00;

_delay_us(2);

SCL_L;

_delay_us(2);

}

SDA_OUT;//设置SDA端口为输出

return(Data);

}

/*************************读按键键值*******************/

uint8_t ET6226_Read_Key(void)

{

uint8_t key_data;

ET6226_Start();

ET6226_Write(0x4F);   //读按键对应的指令

ET6226_Ack();

key_data=ET6226_read();

ET6226_Ack();

ET6226_Stop();

return(key_data); 

}

/*************************全显*******************/

void ET6226_Drive_Data(void)

{

ET6226_Send_byte(0x68,0xff);  //GR1对应的显示数据

ET6226_Send_byte(0x6A,0xff);  //GR2对应的显示数据

ET6226_Send_byte(0x6C,0xff);   //GR3对应的显示数据

ET6226_Send_byte(0x6E,0xff);  //GR4对应的显示数据

ET6226_Send_byte(0x48,0x01);   //状态配置

}

注:1.ET6226芯片状态控制指令B7位(不关心位)请填写0

2.B0和 B2位不能同时为 1。

3.七段和八段工作状态下,DP/KP端口状态不同,需要外围也不同。

4.七段工作状态下,DP/KP端口为开漏输出,指示灯接在 VCC和 DP/KP之间。

结合以上应用说明和相关注意点规范使用ET6226。

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
nt keyscan() { P2DIR = 0xff; RL1S; RL0S; SL2C; SL1C; SL0C; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 0; RL0S; return 0; } else if (RL1 == 0) { key = 8; RL1S; return 0; } } P2DIR |= BIT2 + BIT3 + BIT4; SL2C; SL1C; SL0S; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 1; RL0S; return 0; } else if (RL1 == 0) { key = 9; RL1S; return 0; } } P2DIR |= BIT2 + BIT3 + BIT4; SL2C; SL1S; SL0C; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 2; RL0S; return 0; } else if (RL1 == 0) { key = 10; RL1S; return 0; } } P2DIR |= BIT2 + BIT3 + BIT4; SL2C; SL1S; SL0S; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 3; RL0S; return 0; } else if (RL1 == 0) { key = 11; RL1S; return 0; } } P2DIR |= BIT2 + BIT3 + BIT4; SL2S; SL1C; SL0C; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 4; RL0S; return 0; } else if (RL1 == 0) { key = 12; RL1S; return 0; } } P2DIR |= BIT2 + BIT3 + BIT4; SL2S; SL1C; SL0S; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 5; RL0S; return 0; } else if (RL1 == 0) { key = 13; RL1S; return 0; } } P2DIR |= BIT2 + BIT3 + BIT4; SL2S; SL1S; SL0C; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 6; RL0S; return 0; } else if (RL1 == 0) { key = 14; RL1S; return 0; } } P2DIR |= BIT2 + BIT3 + BIT4; SL2S; SL1S; SL0S; P2DIR = 0x00; if (RL0 == 0 || RL1 == 0) { delaynms(5); if (RL0 == 0) { key = 7; RL0S; return 0; } else if (RL1 == 0) { key = 15; RL1S; return 0; } } return 1; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值