Arduino实战小项目: 数字时钟制作
发布时间
阅读量:
阅读量
前言:
利用5641AS型四位数码管掌握控制方式;另外也顺便记录了Arduino线程的操作流程;同时制作了一个简易的数字电子计时器。
效果如下:

目录
前言:
主要材料:
5641AS四位数码管管脚图:
数码管与nano的接线图:
说明:
完整代码如下:
线程库下载地址
主要材料:
Arduino nano
5641AS四位数码管
5641AS四位数码管管脚图:

数码管与nano的接线图:

说明:
说明:
1.数码灯管的控制其本身还是一个开关量的控制。
- 在进行定时计算的同时需对数码管进行控制,在调用该库的过程中我选择采用SCoop线程库,并发现定时无法直接使用delay指令而必须调用sleep函数。
Scoop库目前并未被Arduino IDE的库管理模块所包含,请您单独下载该库件的具体内容,请参考文章末尾部分。
4.SCoop库的主要的使用模板如下:
#include <SCoop.h>
void setup() {
mySCoop.start();
}
void loop() {
yield();
}
defineTaskLoop(Task1){
}
defineTaskLoop(Task2){
}
AI助手
5.线程1用于计时,线程2用于数码管的显示。
完整代码如下:
int s=0;//秒
int d=0;//分
int h=12;//时,这里定义了初始时间,即12:00
int dot=1;
int h1,h2,d1,d2;
int a[10][12]={
//1,A,F,2,3,B,E,D,H,C,G,4
{0,1,1,0,0,1,1,1,0,1,0,0},//0
{0,0,1,0,0,0,1,0,0,0,0,0},//1
{0,1,0,0,0,1,1,1,0,0,1,0},//2
{0,1,0,0,0,1,0,1,0,1,1,0},//3
{0,0,1,0,0,1,0,0,0,1,1,0},//4
{0,1,1,0,0,0,0,1,0,1,1,0},//5
{0,1,1,0,0,0,1,1,0,1,1,0},//6
{0,1,0,0,0,1,0,0,0,1,0,0},//7
{0,1,1,0,0,1,1,1,0,1,1,0},//8
{0,1,1,0,0,1,0,1,0,1,1,0},//9
};
#include <SCoop.h>
void setup() {
for (int i=2;i<=13;i++){
pinMode(i,OUTPUT);
mySCoop.start();
}
}
void loop() {
yield();
}
defineTaskLoop(Task1){
sleep(1000);
s++;
if (s>=60){
s=0;
d++;
if (d>=60){
d=0;
h++;
if (h>=24){
h=0;
}
}
}
if (dot==0){
dot++;
}
else{
dot--;
}
}
defineTaskLoop(Task2){
if (h<=9){
h1=0;
h2=h;
}
else{//取个位与十位
h1=h/10;
h2=h-h/10*10;
}
if (d<=9){
d1=0;
d2=d;
}
else{
d1=d/10;
d2=d-d/10*10;
}
run_clock(h1,h2,d1,d2);
}
void run_clock(int x,int y,int z,int j){
sleep(5);
interface(x,0);
sleep(5);
interface(y,1);
sleep(5);
interface(z,2);
sleep(5);
interface(j,3);
}
void interface(int x,int y){
switch(y){
case 0:
a[x][0]=0;
a[x][3]=1;
a[x][4]=1;
a[x][11]=1;
a[x][8]=0;
break;
case 1:
a[x][0]=1;
a[x][3]=0;
a[x][4]=1;
a[x][11]=1;
a[x][8]=dot;
break;
case 2:
a[x][0]=1;
a[x][3]=1;
a[x][4]=0;
a[x][11]=1;
a[x][8]=0;
break;
case 3:
a[x][0]=1;
a[x][3]=1;
a[x][4]=1;
a[x][11]=0;
a[x][8]=0;
break;
}
int j=0;
for (int i=2;i<=13;i++){
digitalWrite(i,a[x][j]);
j++;
}
}
AI助手
官方获取途径
全部评论 (0)
还没有任何评论哟~
