ds1302时钟在数码管上能正常显示,但是不能用独立按键对数码管的时间进行调整
#include "reg52.h"
#include "ds1302.h"
#include "absacc.h"
sbit S5=P3^2;
sbit S4=P3^3;
unsigned char Write_Ds1302_adss[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char Read_Ds1302_adss[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
unsigned char SMGByte_NoDot[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char SMGByte[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unsigned char Time[7]={0x55,0x59,0x23,0x25,0x11,0x06,0x23};
void Write_Ds1302_data()
{
unsigned char i;
Write_Ds1302_Byte(0x8e,0x00);
for(i=0;i<7;i++)
{
Write_Ds1302_Byte(Write_Ds1302_adss[i],Time[i]);
}
Write_Ds1302_Byte(0x8e,0x80);
}
void Read_Ds1302_data()
{
unsigned char i;
for(i=0;i<7;i++)
{
Time[i]=Read_Ds1302_Byte(Read_Ds1302_adss[i]);
}
}
void SelectHC138(unsigned char n)
{
switch(n)
{
case 4:
P2=(P2&0x1f)|0x80;
break;
case 5:
P2=(P2&0x1f)|0xa0;
break;
case 6:
P2=(P2&0x1f)|0xc0;
break;
case 7:
P2=(P2&0x1f)|0xe0;
break;
}
}
void delay(int xms)
{
unsigned char i, j;
while(xms--){
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void InitSmg(unsigned char pos,unsigned char dat)
{
SelectHC138(7);
P0=0xff;
SelectHC138(6);
P0=0x01<SelectHC138(7) ;
P0=dat;
}
void Smg_ShowTime()
{
InitSmg(0,SMGByte_NoDot[Time[2]/16]);
delay(10);
InitSmg(1,SMGByte_NoDot[Time[2]%16]);
delay(10);
InitSmg(2,0xbf);
delay(10);
InitSmg(3,SMGByte_NoDot[Time[1]/16]);
delay(10);
InitSmg(4,SMGByte_NoDot[Time[1]%16]);
delay(10);
InitSmg(5,0xbf);
delay(10);
InitSmg(6,SMGByte_NoDot[Time[0]/16]);
delay(10);
InitSmg(7,SMGByte_NoDot[Time[0]%16]);
delay(10);
}
void Keycol()
{
if(S5==0)
{
delay(100);
if(S5==0)
{
if((Time[2]&0x0f)>9)
Time[2]=Time[2]+1+6;
else
Time[2]=Time[2]++;
}
}
else if(S4==0)
{
delay(100);
if(S4==0)
{
if((Time[1]&0x0f)>9)
Time[1]=Time[2]+1+6;
else
Time[1]++;
}
}
}
void main()
{
Write_Ds1302_data();
while(1)
{
Read_Ds1302_data();
Smg_ShowTime();
Keycol();
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话: