目录
一、本节介绍
在以前的实验中,我们学会了使用7段LED显示器和控制按钮。在本课中,我们将使用7段显示器和按钮一起创建一个简单的数字骰子。
二、材料准备
1*-arduino UNO板
-USB数据线*1
-杜邦线
1*-按钮
*(1-10kΩ电阻器)
电阻器220Ω*(-8)
-7段显示器*1
1*104-陶瓷电容器
1*-74HC595
三、原理讲解
骰子的数字背后的想法非常简单:7段显示器从圆1~6。当按下按钮时,跳跃会减慢直到它停止在3秒后。当再次按下该按钮,则该过程将重复。
四、实验步骤
步骤1:构建电路
将74HC595用于布线之间,7段和arduinoUNO,请参考第11课74HC595。
一种按钮,所述按钮的一端连接到5V,而另一端与10kΩ电阻和电容器,连接在电阻和电容连接至GND。
原理图
步骤2:编写程序
步骤3:编译代码
步骤4:上载程序到arduino UNO板
你现在可以看到跳跃的7段显示从1到6之间。当按钮被按压时,将跳跃减速直至停止3秒。如果再次按下该按钮,则该过程将重复。
本节课代码:
[scu name=”arduino-ide-post” platform=”arduino:avr:uno”]
/***********************************************
//数字骰子
你现在可以看到单个的7段显示器之间从1到6。
当按钮被按压时,将跳跃减速直至停止3秒。
如果再次按下该按钮,则该过程将重复。
*************************************************/
//2017.11.11
const int latchPin = 12;//引脚12连接至ST_CP的74HC595
const int clockPin = 8;//8引脚连接到CP的74HC595_SH
const int dataPin = 11; //到DS的连接销1174HC595
const int ledPin = 13; //ledpin附加到13脚
const int keyIn = 2; //KEYIN连接到引脚
int num = 0;
//display 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F
int datArray[16] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 238, 62, 156, 122, 158, 142};
long randNumber;
/***********************************************/
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(keyIn, INPUT);
Serial.begin(9600);
randomSeed(analogRead(0)); //初始化A0输入随机数字生成
}
/************************************************/
void loop()
{
int stat = digitalRead(keyIn);//读取自存储键
if (stat == HIGH) // 检查是否按压了按钮
num ++;
if (num > 1)
{
num = 0;
}
Serial.print(num); //将num串行打印到监视器
if (num == 1) //当按钮被按下
{
randNumber = random(1, 7); //随机存储1-7
//显示随机数以1秒间隔3次
showNum(randNumber); //显示在7段randnumber
delay(1000);
randNumber = random(1, 7);
showNum(randNumber);
delay(1000);
randNumber = random(1, 7);
showNum(randNumber);
delay(1000);
while (!digitalRead(keyIn)); //当没有按下按钮,程序停止在这里
int stat = digitalRead(keyIn);//读取键的状态
if (stat == HIGH) //检查是否按压了按钮
{
num ++;
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
if (num >= 1)
{
num = 0;
}
}
}
//显示100毫秒间隔在随机数字
randNumber = random(1, 7);
showNum(randNumber);
delay(100);
}
/************************************************/
//该函数驱动7段显示数字
void showNum(int num)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, datArray[num]);
digitalWrite(latchPin, HIGH);
}
/************************************************/
[/scu]
本节课程序下载:点击下载
下载密码: