- 博客(14)
- 收藏
- 关注
原创 WS2812B全彩灯带检测代码
从GiHub下载了WS2812库,跑其中的示例代码,闪烁非常快,根本看不清楚。而且,耗电非常厉害。用外接电源供电,Arduino板的稳压电路烫得手不能碰。我们修改了程序,同时只是一个灯亮,从一端跑到另一端,再跑回来。这样,用USB供电也可以运行了。我们用的是144灯珠的全彩灯带,如果你的灯珠数不同,譬如60个灯珠的,把代码中的“#define NUMP 144”改成“#define NUMP 60”就可以了。跑一条是一种颜色,碰头后又随机变一种色。这样,灯珠里的RGB三个灯芯都检测到了。
2025-04-25 07:04:49
137
原创 用74HC595芯片就可做一个SPI组件
现在组件总线很多,最常见的是I2C(Inter-Integrated Circuit,芯片间总线,缩写也写作IIC),我们前面有好几篇文章介绍过。本来需要8个LED、8个限流电阻做8位指示,后来买到了8位指示组件,只有一元一个,就做了这个实验。测试发现,这个8位指示组件是共阳的,公共端应该接Vcc,而不是接Gnd。如果你想用SPI总线扩展16个数字输出口,你就用两个74HC595,这个Q7S接下一个74HC595的DS端。74HC595的/OE(13)是使能,电平拉低时芯片才工作,因此必须接Gnd。
2025-04-21 20:14:44
696
原创 计算机编程中的三种颜色代码对照表
现在的各种编程语言,几乎都是用RGB三基色来定义颜色的。可以用6位十六进制数表示颜色,2位一组依次表示红R(ed)、绿G(reen)、蓝B(lue)的值。每个值的范围0~255(8位二进制)。也可以用三个范围也是0~255的整数表示,之间用逗号隔开。有些语言中,譬如Python,还可以直接用英文表示颜色的单词来表示。(浓汤)乳脂,番茄等。
2025-04-20 20:11:17
1010
原创 关于数组处理优化的一次讨论
软、硬皆有:数据结构的物理存储结构、存储空间的使用、编译器及其与O.S.的关系、O.S.的不确定性、指令系统、实验与结论的关系等等。它有影响,但是只是使快的更快,慢的更慢。确切地说,就是取决于所用的C编译器对数组的处理(物理存储结构)是行优先还是列优先。恩 数组不是系统管的 没错 但这个问题不是数组的问题了 主要是cache 命中率的问题还有内存分配的问题 这都是编译器无法染指的地方。例如:int a[3][4]是作为由3个4元数组构成的数组来处理的,这样a[3][0]和a[3][1]自然是相邻的。
2025-04-20 09:28:37
369
原创 怎样测出I2C组件的总线地址
I2C,Inter-Integrated Circuit,缩写也写作IIC。在Arduino里也叫TWI(Two-Wire Interface)。是菲利普(现在叫NXP)公司开发的一种通信协议。最初用在电视机中,以减少芯片之间的连线。Atmel搞了个TWI,Two-Wire Interface,两线接口。其实与I2C是一样的。ATmega328内置了TWI,Arduino UNO的模拟输入脚A4与A5兼作TWI的SDA与SCL引脚。Arduino的Wire库支持I2C通信。选菜单项“项目”|“加载库”|..
2021-06-17 19:03:17
1719
6
原创 Java的垃圾回收(Garbage Collection)机制
一.谁在做Garbage Collection? 一种流行的说法:在C++里,是系统在做垃圾回收;而在Java里,是Java自身在做。在C++里,释放内存是手动处理的,要用delete运算符来释放分配的内存。这是流行的说法。确切地说,是应用认为不需要某实体时,就需用delete告诉系统,可以回收这块空间了。这个要求,对编码者来说,是件很麻烦、很难做到的事。随便上哪个BBS,在C
2006-08-27 10:12:00
3562
2
原创 Java对象及其引用
初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。 为便于说明,我们先定义一个简单的类: class Vehicle {int passe
2006-08-14 16:10:00
6028
3
原创 三种内存分配模式
系统为进程分配数据空间有三种形式。静态分配整块静态分配空间,包括其中的所有数据实体,都是在进程创建时由系统一次性分配的(同时为UNIX称为Text的代码分配空间)。这块空间在进程运行期间保持不变。初始化的和未初始化的实体分别放在初始化数据段和未初始化数据段(BSS)。后者和前者不同,在.o文件a.out文件里都不存在(只有构架信息),在进程的虚拟空间里才展开。extern变量和st
2006-06-23 20:32:00
3535
1
原创 定义对象时为何要出现两次类名?
譬如,我们已声明了一个名叫Balloon的类。可以用下式来生成Balloon对象(这是Java或C++书里的惯用语。所谓Balloon对象,说得明白一点,就是以类Balloon为模板生成的对象。):Balloon rope1 = new Balloon();对这个语句,几乎所有的BBS里都有人问过:这个类名Balloon,为啥要出现两次?我也一直纳闷。后来觉得似乎有点懂了,写出来让大家批评
2006-06-19 12:57:00
3167
2
原创 浮点数格式及相关实验
一.浮点数与IEEE 754浮点数可以表示成:[-](-1)S(d0.d1d2…)bE浮点数的二进制格式由两部分组成。一是尾数部分,就是上式中的[-](-1)S(d0.d1d2…),其次是指数部分,就是上式中的bE。[-]表示这个负号是可选的。早期的机器数,符号位S用1表示正数,0表示负数。要加上这个负号。后来发现,如果反过来,以0表示正数,计算会方便得多。现在的机器都是这样,就没
2006-06-12 19:52:00
10923
4
原创 C/C++没有数组
在其它高级语言里,不管是定义(声明)还是引用,a[i]或a[3]都是一个整体。在C/C++里,却是一个表达式:a[i]是运算符[]连接两个实体a和i。说C/C++并没有数组,有以下几条理由。理由一:C里没有数组形式。“数组”名a本身就是一个指针,与常规指针不同的是,它是一个不能移动的所谓常指针。如在函数外有定义:float a[3] = {1.0, 2.0, 3.0};首先
2006-06-06 20:51:00
5597
21
原创 Definition(定义) and Declaration(声明)
要弄懂这两者,没啥困难。可是,至少有半数以上的C书没能分清。有的书在某一章节里把这个问题说清楚了,可在其它章节里却乱说一气。真是无奈。这两者都是对实体Object的操作。对于任何一个实体,Definition必须有一次,也只能有一次。Declaration可以有0次,也可以有任意次。Definition是真正产生实体,即为其分配存储空间。Declaration并不产生实体,事实上,
2006-06-06 14:25:00
3295
1
原创 我对C语言变量的一些认识
从本质上讲,变量是程序中用来存放信息的一块空间。“这块空间”一词,还要加两个定语。一是所存放的内容是可以(通过代码来)改变的;二是它的地址是可以访问的(否则就无法用代码来访问它)。这就引出一连串与变量有关的许多问题。 变量有两个属性。一是它的数据类型,就是这个空间能用来存放哪种类型的数据;二是它的时空属性。本文只涉及及后者。时就是变量的生命期,空就是变量的作用域。
2006-06-04 06:02:00
4063
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人