微信搜索【沛华测控】订阅我们
Shania夲来想更一期“一位数码管倒计时”的课程后面觉得不是很有意思,于是换成四位数码管想做一个“数码管显示电压值”的效果。经過几天的摸索分别使用LabVIEW和Arduino C/C++实现了同样的效果,今天跟大家简单分享一下
这里我们用到一个电位器跟一个12引脚的共阳极四位数码管,数碼管的引脚图如下:
单个数码管的每一段用a、b、c、d、d、e、f、dp标志对应Arduino的0-7号数字引脚;公共端1-4对应8-11号数字引脚。电位器的信号线接到Arduino开发板的Analog IN 引脚(Shania接的是A0)
下面是分别用LabVIEW跟Arduino IDE写的两段代码,大家可以对比一下看下两者有什么相通的地方。
char index=VoltageShow%10; //取余数第一次取个位的值,第②次取十位的值然后取百位,千位;
if (i==3)PORTD = Number[index] &0x7F; //由于数码管是从右到左从个位到千位扫描的,前面为了方便乘以1000消除了小数点这里要在第四个數字加回小数点;
PORTB = Scan[i]; //点亮4位数码管中的其中一位,for循环每次重新开始后从右到左扫描数码管
PORTB = 0; //快速熄灭数码管消除残影,根据实际效果调试;
先用For循环初始化0-11号IO,将这些引脚定义为"OUTPUT",接着将电位器读取到的电压值(0-5v)转换为单个字符后整合成数组(舍弃小数点字符“.”)
再用条件结构将对应的十六进制段码输入给0-7号引脚(按字节操作),让数码管显示对应的数字;通过操作8-11号引脚For循环的每次迭代只点亮4位数码管中的其中一位(根据实际效果调试,为消除数码管残影每次数码管点亮1ms后,马上将对应引脚电平拉低熄灭数码管),从左到右扫描數码管
同时用“选择(函数)”(Select)与逻辑运算符“与”(And)做判断,如果For循环的循环计数端i等于0将最左边数码管的小数点dp段点亮;否则將不做处理。
这样就实现了动态扫描的显示效果!看似同时显示,其实是轮询扫描的呢这跟显示器的工作原理差不多,只是我们人眼汾辨不出来而已~