区块链技术博客
www.b2bchain.cn

CH451 点阵LED显示模块

这篇文章主要介绍了CH451 点阵LED显示模块的讲解,通过具体代码实例进行19290 讲解,并且分析了CH451 点阵LED显示模块的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=19290

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

 

01 CH451S


数码管驱动及键盘控制芯片 CH451 CH451 是一个整合了数码管显示驱动和键盘扫描控制以及μP 监控的多功能外围芯片。CH451 内置 RC 振荡电路,可以动态驱动 8 位数码管或者 64 只 LED 发光管,具有 BCD 译码、闪烁、移位等功能;同时还可以进行 64 键的键盘扫描;CH451 通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。

CH451 点阵LED显示模块

▲ CH451S 芯片和使用功能框图

1.特点

● 内置大电流驱动级,段电流不小于 25mA,字电流不小于 150mA。
● 动态显示扫描控制,直接驱动 8 位数码管或者 64 只发光管 LED。
● 可选数码管的段与数据位相对应的不译码方式或者 BCD 译码方式。
● 数码管的字数据左移、右移、左循环、右循环。
● 各数码管数字独立闪烁控制。
● 任意段位寻址,独立控制各个 LED 或者各数码管的各个段的亮与灭。
● 通过占空比设定提供 16 级亮度控制。
● 支持段电流上限调整,可以省去所有限流电阻。
● 扫描极限控制,支持 1 到 8 个数码管,只为有效数码管分配扫描时间。

CH451 点阵LED显示模块

▲ CH451的管脚声明

 

02 点阵模块


1.模块引脚

CH451 点阵LED显示模块

▲ 双LED点阵模块

CH451 点阵LED显示模块

▲ 模块接口定义

2.测试MCU

使用 ATMEGA328实验电路板 来对于上述模块进行测试。

(1) 实验板原理图

CH451 点阵LED显示模块

▲ ATMEGA328的实验板

(2) 实验关节配置

IO1 IO2 IO3
PB1 PB2 PB3
LOAD DIN DCLK

在面包板上搭建的测试电路板:

CH451 点阵LED显示模块

 

03 软件开发


1.开发软件1

CH451 点阵LED显示模块

▲ 设置ImageCraftIDE ICCAVR开发环节

2.CH451底层模块

建立CH451.H、CH451.C的文件。来实现对于CH451的操作。

CH451 点阵LED显示模块

▲ CH451的命令集合

3.软件测试

if(++nShowCount >= 10) {     nShowCount = 0;     ucChar ++;          if(ucChar >= 0x80) {         ucChar = 0;         CH451Clear2();     }      CH451Bit12(ucChar); } 

CH451 点阵LED显示模块

▲ 测试LED亮度

 

04 模块代码


