极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11930|回复: 2

Uno从8563获取时间输出到数码管问题

[复制链接]
发表于 2016-11-25 00:36:12 | 显示全部楼层 |阅读模式
本帖最后由 Grooove 于 2016-11-25 00:38 编辑

大家好,最近想制作一个小时钟。购入pfc8563.连接到uno使用Rtc_Pcf8563库,串口输出时间都正常。然后想让时间在数码管显示。
因为是新手,想先让4段数码管的1段显示,再慢慢深入。
使用getSecond函数获取秒,小于10的就输出到数码管。但是出现的问题是数码管的e段总是不能正常显示,一般情况是无法显示(反正没找到规律),但是,如果用循环从0到9都能正常显示。找了一晚上都不知道问题在哪。求指教!

获取时间输出到数码管:
  1. int ledPin[7] = {11,7,4,2,1,10,5};//分别对应a,b,c,d,e,f,g
  2. //从0到9
  3. int numbers[10][7] = {
  4.   {0,0,0,0,0,0,1},//0
  5.   {1,0,0,1,1,1,1},//1
  6.   {0,0,1,0,0,1,0},//2
  7.   {0,0,0,0,1,1,0},//3
  8.   {1,0,0,1,1,0,0},//4
  9.   {0,1,0,0,1,0,0},//5
  10.   {0,1,0,0,0,0,0},//6
  11.   {0,0,0,1,1,1,1},//7
  12.   {0,0,0,0,0,0,0},//8
  13.   {0,0,0,0,1,0,0}//9
  14.   };
  15. //数码管显示
  16. void show(int n){
  17.   for(int k=0;k<7;k++){
  18.     digitalWrite(ledPin[k],numbers[n][k]);
  19.   }
  20. }
  21. //引入库文件
  22. #include <Wire.h>
  23. #include <Rtc_Pcf8563.h>
  24. Rtc_Pcf8563 rtc;

  25. void setup() {
  26.   Serial.begin(9600);
  27.   //初始化时钟
  28.   rtc.initClock();
  29.   //设置时间
  30.   //时,分,秒
  31.   rtc.setTime(21,50,0);
  32.   //初始化针脚
  33.   for(int i=1;i<=12;i++){
  34.     pinMode(i,OUTPUT);
  35.   }
  36.   digitalWrite(12,HIGH);//只利用1段,12为共阳极
  37. }

  38. void loop() {
  39.   int second = rtc.getSecond();
  40.   if(second<10){
  41.     show(second);
  42.   }

  43. }
复制代码


单纯从1到9输出到数码管:
  1. //设置针脚和数字数组
  2. int ledPin[7] = {11,7,4,2,1,10,5};//分别对应a,b,c,d,e,f,g
  3. int comPin[4] = {12,9,8,6};//4个公共阳极
  4. int numbers[10][7] = {
  5.   {0,0,0,0,0,0,1},//0
  6.   {1,0,0,1,1,1,1},//1
  7.   {0,0,1,0,0,1,0},//2
  8.   {0,0,0,0,1,1,0},//3
  9.   {1,0,0,1,1,0,0},//4
  10.   {0,1,0,0,1,0,0},//5
  11.   {0,1,0,0,0,0,0},//6
  12.   {0,0,0,1,1,1,1},//7
  13.   {0,0,0,0,0,0,0},//8
  14.   {0,0,0,0,1,0,0}//9
  15.   };

  16. void show(int num,int dela){
  17.   digitalWrite(12,HIGH);
  18.   for(int k=0;k<7;k++){
  19.         digitalWrite(ledPin[k],numbers[num][k]);
  20.       }
  21.   delay(dela);
  22. }

  23. void setup() {
  24.   for(int i=1;i<=12;i++){
  25.     pinMode(i,OUTPUT);
  26.   }
  27. }

  28. void loop() {
  29.   for(int n=0;n<10;n++){
  30.     show(n,1000);
  31.   }
  32. }
复制代码
回复

使用道具 举报

发表于 2016-11-27 18:26:26 | 显示全部楼层
你应该贴个图出来  然后既然你循环显示正常那就证明硬件是没有问题  那么问题就是你的软件了 可以尝试用个串口打印一下数据 second 看看
回复 支持 反对

使用道具 举报

发表于 2016-11-27 18:27:20 | 显示全部楼层
单片机菜鸟 发表于 2016-11-27 18:26
你应该贴个图出来  然后既然你循环显示正常那就证明硬件是没有问题  那么问题就是你的软件了 可以尝试用个 ...

再者 应该有个延时吧
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 09:51 , Processed in 0.045679 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表