直接以LED组建点阵屏不多见吧?驱动就一种方法?看看在Ar...

FireBeetle 24×8 LED点阵屏是萤火虫系列的配件产品,与常规点阵屏不同的是它直接用LED发光二极管来构建显示阵列,而非用点阵模块来构建。

为了节省I/O口,该点阵屏是采用高性能的LED驱动芯片HT1632C来进行控制。对每个LED都有独立的寄存器,故可分别驱动每个LED灯。它内置了256KHz的RC时钟,在低功耗模式下,可关闭RC时钟,使功耗仅为5uA。

点阵屏的外观如图1和图2所示,尽管显示屏的引脚较多,但在使用时所涉及的引脚并不很多,见图3所示。

图1 点阵屏正面

图2 点阵屏背面

图3显示所用引脚

点阵屏的性能如下:

·       工作电压:3.3V

·       显示颜色:白色

·       HT1632C驱动芯片

·       内置256KHzRC时钟

·       低功耗:5uA

·       工作电流:6mA~100mA

·       串行数据通信

·       支持Arduino库

·       支持滚屏显示

·       接口方式:FireBeetle系列兼容

·       工作温度:-40℃~+85℃

·       模块尺寸:24 ×58(mm)/0.94 x 2.28(inches)

·       安装孔尺寸:内径3.1mm/外径6mm

要驱动该点阵屏有2种方式,一种是以常规的Arduino开发板来驱动,另一种则是以ESP32-E Arduino开发板来驱动。

对于常规的Arduino开发板驱动,在使用前安装对应的FireBeetleLEDMatrix-master库,安装后即可见到对应库以供使用。

Arduino开发板驱动点阵屏的测试连接如图4所示,可实现的显示效果如图5至图7所示。

图4 测试连接

图5数字显示效果

图6  字符显示效果

图7  动态滚屏效果

若以ESP32-EArduino开发板来驱动,则无法直接进行编译和上传,为此只好以I/O口驱来编程实现。

按点阵屏的原理图可知,为了便于使用片选信号CS是可供选择的,选择的对象可以是CS1~CS4中的任意一个,选取时只需将S1对应的开关接通即可。而CS1~CS4所对应的引脚则是D2~D5,编程时是以A4来控制串行。

图8 点阵屏片选控制

图9 片选开关

为此,点阵屏与开发板的连接关系定义为:

#define cs1  A4

#define rd   D3

#define wr   D7

#define dat  D2

实现HT1632C初始化的函数为:

void HT1632C_Init(void)

{

   digitalWrite(cs1, HIGH);

   #define SYS_DIS 0x00                //关闭系统震荡

   #define SYS_EN 0x01                //打开系统震荡

   #define LED_OFF 0x02               //关闭LED显示

   #define LED_ON 0x03                //打开LED显示

   #define BLINK_OFF 0x08              //关闭闪烁

   #define BLINK_ON 0x09              //打开闪烁  

   #define SLAVE_MODE 0x10           //从模式  

   #define RC_MASTER_MODE 0x18      //内部RC时钟  

   #define COM_OPTION 0x24           //24:16COM,NMOS。C:COM,PMOS。

   #define PWM_DUTY 0xAE            //PWM亮度控制

   digitalWrite(wr, HIGH);

   digitalWrite(dat, HIGH);

   HT1632C_Write_CMD(SYS_DIS);          //关闭HT1632C内部RC时钟

   HT1632C_Write_CMD(COM_OPTION);     //选择HT1632C工作模式,COM,NMOS模式

   HT1632C_Write_CMD(RC_MASTER_MODE); //选择内部RC时钟

   HT1632C_Write_CMD(SYS_EN);           //打开HT1632C内部RC时钟

   HT1632C_Write_CMD(PWM_DUTY);       //PWM亮度设置

   HT1632C_Write_CMD(BLINK_OFF);        //关闭闪烁

   HT1632C_Write_CMD(LED_ON);           //打开LED显示

}

实现清屏处理的函数为:

void HT1632C_clr(void)

{

    unsigned char i;

    digitalWrite(cs1, LOW);

    HT1632C_Write(0xa0,3);

    HT1632C_Write(0x00,7);

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

       HT1632C_Write(0,8);

    digitalWrite(cs1, HIGH);

}

向HT1632C发送数据的函数为:

voidHT1632C_Write(unsigned char Data,unsigned char cnt)

