📄 dateandtime.lst
字号:
189 2 }
190 1 if((a!=0&&a!=1)&&b!=0) //number的个位不为0,十位不为0和1时的读音
191 1 {Voice[0]=VoiceTab[a]; //
192 2 Voice[1]=0x28 ; //
193 2 Voice[2]=VoiceTab[b]; //
194 2 Voice[3]=0xff ; //
195 2 }
196 1 }
197 /***语音报时************************************************************************/
198 void SpeakTime(void) //语音报时函数
199 {
200 1 unsigned char j,i=0 ;
201 1 Speak[i]=0x3c ; //报时前凑音
202 1 i++ ;
203 1 Speak[i]=0x2c ; //“现在时刻”
204 1 NumberToVoice(hour) ; //“小时”
205 1 for(j=0;j<5;j++)
206 1 { i++ ;
207 2 if(Voice[j]==0xff)
208 2 { Speak[i]=0x34 ; //“点”
209 3 break;
210 3 }
211 2 Speak[i]=Voice[j];
212 2 }
213 1 NumberToVoice(minute) ; //“分钟”
214 1 for(j=0;j<5;j++)
215 1 { i++ ;
216 2 if(Voice[j]==0xff)
217 2 { Speak[i]=0x38 ; //“分”
218 3 break ;
219 3 }
220 2 Speak[i]=Voice[j] ;
221 2 }
222 1 i++ ;
223 1 Speak[i]=0xff ; //报时结束标志
224 1 EX0=1 ; //INT0开中
225 1 IE0=1 ; //启动报时
226 1 Speak_sin=1 ; //报时标志置1
227 1 }
228 /***闹铃****************************************************************************/
229 void Ring(void)
230 {
231 1 if(Timer_Ring==1) //铃声1
232 1 P1=0x44 ;
233 1 if(Timer_Ring==2) //铃声2
234 1 P1=0x58 ;
235 1 if(Timer_Ring==3) //铃声3
236 1 P1=0x70 ;
237 1 Timer_sin=1 ; //表示进入闹铃状态
238 1 EX0=1 ; //INT0开中
239 1 IE0=1 ; //启动闹铃
240 1 }
241 /***日历和时间调整******************************************************************/
C51 COMPILER V7.50 DATEANDTIME 11/16/2008 10:58:45 PAGE 5
242 void Set_TimeAndDate(void)
243 {
244 1 unsigned char key;
245 1 EX1=0; //关闭INT1中断,停止计时
246 1 LCD_ShowMode(LCD_SHOW|LCD_CORSOR|LCD_FLASH); //开光标,光标闪烁
247 1 Year_set: LCD_GoToXY(2,1) ; //年校正
248 1 key=Key_Scan() ; //键盘扫描
249 1 if(key==1) goto Month_set ; //如果按下的是功能键(1号键),转月校正
250 1 if(key==2) year++ ; //如果按下的是加1 键(2号键),年加1
251 1 if(year==100) //年上限循环
252 1 year=0 ;
253 1 if(key==3) year-- ; //如果按下的是减1 键(3号键),年减1
254 1 if(year==-1) //年下限循环
255 1 year=99 ;
256 1 Leap_Year(year) ; //判断润年
257 1 LCD_GoToXY(2,1) ;
258 1 CharToStr(year) ; //将校正后的年数据转换成相对应的ASCII码
259 1 Delay1ms(50) ; //延时100ms
260 1 LCD_Print(DATA) ; //年显示刷新
261 1 goto Year_set ; //年校正循环
262 1
263 1 Month_set: LCD_GoToXY(5,1) ; //月校正
264 1 key=Key_Scan() ; //键盘扫描
265 1 if(key==1) goto Day_set ; //如果按下的是功能键(1号键),转日校正
266 1 if(key==2) month++ ; //如果按下的是加1 键(2号键),月加1
267 1 if(month==13) //月上限循环
268 1 month=1 ;
269 1 if(key==3) month-- ; //如果按下的是减1 键(3号键),月减1
270 1 if(month==0) //月下限循环
271 1 month=12 ;
272 1 CharToStr(month) ; //将校正后的月数据转换成相对应的ASCII码
273 1 Delay1ms(50) ; //延时100ms
274 1 LCD_Print(DATA) ; //月显示刷新
275 1 Momth_Days(month) ; //确定校正后,月的天数
276 1 goto Month_set ; //月校正循环
277 1
278 1 Day_set: LCD_GoToXY(8,1) ; //日校正
279 1 key=Key_Scan() ; //键盘扫描
280 1 if(key==1) goto Week_set ; //如果按下的是功能键(1号键),转时校正
281 1 if(key==2) day++ ; //如果按下的是加1 键(2号键),日加1
282 1 if(day==days) //日上限循环
283 1 day=1 ;
284 1 if(key==3) day-- ; //如果按下的是减1 键(3号键),日减1
285 1 if(day==0) //日下限循环
286 1 day=days-1 ;
287 1 CharToStr(day) ; //将校正后的日数据转换成相对应的ASCII码
288 1 Delay1ms(50) ; //延时100ms
289 1 LCD_Print(DATA) ; //日显示刷新
290 1 goto Day_set ; //日校正循环
291 1
292 1 Week_set: LCD_GoToXY(12,1) ; //星期调整
293 1 key=Key_Scan() ; //键盘扫描
294 1 if(key==1) goto Hour_set ; //如果按下的是功能键(1号键),转时校正
295 1 if(key==2) week++ ; //如果按下的是加1 键(2号键),星期加1
296 1 if(week==8) //星期上限循环
297 1 week=1 ;
298 1 if(key==3) week-- ; //如果按下的是减1 键(3号键),星期减1
299 1 if(week==0) //星期下限循环
300 1 week=7 ;
301 1 WeekToStr(week) ; //将校正后的星期数据转换成相对应的ASCII码
302 1 Delay1ms(50) ; //延时100ms
303 1 LCD_GoToXY(12,1) ; //定位到星期在LCD屏上的显示位置
C51 COMPILER V7.50 DATEANDTIME 11/16/2008 10:58:45 PAGE 6
304 1 LCD_Print(Week_Str) ; //星期显示刷新
305 1 goto Week_set ; //日和星期校正循环
306 1
307 1 Hour_set: LCD_GoToXY(0,2) ; //时校正
308 1 key=Key_Scan() ; //键盘扫描
309 1 if(key==1) goto Minute_set ; //如果按下的是功能键(1号键),转分校正
310 1 if(key==2) hour++ ; //如果按下的是加1 键(2号键),时加1
311 1 if(hour==24) //时上限循环
312 1 hour=0 ;
313 1 if(key==3) hour-- ; //如果按下的是减1 键(3号键),时减1
314 1 if(hour==-1) //时下限循环
315 1 hour=23 ;
316 1 CharToStr(hour) ; //将校正后的时数据转换成相对应的ASCII码
317 1 Delay1ms(50) ; //延时100ms
318 1 LCD_Print(DATA) ; //时显示刷新
319 1 goto Hour_set ; //时校正循环
320 1
321 1 Minute_set:LCD_GoToXY(3,2) ; //分校正
322 1 key=Key_Scan() ; //键盘扫描
323 1 if(key==1) goto RET ; //如果按下的是功能键(1号键),退出校正状态
324 1 if(key==2) minute++ ; //如果按下的是加1 键(2号键),分加1
325 1 if(minute==60) //分上限循环
326 1 minute=0 ;
327 1 if(key==3) minute-- ; //如果按下的是减1 键(3号键),分减1
328 1 if(minute==-1) //分下限循环
329 1 minute=59 ;
330 1 CharToStr(minute) ; //将校正后的分数据转换成相对应的ASCII码
331 1 Delay1ms(50) ; //延时100ms
332 1 LCD_Print(DATA) ; //分显示刷新
333 1 goto Minute_set ; //分校正循环
334 1
335 1 RET: EX1=1 ; //开INT1中断,开始计时
336 1 LCD_ShowMode(LCD_SHOW|LCD_NO_CORSOR|LCD_NO_FLASH); //关光标,光标不闪烁
337 1 }
338 /***定时器显示或设定****************************************************************/
339 void Timer_Show_Set(void)
340 {
341 1 unsigned char key ;
342 1 unsigned char w=10 ;
343 1 bit Timer_set_sin=0 ; //定时器设定标志,为1表示正处于定时器设定状态
344 1 Timer_Show_sin=1 ; //表示现在已处于定时器显示状态
345 1 LCD_Write(LCD_COM,LCD_CLEAR) ; //清屏
346 1 Delay1ms(50);
347 1 LCD_Print(" Timer") ; //在显示屏的第一行中间显示“Timer"
348 1 CharToStr(Timer_hour) ;
349 1 LCD_GoToXY(3,2) ; //定位到显示屏的第二行第四个字符
350 1 LCD_Print(DATA) ; //显示定时器的时钟
351 1 LCD_Print(":") ; //在定时器的时钟后显示“:”
352 1 CharToStr(Timer_minute) ;
353 1 LCD_Print(DATA) ; //显示定时器的分钟
354 1 LCD_Print(" ") ; //在定时器的分钟后空一格
355 1 if(Timer_ON_OFF==1) LCD_Print("1");//如果Timer_ON_OFF=1,则显示1,表示定时开
356 1 else
357 1 LCD_Print("0") ; //如果Timer_ON_OFF!=1,则显示0,表示定时关
358 1 LCD_Print(" ") ; //空一格
359 1 CharToStr(Timer_Ring) ; //将歌曲编号转换成相对应的ASCII码
360 1 LCD_Print(DATA) ; //显示歌曲编号
361 1 while(--w) //在定时器显示状态下,大约在2s内没有按下
362 1 { //功能键,就返回正常显示状态
363 2 Delay1ms(100) ;
364 2 key=Key_Scan() ;
365 2 if(key==1)
C51 COMPILER V7.50 DATEANDTIME 11/16/2008 10:58:45 PAGE 7
366 2 {Timer_set_sin=1;break;}
367 2 }
368 1
369 1 if(Timer_set_sin) //如果Timer_set_sim为1,则进入定时器设定状态
370 1 { LCD_ShowMode(LCD_SHOW|LCD_CORSOR|LCD_FLASH); //开光标,光标闪烁
371 2 T_hour_set:LCD_GoToXY(3,2) ; //定时器时设定
372 2 key=Key_Scan() ; //键盘扫描
373 2 if(key==1) goto T_minute_set ;//如果按下的是功能键(1号键),转定时器分设定
374 2 if(key==2) Timer_hour++ ; //如果按下的是加1 键(2号键),定时器时加1
375 2 if(Timer_hour==24) //时上限循环
376 2 Timer_hour=0 ;
377 2 if(key==3) Timer_hour-- ; //如果按下的是减1 键(3号键),定时器时减1
378 2 if(Timer_hour==-1) //时下限循环
379 2 Timer_hour=23 ;
380 2 LCD_GoToXY(3,2) ;
381 2 CharToStr(Timer_hour) ; //将校正后的定时器时数据转换成相对应的ASCII码
382 2 Delay1ms(50) ; //延时100ms
383 2 LCD_Print(DATA) ; //定时器时显示刷新
384 2 goto T_hour_set ; //定时器时设定循环
385 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -