Advertisement

Arduino实战小项目: 数字时钟制作

阅读量:

前言:

利用5641AS型四位数码管掌握控制方式;另外也顺便记录了Arduino线程的操作流程;同时制作了一个简易的数字电子计时器。

效果如下:

目录

前言:

主要材料:

5641AS四位数码管管脚图:

数码管与nano的接线图:

说明:

完整代码如下:

线程库下载地址


主要材料:

Arduino nano

5641AS四位数码管

5641AS四位数码管管脚图:

数码管与nano的接线图:

说明:

说明:

1.数码灯管的控制其本身还是一个开关量的控制。

  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)

还没有任何评论哟~