抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 四位数码管树莓派c语言 用树莓派来操控一个四位数码管

四位数码管树莓派c语言 用树莓派来操控一个四位数码管

时间:2023-04-02 05:03:07

相关推荐

从TB买了个四位数码管。驱动是两个74HC755。代码如下。

基本原理为:

动态扫描,也就是一次点亮一个数码管,熄灭其它的,然后点亮下一个,熄灭其它的,以此往复。由于人眼镜的视觉暂留效应,看起来就像一直在点亮一样。

四个数码管,数据输入ABCDEFGH连接到一个74HC755的八个输出输出口上。然后四个数码管的阳极通过三极管分别连接到另一个755的四个数据输出口上(另外四个没有使用)。

当要在某个数码管上显示数字的时候,首先输入这个数字的八个led的亮暗情况,最后再输入这四个数码管亮哪一个。比如

要在第一个数码管输出0,首先输出0的笔画表示

+--亮---+

亮|| 亮

+-- 灭--+

亮|| 亮

+-- 亮---+

也就是10010000 (1表示灭,0表示亮,最高位是小数点,不亮)

然后在输出一个 0x1 (00000001),

+---------------+

| |---------------- 该脚为 0

| 755|---------------- 该脚为 0

| |---------------- 该脚为 0

| |---------------- 该脚为 1,所以与之相连的三极管,把数码管的输入端打开,该数码管点亮

+---------------+

最后RCLK输入一个上升沿,把这16位数据送入锁存器,这个数字就被显示出来了。 代码如下。

package org.lff.p2;

import ponent.light.LED;

import com.pi4j.io.gpio.*;

import java.util.Arrays;

import java.util.HashMap;

import java.util.Map;

/**

* Created by LFF on /11/4.

*/

public class H755 {

private static String LED_0 = "10010000";

private static String LED_1 = "11111001";

private static String LED_2 = "10100100";

private static String LED_3 = "10110000";

private static String LED_4 = "10011001";

private static String LED_5 = "10010010";

private static String LED_6 = "10000010";

private static String LED_7 = "11111000";

private static String LED_8 = "10000000";

private static String LED_9 = "10010000";

private static Map map = new HashMap();

static {

map.put(0, LED_0);

map.put(1, LED_1);

map.put(2, LED_2);

map.put(3, LED_3);

map.put(4, LED_4);

map.put(5, LED_5);

map.put(6, LED_6);

map.put(7, LED_7);

map.put(8, LED_8);

map.put(9, LED_9);

}

private static GpioPinDigitalOutput DIO;

private static GpioPinDigitalOutput RCLK;

private static GpioPinDigitalOutput SCLK;

public static void main(String[] argu) {

init();

long l = System.currentTimeMillis();

byte d3 = fromString(map.get(1));

byte d2 = fromString(map.get(2));

byte d1 = fromString(map.get(3));

byte d0 = fromString(map.get(4));

int count = 0;

while(true) {

//;

display(d3, d2, d1, d0);

count++;

if (count % 100 == 0) {

System.out.println(count + " in " + (System.currentTimeMillis() - l) + " ms.");

l = System.currentTimeMillis();

}

}

}

private static void display(byte d3, byte d2, byte d1, byte d0) {

LED_OUT(d3);

LED_OUT((byte) 1);

RCLK.low();

RCLK.high();

sleep(2);

LED_OUT(d2);

LED_OUT((byte)2);

RCLK.low();

RCLK.high();

sleep(2);

LED_OUT(d1);

LED_OUT((byte)4);

RCLK.low();

RCLK.high();

sleep(2);

LED_OUT(d0);

LED_OUT((byte)8);

RCLK.low();

RCLK.high();

sleep(2);

}

private static void sleep(long time) {

try {

Thread.sleep(time);

} catch (InterruptedException e) {

}

}

private static void LED_OUT(byte X)

{

byte i;

for(i=8;i>=1;i--)

{

if ((X & 0x80) != 0)

{

DIO.high();

}

else

{

DIO.low();

}

X<<=1;

SCLK.low();

SCLK.high();

}

}

private static byte fromString(String bin) {

int x = (Integer.parseInt(bin, 2));

byte X = (byte)(x & 0xFF);

return X;

}

private static void init() {

// create gpio controller

final GpioController gpio = GpioFactory.getInstance();

DIO = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_29, "dio", PinState.HIGH);

RCLK = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_28, "rclk", PinState.HIGH);

SCLK = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_27, "sclk", PinState.HIGH);

}

}

如果觉得《四位数码管树莓派c语言 用树莓派来操控一个四位数码管》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。