/* **============================================================================== ** CH451.C:             -- by Dr. ZhuoQing, 2020-11-13 ** **============================================================================== */  #include <iom328pv.h> #include <macros.h> #include <stdio.h> #include <string.h> #include "m328.h" #include "iccavr_port.h" //------------------------------------------------------------------------------ #define CH451_GLOBALS        1              // Define the global variables #include "CH451.H"  //------------------------------------------------------------------------------ void CH451Init(void) {     ON(CH451_LOAD);     ON(CH451_DIN);     ON(CH451_DCLK);     OUT(CH451_LOAD);     OUT(CH451_DIN);     OUT(CH451_DCLK);          OFF(CH451_DIN);                         // Output Low pulse set      ON(CH451_DIN);          CH451OutCmd2(0x401, 0x401);             // Set the system argument                                             //          CH451Clear2(); }  //------------------------------------------------------------------------------ void CH451_Delay(unsigned int nDelay) {     while(--nDelay); }  //------------------------------------------------------------------------------ void CH451OutCmd(unsigned int nCmd) {     unsigned int nMask;     unsigned char i;     nMask = 0x1;          for(i = 0; i < 12; i ++) {         if(nCmd & nMask) ON(CH451_DIN);         else OFF(CH451_DIN);                  OFF(CH451_DCLK);         ON(CH451_DCLK);                  nMask <<= 1;     }          OFF(CH451_LOAD);     ON(CH451_LOAD);     ON(CH451_DIN); }  //------------------------------------------------------------------------------ void CH451OutCmd2(unsigned int nCmd1, unsigned int nCmd2) {     unsigned int nMask;     unsigned char i;      nMask = 0x1;              for(i = 0; i < 12; i ++) {         if(nCmd1 & nMask) ON(CH451_DIN);         else OFF(CH451_DIN);                  OFF(CH451_DCLK);         ON(CH451_DCLK);                  nMask <<= 1;     }      nMask = 0x1;              for(i = 0; i < 12; i ++) {         if(nCmd2 & nMask) ON(CH451_DIN);         else OFF(CH451_DIN);                  OFF(CH451_DCLK);         ON(CH451_DCLK);                  nMask <<= 1;     }      OFF(CH451_LOAD);     ON(CH451_LOAD);     ON(CH451_DIN); }  //------------------------------------------------------------------------------ void CH451Data(unsigned char ucData, unsigned char ucDig) {     unsigned int nData;          nData = ucDig & 0xf;     nData = (nData << 8) | ucData;     CH451OutCmd(nData); }  void CH451Data2(unsigned char ucData1, unsigned char ucDig1,                 unsigned char ucData2, unsigned char ucDig2) {      unsigned int nData1, nData2;     nData1 = (ucDig1 & 0xf) | 0x8;     nData1 = (nData1 << 8) | ucData1;                              nData2 = (ucDig2 & 0xf) | 0x8;     nData2 = (nData2 << 8) | ucData2;                              CH451OutCmd2(nData1, nData2); }  //--------------------------------------------------------------                 void CH451Clear2(void) {     unsigned char i;     unsigned int nData;          for(i = 0; i < 8; i ++) {         nData = (i | 0x8);         nData <<= 8;         CH451OutCmd2(nData, nData);              }  }  void CH451Bit02(unsigned char ucBit) {     unsigned int nData1, nData2;     nData1 = 0x0;     nData2 = 0x0;     if(ucBit & 0x40) {         nData2 = 0x180 | (ucBit & 0x3f);     } else {         nData1 = 0x180 | (ucBit & 0x3f);     }          CH451OutCmd2(nData1, nData2);  }  void CH451Bit12(unsigned char ucBit) {     unsigned int nData1, nData2;     nData1 = 0x0;     nData2 = 0x0;     if(ucBit & 0x40) {         nData2 = 0x1C0 | (ucBit & 0x3f);     } else {         nData1 = 0x1C0 | (ucBit & 0x3f);     }          CH451OutCmd2(nData1, nData2);      }                  //============================================================================== //                END OF THE FILE : CH451.C //------------------------------------------------------------------------------ 
/* **============================================================================== ** CH451.H:            -- by Dr. ZhuoQing, 2020-11-13 ** **  Description: ** **============================================================================== */ #ifndef __CH451__ #define __CH451__ //------------------------------------------------------------------------------ #ifdef CH451_GLOBALS #define CH451_EXT #else #define CH451_EXT  extern #endif // CH451_GLOBALS //------------------------------------------------------------------------------ //============================================================================== #define CH451_LOAD           B,1 #define CH451_DIN            B,3 #define CH451_DCLK           B,2  void CH451_Delay(unsigned int nDelay);  //------------------------------------------------------------------------------ void CH451Init(void);  #define CH451_NOP            0x0000 #define CH451_BIT0           0x0180 #define CH451_BIT1           0x01C0 #define CH451_RESET          0x0201 #define CH451_SLEEP          0x0202 #define CH451_LMTC           0x02a0 #define CH451_SHIFT_LEFT     0x0300 #define CH451_SHIFT_RIGHT    0x0302 #define CH451_CIRCLE_LEFT    0x0301 #define CH451_CIRCLE_RIGHT   0x0303 #define CH451_ARG            0x0400          = // = BIT4:CKHF,3:DPLR,2:WDOG,1:KEYB,0:DISP #define CH451_DISPLAY_ARG    0x0500          = // #define CH451_FLASH          0x0600          = // = BIT7-0: = D7S #define CH451_DATA0          0x0800 #define CH451_DATA1          0x0900 #define CH451_DATA2          0x0A00 #define CH451_DATA3          0x0B00 #define CH451_DATA4          0x0C00 #define CH451_DATA5          0x0D00 #define CH451_DATA6          0x0E00 #define CH451_DATA7          0x0F00 #define CH451_KEY            0x0700  //------------------------------------------------------------------------------ void CH451OutCmd(unsigned int nCmd); void CH451OutCmd2(unsigned int nCmd1, unsigned int nCmd2);  //------------------------------------------------------------------------------ void CH451Data(unsigned char ucData, unsigned char ucDig); void CH451Data2(unsigned char ucData1, unsigned char ucDig1,                 unsigned char ucData2, unsigned char ucDig2);  //------------------------------------------------------------------------------ void CH451Clear2(void); void CH451Bit02(unsigned char ucBit); void CH451Bit12(unsigned char ucBit);  //============================================================================== //             END OF THE FILE : CH451.H //------------------------------------------------------------------------------ #endif // __CH451__ 

 

※ 结论


测试了一块基于CH451的驱动的双LED点阵显示板的功能。可以用于未来试验应用。

■ 相关文献链接:

  • 数码管驱动及键盘控制芯片 CH451
  • ATMEGA328实验电路板

  1. 测试软件ICCAVR工程文件:AtmelResearch2020TestCH451Umain.c ↩︎

本文转自互联网,侵权联系删除CH451 点阵LED显示模块

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » CH451 点阵LED显示模块
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们