【Arduino】8地点LED数码管(3461BS)
淘宝买了一块3461BS的8地点LED数码管,婴儿就迫不及待地尝试,结果看到了文件,好家伙无Arduino测试程序。
莫急~莫急~无论如何串行操作,大不了呗瞎蒙!
以下几点是在更有趣的点瞎蒙:
1、须要了解什么是“上升沿”、“下降沿”。否则看參考代码(文档仅仅提供51单片机的DEMO)会认为非常迷糊
2、怎样显示小数点?这个文档中提都没提到,经研究发现每一个字符(如0用0xC0表示)的最高位(即左数第一位)都是1(两进制表示)。于是我试探性的将其与上0x7f(即0xC0 & 0X7F),结果惊喜的发现苦苦寻觅的小数点出现啦!
其他应该问题不大,直接贴出代码:
#include <string.h> int DIO = 2;
int RCLK = 3;
int SCLK = 4; unsigned char CHAR_MAP[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x8C, 0xBF, 0xC6, 0xA1, 0x86, 0xFF, 0xbf };
char CHAR_INDEX_MAP[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '-' }; void ledout(unsigned char chr)
{
unsigned char i;
for (i = 8; i >= 1; i--)
{
if (chr & 0x80) digitalWrite(DIO, 1); else digitalWrite(DIO, 0);
chr <<= 1;
digitalWrite(SCLK, 0);
digitalWrite(SCLK, 1);
}
} void ledshow(const char* str)
{
int len = strlen(str);
int hasDot = 0;
for (int i = len - 1, m = 0; i >= 0; i--) {
char chr = str[i];
if (chr == '.') {
hasDot = 1;
continue;
}
int n = 0;
for (; n < 17; n++) {
if (chr == CHAR_INDEX_MAP[n])
break;
}
if (n != 17) {
unsigned char chr1 = CHAR_MAP[n];
if (hasDot)
chr1 &= 0x7f; // 全部字符的最高位(左数第一位)都是1,代表小数点为暗
// 因此仅仅要将最高位改为0小数点就能够点亮啦
ledout(chr1); // 显示字符
ledout((int)ceil(pow(2, m))); // 位置
digitalWrite(RCLK, 0);
digitalWrite(RCLK, 1);
} m++;
hasDot = 0;
}
} void setup()
{
pinMode(DIO, OUTPUT);
pinMode(RCLK, OUTPUT);
pinMode(SCLK, OUTPUT);
} void loop()
{
ledshow("3.1415926");
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
【Arduino】8地点LED数码管(3461BS)的更多相关文章
- 【雕爷学编程】Arduino动手做(47)---七段LED数码管模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- Arduino 翻译系列 - LED 灯闪烁
原文地址 - https://www.arduino.cc/en/Tutorial/Blink 闪烁 这个例子展示了你能拿 Arduino / Genuino 板子来干的最简单的事:使开发板上的 LE ...
- ATmega8仿真——LED 数码管的学习
1. I/O 口的结构及特点 Atmega8 有23 个I/O 引脚,分成3 个8 位的端口B.C 和D,其中C 口只有7 位 Atmega8 采用3个8位寄存器来控制I/O端口,它们分别是:方向寄存 ...
- 单线制DS18B20温度传感器LED数码管显示当前的温度值
/******************************************* 程序功能:利用单线制DS18B20温度传感器 LED数码管显示当前的温度值 ***************** ...
- 硬件原理系列之LED数码管(一)
LED数码管也叫数码显示器,由8段(7段,8多一位小数点)发光二极管组成,控制不同组合,就可以显示不同字符 dp示小数点,COM为公共端,根据连接方式的不同,分为共阴极和共阳极 工作原理:若选用共阴极 ...
- 【.NET 与树莓派】LED 数码管驱动模块——TM1638
LED 数码管,你可以将它看做是 N 个发光二级管的组合,一个灯负责显示一个段,七个段组合一位数字,再加一个小数点,这么一来,一位数码管就有八段.一般,按照顺时针的方向给每个段编号. 上图中的 h 就 ...
- 音响音箱/恒温壶/电量显示/电子数字时钟等LED数码管显示驱动IC-VK1640B 8段12位/12段8位显示
市面上最常用的数码管为七段/八段显示,八段数码管比七段数码管多一个发光二极管单元(比七段数码管多一个点),又按能显示多少个"8"可分为1位.2位.4位等等.数码管又分为共阳极驱动/ ...
- 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)
第一步:准备 1.智能手机微信客户端或微信电脑版 2.注册微信公众平台 https://mp.weixin.qq.com 3.注册新浪账号 http://www.sinacloud.com 4.拥有一 ...
- 4位或者5位led数码显示,485通信modbus,支持任意小数点写入,工业标准设置,可和plc,dcs,组态完美对接,支持定制修改
MRD-5030具有4位8段数码管,支持通过工业标注协议Modbus(Modbus-RTU)控制显示,支持任意小数点的显示.数据以半双工方式通信.电源端口和通信端口都具有防浪涌,防雷600W保护,能够 ...
随机推荐
- 【Demo 0002】Android 提醒框
本章学习要点: //==: Alert Dialog void showAlertDialog() { final Builder builder = new AlertDialog.Builde ...
- 使用RNSwipeViewController类库进行视图切换
如今很多应用已经不再局限于点击按钮触发事件来进行视图之间切换,为迎合给予用户更好体验,体现iOS系统极佳用户体验,使用手势来进行各个视图之间切换,用户至于一个大拇指在屏幕中央就可浏览到很多信息: 关于 ...
- CSS中常见的BUG调试
1.布局--layout 布局是windows提出的概念,用于控制元素的尺寸和定位. 拥有布局的元素负责自身及其子元素的尺寸及定位,而没有布局的元素仅仅能依靠近期的祖先元素进行控制. 通常在IE6中出 ...
- 推荐一个第三方Qt库的集合
https://inqlude.org/ Stable libraries | Development versions | Unreleased | Commercial | All attica ...
- FOJ 2170 花生的序列 dp
题目链接:http://acm.fzu.edu.cn/problem.php? pid=2170 贴个baka爷的代码留念.. 数据出的有问题.输入的字符串长度不超过1000 #include< ...
- 状态压缩动态规划 -- 棋盘问题 POJ 1321
一个 N * N 的棋盘上面,有些格子不能放,放置 M 的棋子, 每两个棋子不能在同一行或者同一列,问有多少种放法 DFS太慢,用SCR好点点 Python 仅仅有 22 行,事实上能够更短.可是得排 ...
- [C#基础] 继承
虚方法和覆写方法 虚方法可以使基类的引用访问"升至"派生类中 可以使用基类引用调用派生类的方法,只需满足下面的条件 派生类的方法和基类的方法有相同的签名和返回类型 基类的方法使用v ...
- QT 4.2.2的安装(安装完还要再编译,注意设置Windows Path)
(安装篇)前奏: 提到C++的GUI Framework估计大多数人都会想到MFC.VCL,因为在十年前的COM时代,这两个大家伙几乎垄断了整个C++ windows平台上应用程序的开发市场, 但是最 ...
- jQuery遍历函数
jQuery遍历函数包含了用于筛选.查找和串联元素的方法. .add():将元素加入到匹配元素的集合中. .andSelf():把堆栈中之前的元素集加入到当前集合中. .children():获得匹配 ...
- 动态分析maillog日志,把恶意链接直接用防火墙禁止
近期用 postfix + dovecot 搭建了一个邮件server, 被人当做垃圾邮件转发器,经过配置postfix 的黑白名单, postfix 提示成功的 REJECT 了垃圾邮件, 只是还是 ...