#include <DS1302.h>
uint8_t CE_PIN = 14;
uint8_t IO_PIN = 15;
uint8_t SCLK_PIN = 16;
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
//设置数码管阴极接口
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
//设置各位数码管位选通引脚COM引脚
int com1 = 8;
int com2 = 9;
int com3 = 10;
int com4 = 11;
int com5 = 12;
int com6 = 13;
void digital_0( ) //显示数字0
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void digital_1( ) //显示数字1
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void digital_2( ) //显示数字2
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
}
void digital_3( ) //显示数字3
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
}
void digital_4( ) //显示数字4
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void digital_5( ) //显示数字5
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void digital_6( ) //显示数字6
{
digitalWrite(a, HIGH );
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g, LOW);
}
void digital_7 ( ) //显示数字7
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c,LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void digital_8( ) //显示数字8
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void digital_9( ) //显示数字9
{
digitalWrite(a, LOW );
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d,LOW);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void digital_off( )//全灭
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void pickDcom(int x) //导通指定COM阳极引脚
{
digitalWrite(com1, LOW);
digitalWrite(com2, LOW);
digitalWrite(com3, LOW);
digitalWrite(com4, LOW);
digitalWrite(com4, LOW);
digitalWrite(com6, LOW);
switch(x)
{
case 1:
digitalWrite(com1, HIGH); //导通第一位数码管的位选通引脚
break;
case 2:
digitalWrite(com2, HIGH); //导通第二位数码管的位选通引脚
break;
case 3:
digitalWrite(com3, HIGH); //导通第三位数码管的位选通引脚
break;
default:
digitalWrite(com4, HIGH); //导通第四位数码管的位选通引脚
break;
}
}
void setup()
{ for(int i=1;i<16;i++)
{ pinMode(i, OUTPUT); }
rtc.write_protect(false);//解除1302芯片写保护
rtc.halt(false);//关闭涓流充电
Time t(2009, 5, 19, 21, 16, 37, 3);//设置芯片时间:Tuesday, May 19, 2009 at 21:16:37.
rtc.time(t);//将时间写入芯片
}
void loop()
{ digital_off( );
Time t = rtc.time(); /* 从 DS1302 获取当前时间 */
pickDcom(1);//选通第一位数码管的COM脚,显示小时的第一位
switch (t.hr/10)
{
case 1: digital_1( ); break;
case 2: digital_2( ); break;
}
digital_off( );
switch (t.hr%10)
{
case 1: digital_1( ); break;
case 2: digital_2( ); break;
case 3: digital_3( ); break;
case 4: digital_4; break;
}
delay(1000);
}
不知道这样可以不? |