哥们儿们,伤不起啊,帮我看个DS1302的键盘程序,老闹心...

2019-07-16 05:33发布

这个问题伤不起啊,让我向各位娓娓道来,在进行时钟的调节的时候,向上加时钟的时候正常,加到max后就变成min了,例如调节分钟的时候加到59后,再摁下upkey就变00了,尼玛正常的很啊,有木有?可是向下调节时钟的时候,减到min后却不是max,而是15,是15啊,不管是调节分钟,小时,日,月,当减到00的时候,再摁下downkey后就变成15了,请各位大神指点迷津啊!
程序如下:
/**************************************************

  键盘程序

**************************************************/
void Key_process()
{
unsigned char item,item_e,address,set,max,min,mode;
if(modekey==0)
{
delay1ms(15);
if(modekey==0)
{
  mode++;
  if(mode>1)mode=0;
}
while(!modekey);
}
if(mode==0)
(*disp)=Day_Display;
else (*disp)=Month_Display;

if(setkey==0)
{
  delay1ms(15);
  if(setkey==0)
  { set++;
  if(set>2)set=1;
  if((set==2)&&(mode==1))  {address=0x88; max=12;min=0;}  //月
  if((set==1)&&(mode==1))  {address=0x86; max=30;min=0;}    //日
  if((set==2)&&(mode==0))  {address=0x84; max=23;min=0;}    //小时
  if((set==1)&&(mode==0))  {address=0x82; max=59;min=0;}    //分钟
  
  }
  while(!setkey);
  }
if(upkey==0)
  {
  delay1ms(15);
   if(upkey==0){
  item_e=(ReadSetFromDS1302(address+1));                //读取1302某地址上的数值转换成10进制赋给item
  item=((item_e&0x70)>>4)*10 + (item_e&0x0F);
  item++;
  if(item>max)item=min;
  item_e=((item/10)<<4|(item%10)) ;     //10进制 to 16进制      
WriteDataSetDS1302(0x8e,0x00);        //允许写操作
WriteDataSetDS1302(address,item_e);    //写修改后的数据到1302
WriteDataSetDS1302(0x8e,0x80);
}
while(!upkey);
  }
if(downkey==0)
  {
   delay1ms(15);
if(downkey==0)
{
  item_e=(ReadSetFromDS1302(address+1));                //读取1302某地址上的数值转换成10进制赋给item
  item=((item_e&0x70)>>4)*10 + (item_e&0x0F);
  item--;
  if(item<0)item=max;
  item_e=((item/10)<<4|(item%10)) ;     //10进制 to 16进制      
WriteDataSetDS1302(0x8e,0x00);        //允许写操作
WriteDataSetDS1302(address,item_e);    //写修改后的数据到1302
WriteDataSetDS1302(0x8e,0x80);
  }
  while(!downkey);
  }

(*disp)();
   }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。