这个问题伤不起啊,让我向各位娓娓道来,在进行时钟的调节的时候,向上加时钟的时候正常,加到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)();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>