CH451 点阵LED显示模块
➤01 CH451S
数码管驱动及键盘控制芯片 CH451 CH451 是一个整合了数码管显示驱动和键盘扫描控制以及μP 监控的多功能外围芯片。CH451 内置 RC 振荡电路,可以动态驱动 8 位数码管或者 64 只 LED 发光管,具有 BCD 译码、闪烁、移位等功能;同时还可以进行 64 键的键盘扫描;CH451 通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。
▲ CH451S 芯片和使用功能框图
1.特点
● 内置大电流驱动级,段电流不小于 25mA,字电流不小于 150mA。
● 动态显示扫描控制,直接驱动 8 位数码管或者 64 只发光管 LED。
● 可选数码管的段与数据位相对应的不译码方式或者 BCD 译码方式。
● 数码管的字数据左移、右移、左循环、右循环。
● 各数码管数字独立闪烁控制。
● 任意段位寻址,独立控制各个 LED 或者各数码管的各个段的亮与灭。
● 通过占空比设定提供 16 级亮度控制。
● 支持段电流上限调整,可以省去所有限流电阻。
● 扫描极限控制,支持 1 到 8 个数码管,只为有效数码管分配扫描时间。
▲ CH451的管脚声明
➤02 点阵模块
1.模块引脚
▲ 双LED点阵模块
▲ 模块接口定义
2.测试MCU
使用 ATMEGA328实验电路板 来对于上述模块进行测试。
(1) 实验板原理图
▲ ATMEGA328的实验板
(2) 实验关节配置
IO1 | IO2 | IO3 |
---|---|---|
PB1 | PB2 | PB3 |
LOAD | DIN | DCLK |
在面包板上搭建的测试电路板:
➤03 软件开发
1.开发软件1
▲ 设置ImageCraftIDE ICCAVR开发环节
2.CH451底层模块
建立CH451.H、CH451.C的文件。来实现对于CH451的操作。
▲ CH451的命令集合
3.软件测试
if(++nShowCount >= 10) {nShowCount = 0;ucChar ++;if(ucChar >= 0x80) {ucChar = 0;CH451Clear2();}CH451Bit12(ucChar);
}
▲ 测试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,2void 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实验电路板
测试软件ICCAVR工程文件:Atmel\Research\2020\TestCH451U\main.c ↩︎
CH451 点阵LED显示模块相关推荐
- 点阵LED显示原理(转)
加个广告,我的淘宝网店,http://fengmm521.taobao.com 点阵LED显示原理(转2007年5月24日) 前几天看一个朋友做LED屏,就想自已试试看能不能做,在网上找到这个现在和大 ...
- STM32硬件SPI控制TM1638 按键数码管LED显示模块
STM32硬件SPI控制TM1638按键数码管LED显示模块 从淘宝买来的,TM1638专门是控制LED的,LED组合起来就可以变成数码管,还有按键,这个我就没管了,不想管了,发这个帖子只是为了记 ...
- 蓝桥杯电子类单片机组模块——led显示(一般作用)
几乎每届蓝桥杯单片机组比赛都会考到led模块:特别是对于近几年的省赛来讲,led模块的使用显得更为灵活:即便led比较之简单,但是编写程序时还是很有可能出现错误. 现在来给大家介绍动态数码管的使用方法 ...
- 【51单片机】点阵LED的显示实验
点阵LED显示实验 前言 一.环境 二.硬件 1.了解Matrix-8×8就像你需要了解女朋友 2.正确地连接线路就像你需要以正确的方式让她开心. 三.软件 1.思路就是有一个给她惊喜的想法 2.头文 ...
- TM1637带秒点四位LED显示器模块ARDUINO驱动程序
几块钱网上买了块LED显示模块,IIC接口,TM1637驱动,四位显示,带秒点.写了个用于ESP32模块的ARDUINO驱动程序,将笔记放这里,以备未来使用. 模块文件:TM1637.C #ifnde ...
- Arduino 学习笔记 | 单片机控制驱动MAX7219 8*8 LED点阵显示模块
第一部分 8 x 8点阵模块 不带MAX7219驱动的8×8 點矩陣LED(如下图),从左侧有写字的一侧开始,L接正电,C接负电. 列L (1.2.3.4.5.6.7.8) 行C(1.2.3.4.5. ...
- 【Proteus仿真】【51单片机】LED点阵花样显示设计
文章目录 一.功能简介 二.软件设计 三.实验现象 联系作者 一.功能简介 本项目使用Proteus8仿真51单片机控制器,使用8*8LED点阵.按键模块等. 系统运行后,默认以静态模式显示,此时点阵 ...
- Arduino Uno 使用MAX7219驱动单个8*8点阵LED模块
还记得之前做的一个怦然心动的8*8点阵实验吗? 很多小伙伴都会觉得,插口都用完了还能用其他的功能吗? 现在使用MAX7219这个驱动模块 只占用3个IO口,就可以控制8*8点阵的显示,非常实用,简单. ...
- K_A02_005 基于单片机驱动数码管 LED 按键模块(TM1638) 流水灯 0-7 按键值显示
目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.通信协议说明 1.写数据 时序: 程序: 2.读数据 时序: 程序: 四.部分代码说明 1.接线说明 1.1.STC89C52RC+按键数 ...
最新文章
- js实现当前导航菜单高亮显示
- mongo mysql 聚合性能_Mongodb和Mysql的性能分析
- 如何优化网站结构才促使网站排名“节节高”?
- 语言抄袭广东工业大学_CUBA出现消极比赛,广东工业大学与江西师范大学被取消成绩...
- 西电计算机学院(原软件学院)软件工程考研复试
- leetcode336. 回文对(字典树)
- 前端学习(1644):前端系列实战课程之上移和下移
- TCP/IP模型如何分层?路由器、网卡分别属于哪一层?
- 8.1 异常(Exceptions)
- Python可视化——绘制折线图
- # 研究杂感 × VOSviewer(第一辑)
- PHP字符串函数strrchr(查找指定字符在字符串中的最后一次出现)
- 抢滩新零售混战 实力战将才不惧双十一 附:双十一红包雨时间表
- 中国古代文化常识【1】
- python代码手机壁纸_Python制作微信好友背景墙教程(附完整代码)
- 拼多多数据分析笔试题(附代码答案)
- 单号查询方法,怎么查快递物流到哪里了
- 辽宁移动cm201-2机顶盒把720P输出强制修改为1080P输出的方法
- 解决 input 输入框在 iOS 系统中无法输入内容
- FS4412开发板简介
热门文章
- 【转】windows平台多线程同步之Mutex的应用
- 安卓Webview缓存网页数据(无网络正常显示)
- .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)...
- Java中定义VO事件的问题
- 自己看着视频的理解:设计模式之abstractfactory模式(2)
- [MOSS 译]如何:在WEB内容查询部件中使用自定义的字段
- IBM投资4000万美圆,加强对SAP®应用的支持
- libevent源码安装及Linux自动编译功能总结
- SAP R3 FI 上线 顾问设置教程(一)
- 2015下半年软考系统集成管理工程师10月8日作业