本帖最后由 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)正向偏置。 共阴极数码管显示 [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] |