2019-8-31 23:26:07 [显示全部楼层]
3839浏览
查看: 3839|回复: 1

[项目] 一个电子筛子

[复制链接]
本帖最后由 gada888 于 2019-9-1 10:43 编辑

一、项目介绍

做一个电子筛子,主要模块是一个7段显示器,7段显示器是由并联连接的七个LED组成的装置,可用于显示数字和一些字母。可以通过将显示器上的不同引脚连接到电源来表示不同的字母/数字,从而并行打开LED。

二、材料准备

1 * Arduino Uno板

1 * 7段显示(普通阴极)

8 *电阻(220Ω)

1 * USB数据线

杜邦线

1 *面包板

三、原理讲解

数码管由七个以矩形方式排列的LED组成。七个LED中的每一个被称为段,因为当被照亮时,段形成数字数字(十进制和十六进制)的一部分以被显示。另外第八个LED有时在同一封装内使用,因此当两个或多个7段显示器连接在一起显示大于十的数字时,允许显示小数点(DP)。

数码管中的七个LED中的每一个被给予位置段,其中一个连接引脚被直接从矩形塑料封装中取出。这些LED引脚从一个直到g标记,代表每个单独的LED。其他LED引脚连接在一起并进行布线以形成公共引脚。

因此,通过以特定顺序向前偏置LED段的适当引脚,某些段将变亮,而其他段将变暗,从而可以在显示器上生成所需数字的字符模式。这样我们就可以在同一个7段显示屏上显示十位十进制数字0到9中的每一个。

显示器的公共引脚通常用于标识哪种类型的7段显示器。由于每个LED具有两个连接引脚,一个称为“阳极”和另一个“阴极”,因此有两种类型的LED 7段显示器,称为公共阴极(CC)和通用阳极(CA)。

两个显示器之间的区别,正如其名称所示,共阴极是将7段的所有阴极直接连接在一起,共阳极具有连接在一起的7段的所有阳极。

共阴极(CC) - 在共阴极显示中,LED段的所有阴极连接都连接在逻辑“0”或接地。通过经由限流电阻器施加“HIGH”或逻辑“1”信号来照亮各个段,以使各个阳极端子(ag)正向偏置。

共阴极数码管显示

一个电子筛子图1

一个电子筛子图2

一个电子筛子图3

一个电子筛子图4

一个电子筛子图5

[mw_shl_code=applescript,true]/*
modified by gada888

*/
int segmentPins[] = {2, 3, 4, 5, 6, 7, 8};

byte digits[10][8] = {
  //  a  b  c  d  e  f  g  .
  { 1, 1, 1, 1, 1, 1, 0, 0}, // 0
  { 0, 1, 1, 0, 0, 0, 0, 0}, // 1
  { 1, 1, 0, 1, 1, 0, 1, 0}, // 2
  { 1, 1, 1, 1, 0, 0, 1, 0}, // 3
  { 0, 1, 1, 0, 0, 1, 1, 0}, // 4
  { 1, 0, 1, 1, 0, 1, 1, 0}, // 5
  { 1, 0, 1, 1, 1, 1, 1, 0}, // 6
  { 1, 1, 1, 0, 0, 0, 0, 0}, // 7
  { 1, 1, 1, 1, 1, 1, 1, 0}, // 8
  { 1, 1, 1, 1, 0, 1, 1, 0} //  9
};

byte spinDigits [6][8] = {
  //  a  b  c  d  e  f  g
  { 1, 0, 0, 0, 0, 0, 0, 0}, // a
  { 0, 1, 0, 0, 0, 0, 0, 0}, // b
  { 0, 0, 1, 0, 0, 0, 0, 0}, // c
  { 0, 0, 0, 1, 0, 0, 0, 0}, // d
  { 0, 0, 0, 0, 1, 0, 0, 0}, // e
  { 0, 0, 0, 0, 0, 1, 0, 0}  // f
};

#define buttonPin 9

void setup() {
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins, OUTPUT);
    digitalWrite(segmentPins, LOW);
  }
  //set up swich
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  if (digitalRead(buttonPin) == LOW) {
    //roll dice
    spin();
    roll();
    delay(500);
  }
}

void roll() {
  int roll = random(1, 7);
  updateDisplay(roll);
}

void spin() {
  for (int j = 0; j < 6; j++) {
    for (int i = 0; i < 8; i++) {
      digitalWrite(segmentPins, spinDigits[j]);
    }
    delay(250);
  }
}


void updateDisplay(int value) {
  setSegments(value);
}

void setSegments(int n) {
  for (int i = 0; i < 8; i++) {
    digitalWrite(segmentPins, digits[n]);
  }
}

[/mw_shl_code]

20060606  高级技匠

发表于 2020-8-7 05:57:55

这个我以前正好做过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail