while(modeFlag!=0) //½øÈëµ÷½Úģʽ£¬Ö±µ½»Ö¸´Õý³£Ä£Ê½ { key=Key_Scan(); if (key!=0xFF) //Èç¹û¼ì²âµ½ADD/DEC°´¼ü°´Ï { switch(modeFlag) { case 1: //µ÷Äê if((key==KEY_ADD)&&(cur_time_buf[1]<99)) cur_time_buf[1]++; else if((key==KEY_DEC)&&(cur_time_buf[1]>0)) cur_time_buf[1]--; LCD_Clear(); sprintf(display_data,"20%2d",(int)cur_time_buf[1]); LCD_Write_String(0,0,display_data);//ÏÔʾÄê Ds1302_Write_Time(); break; case 2: //µ÷Ô if((key==KEY_ADD)&&(cur_time_buf[2]<12)) cur_time_buf[2]++; else if((key==KEY_DEC)&&(cur_time_buf[2]>1)) cur_time_buf[2]--; LCD_Clear(); sprintf(display_data,"%2d",(int)cur_time_buf[2]); LCD_Write_String(5,0,display_data);//ÏÔʾÔ Ds1302_Write_Time(); break; case 3: //µ÷ÈÕ if((key==KEY_ADD)&&(cur_time_buf[3]<31)) cur_time_buf[3]++; else if((key==KEY_DEC)&&(cur_time_buf[3]>1)) cur_time_buf[3]--; LCD_Clear(); sprintf(display_data,"%2d",(int)cur_time_buf[3]); LCD_Write_String(8,0,display_data);//ÏÔʾÈÕ Ds1302_Write_Time(); break; case 4: //µ÷ʱ if((key==KEY_ADD)&&(cur_time_buf[4]<23)) cur_time_buf[4]++; else if((key==KEY_DEC)&&(cur_time_buf[4]>0)) cur_time_buf[4]--; LCD_Clear(); sprintf(display_data,"%2d",(int)cur_time_buf[4]); LCD_Write_String(11,0,display_data);//ÏÔʾʱ Ds1302_Write_Time(); break; case 5: //µ÷·Ö if((key==KEY_ADD)&&(cur_time_buf[5]<59)) cur_time_buf[5]++; else if((key==KEY_DEC)&&(cur_time_buf[5]>0)) cur_time_buf[5]--; LCD_Clear(); sprintf(display_data,"%2d",(int)cur_time_buf[5]); LCD_Write_String(14,0,display_data);//ÏÔʾ·Ö Ds1302_Write_Time(); break;
时间: 2024-02-29 21:55:10 浏览: 66
这段代码是一段while循环,用于实现时间的设置。modeFlag是一个表示当前设置时间的模式的变量,初始值不为0。在while循环中,首先调用Key_Scan函数扫描是否有按键被按下,如果是,则根据不同的模式进行设置。具体来说:
- 如果当前模式是1,表示设置年份的十位数,当ADD键按下并且当前时间的十位数小于99时,十位数加1;当DEC键按下并且十位数大于0时,十位数减1。然后在LCD上显示当前时间的年份,并且将时间写入DS1302实时时钟。
- 如果当前模式是2,表示设置月份,操作类似于设置年份的十位数。
- 如果当前模式是3,表示设置日期,操作类似于设置年份的十位数。
- 如果当前模式是4,表示设置小时,操作类似于设置年份的十位数。
- 如果当前模式是5,表示设置分钟,操作类似于设置年份的十位数。
在每一次按键操作后,LCD上会清除原来的时间显示并显示新的时间,并将新的时间写入DS1302实时时钟。这样就实现了时间的设置功能。
阅读全文