{

   unsigned char i;

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

   {

      digitalWrite(wr, LOW);

      if(Data & 0x80) digitalWrite(dat, HIGH);

      else

      digitalWrite(dat, LOW);

      Data<<=1;

      digitalWrite(wr, HIGH);

   }

}

向HT1632 C写入命令的函数为:

void HT1632C_Write_CMD(unsignedchar cmd)

{

digitalWrite(cs1, LOW);

HT1632C_Write(0x80,3);

HT1632C_Write(cmd,9);

digitalWrite(cs1, HIGH);

}

向HT1632 C写入数据的函数为:

void HT1632C_Write_DATA(unsignedchar Addr,unsigned char p,unsigned char cnt)

{

   unsigned char i;

   digitalWrite(cs1, LOW);

   HT1632C_Write(0xa0,3);

   HT1632C_Write(Addr<<1,7);

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

   {

      HT1632C_Write(p,8);

   }

   digitalWrite(cs1, HIGH);

}

ESP32-E Arduino开发板驱动点阵屏的测试连接如图10所示,可实现的显示效果如图12至图13所示。

图10 测试连接

实现图10显示效果的配置程序为:

void setup() {

      unsigned char temp=0xAA;

      pinMode(LED_BUILTIN, OUTPUT);

      pinMode(cs1, OUTPUT);

      pinMode(rd, OUTPUT);

      pinMode(wr, OUTPUT);

      pinMode(dat,OUTPUT);

      HT1632C_Init();

      HT1632C_clr();

      HT1632C_Write_DATA(0x00,temp,48);

}

经程序的编译与上传,其界面如图11所示。

图11 完成程序上传

实现图12所示三角形绘制的程序如下:

{

    unsigned char i,b;

    digitalWrite(cs1, LOW);

    HT1632C_Write(0xa0,3);

    HT1632C_Write(0x00,7);

    b=1;

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

    {  

       if(i%8==0) b=1;

       else

       b=(b<<1)+1;

       HT1632C_Write(b,8);

       HT1632C_Write(b,8);

    }   

    digitalWrite(cs1, HIGH);

}

12绘制三角形

实现图13所示数值显示的程序如下:

voidsetup() {

      unsigned char temp=0xFF;

      pinMode(LED_BUILTIN, OUTPUT);

      pinMode(cs1, OUTPUT);

      pinMode(rd, OUTPUT);

      pinMode(wr, OUTPUT);

      pinMode(dat,OUTPUT);

      HT1632C_Init();

      HT1632C_clr();

      HT1632C_Write_C(58,8);

      HT1632C_Write_C(26,6);

      HT1632C_Write_C(26,4);

}

对于的字符显示函数为:

voidHT1632C_Write_C(unsigned char Addr,unsigned char p)

{

   unsigned char i;

   digitalWrite(cs1, LOW);

   HT1632C_Write(0xa0,3);    //ID:101

   HT1632C_Write(Addr<<1,7);

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

   {

      HT1632C_Write(dot[p*8-i],8);

      HT1632C_Write(dot[p*8-i],8);

   }

   digitalWrite(cs1, HIGH);

}

13 数值显示

所使用的字模由工具软件PCtoLCD2002来提取,其提取的格式定义如图15所示。

14字模提取

15字模格式定义

相应的字库格式为:

unsignedchar dot[]= {

0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,/*"0",0*/

0x00,0x48,0x48,0x7C,0x40,0x40,0x00,0x00,/*"1",1*/

0x00,0x48,0x64,0x64,0x64,0x54,0x6C,0x00,/*"2",2*/

0x00,0x28,0x44,0x4C,0x4C,0x54,0x34,0x00,/*"3",3*/

0x00,0x10,0x28,0x24,0x64,0x7E,0x00,0x00,/*"4",4*/

0x00,0x3C,0x54,0x54,0x54,0x54,0x24,0x00,/*"5",5*/

0x00,0x38,0x54,0x54,0x54,0x54,0x20,0x00,/*"6",6*/

0x00,0x0C,0x04,0x74,0x14,0x0C,0x04,0x00,/*"7",7*/

0x00,0x2C,0x54,0x54,0x54,0x54,0x2C,0x00,/*"8",8*/

0x00,0x08,0x54,0x54,0x54,0x74,0x38,0x00,/*"9",9*/

};

这样我们要驱动FireBeetle 24×8 LED点阵屏的显示,就有了2种方法。
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3144742-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值