本帖最后由 Grooove 于 2016-11-25 00:38 编辑
大家好,最近想制作一个小时钟。购入pfc8563.连接到uno使用Rtc_Pcf8563库,串口输出时间都正常。然后想让时间在数码管显示。
因为是新手,想先让4段数码管的1段显示,再慢慢深入。
使用getSecond函数获取秒,小于10的就输出到数码管。但是出现的问题是数码管的e段总是不能正常显示,一般情况是无法显示(反正没找到规律),但是,如果用循环从0到9都能正常显示。找了一晚上都不知道问题在哪。求指教!
获取时间输出到数码管: - int ledPin[7] = {11,7,4,2,1,10,5};//分别对应a,b,c,d,e,f,g
- //从0到9
- int numbers[10][7] = {
- {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[k],numbers[n][k]);
- }
- }
- //引入库文件
- #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[7] = {11,7,4,2,1,10,5};//分别对应a,b,c,d,e,f,g
- int comPin[4] = {12,9,8,6};//4个公共阳极
- int numbers[10][7] = {
- {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[k],numbers[num][k]);
- }
- 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);
- }
- }
复制代码 |