[讨论] 关于DS1302,怎么实现不了按键加数的功能,其他能正常运行

张永标张标   2012-9-16 14:28 楼主
#include
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char code duan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
unsigned char code wei[]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};
unsigned char temp[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
uchar timedata[7]={10,6,4,17,11,58,30}; //年周月日时分秒
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//写时间地址
uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//读时间地址
sbit P20=P2^0;
sbit P21=P2^1;
sbit P35=P3^5;
sbit sck=P0^0;
sbit io=P0^1;
sbit rst=P0^2;
sbit P30=P3^0;
sbit P32=P3^2;
uchar num=0;
uchar flag=0;
void delay(int z)
{
  int x,y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void write_byte(uchar dat)//写一个字节
{
  uchar i;
  for(i=0;i<8;i++)
  {
     sck=0;
     io=dat&0x01;
     dat=dat>>1;
     sck=1;
  }
}
void write(uchar add,uchar date)//写一个地址,写一个数据
{
rst=0;
_nop_();
sck=0;
_nop_();                 
rst=1;
//_nop_();
write_byte(add);
write_byte(date);
rst=0;
_nop_();
sck=0;
_nop_();
sck=1;
io=1;
}
uchar read(uchar a)// 写入一个地址,读出一个数据
{
  uchar i,value;
  rst=0;
_nop_();
sck=0;
_nop_();                 
rst=1;
//_npo_();
write_byte(a);
for(i=0;i<8;i++)
{
        value=value>>1;
    sck=0;
   //    value=value>>1;
    if(io)
    {
    value=value|0x80;
    }
    sck=1;     
}
rst=0;
_nop_();
sck=0;
_nop_();
sck=1;
io=1;
return value;
}
void settime()//设定时间
{               
  uchar i,j;
  for(i=0;i<7;i++)     //bcd转化
  {
   j=timedata/10;
   timedata=timedata%10;
   timedata=timedata+j*16;
  }
   write(0x8e,0x00); //去除写保护
   for(i=0;i<7;i++)
   {
     write(write_add,timedata);
   }
    write(0x8e,0x80); //写保护
}
void readtime()//读出时间
{
   uchar i;
  for(i=0;i<7;i++)
  {
   timedata=read(read_add);
  }
}
void time_pros(void)//BCD处理,两个显示内容
{
  if(num==1)
  {
temp[0]=duan[timedata[6]/16];
temp[1]=duan[timedata[6]%16];
temp[2]=duan[10];
temp[3]=duan[timedata[2]/16];
temp[4]=duan[timedata[2]%16];
temp[5]=duan[10];
temp[6]=duan[timedata[3]/16];
temp[7]=duan[timedata[3]%16];
  }
  else
  {
temp[0]=duan[timedata[4]/16];
temp[1]=duan[timedata[4]%16];
temp[2]=duan[10];
temp[3]=duan[timedata[5]/16];
temp[4]=duan[timedata[5]%16];
temp[5]=duan[10];
temp[6]=duan[timedata[6]/16];
temp[7]=duan[timedata[6]%16];
}
}
void dis() //数码管显示
{
uchar i;

  for(i=0;i<8;i++)
   {
      P1=0xff;
     P20=1;
     P20=0;
    P1=wei;
     P21=1;
     P21=0;
     P1=temp;
    P20=1;
    P20=0;
    delay(3);
   }
}
void key()//按键切换内容
{
// uchar num;
  if(!P30)
  {
   delay(10);
   if(!P30)
   {
     while(!P30);
     num++;
     if(num==2)
     {
     num=0;
     }
   }
  }
}     
void key_key()//按键加数
{
  if(!P32)
  {
  delay(10);
  if(!P32)
  {
    while(!P32);
    timedata[6]++;
    flag=1;
  }
  }
}
void main()
{
  settime();
  P35=0;//点阵熄灭
  while(1)
  { key_key();
   if(flag)
   {  flag=0;
     settime();
   }
   readtime();
   key();
   
   time_pros();
   //display(0,8);
   dis();
  }
}

回复评论 (1)

请问楼主用的是什么开发板
点赞  2017-6-5 18:40
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复