Grooove 发表于 2016-11-25 00:36:12

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

本帖最后由 Grooove 于 2016-11-25 00:38 编辑

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

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

void setup() {
Serial.begin(9600);
//初始化时钟
rtc.initClock();
//设置时间
//时,分,秒
rtc.setTime(21,50,0);
//初始化针脚
for(int i=1;i<=12;i++){
    pinMode(i,OUTPUT);
}
digitalWrite(12,HIGH);//只利用1段,12为共阳极
}

void loop() {
int second = rtc.getSecond();
if(second<10){
    show(second);
}

}

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

void show(int num,int dela){
digitalWrite(12,HIGH);
for(int k=0;k<7;k++){
      digitalWrite(ledPin,numbers);
      }
delay(dela);
}

void setup() {
for(int i=1;i<=12;i++){
    pinMode(i,OUTPUT);
}
}

void loop() {
for(int n=0;n<10;n++){
    show(n,1000);
}
}

单片机菜鸟 发表于 2016-11-27 18:26:26

你应该贴个图出来然后既然你循环显示正常那就证明硬件是没有问题那么问题就是你的软件了 可以尝试用个串口打印一下数据 second 看看

单片机菜鸟 发表于 2016-11-27 18:27:20

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

再者 应该有个延时吧
页: [1]
查看完整版本: Uno从8563获取时间输出到数码管问题