?? main.lst
字號:
182 1 lcdWriteCommand(FuncDrawOn);
183 1 lcdWriteCommand(FunctionSetB);
184 1 }
185 /***************************************************************/
186 //功能:向LCD寫一個字符串
187 //輸入參數:行x,列y,每一位顯示時間speed,顯示字符串首地址msg
188 void lcdword (uchar X, Y, speed, uchar *msg)
189 {
190 1 if (X==0){ X=0x80;}
191 1 else if (X==1){ X=0x90;}
192 1 else if (X==2){ X=0x88;}
193 1 else if (X==3){ X=0x98;}
194 1 Y = X + Y;
195 1 lcdWriteCommand(Y);
196 1 while (*msg)
197 1 { lcdWriteData(*msg++);delayMs(speed);}
198 1 }
199 /***************************************************************/
200 //DS1302時鐘芯片相關的驅動程序
201 /***************************************************************/
202 //功能:DS1302寫入字節
203 void clock_out(uchar dd)
204 { uchar i,temp;
205 1 for ( i=8; i>0; i-- ) //循環8次移位
206 1 { temp=dd;
207 2 clock_dat=(bit)(temp&0x01); //每次傳輸低字節
208 2 dd>>=1; //右移一位
209 2 clock_clk=1; clock_clk=0;
210 2 }
211 1 }
212 /***************************************************************/
213 //功能:DS1302讀入字節
214 uchar clock_in(void)
215 { uchar i;
216 1 clock_dat=1;
217 1 for(i=8;i>0;i-- )
218 1 { ACC>>=1;a7=clock_dat;
219 2 clock_clk=1; clock_clk=0;
220 2 }
221 1 return(ACC);
222 1 }
223 /***************************************************************/
224 //功能:DS1302讀數據
225 uchar read_clock(uchar ord)
226 { uchar dd=0;
227 1 clock_clk=0;
228 1 clock_Rst=0;
229 1 clock_Rst=1;
230 1 clock_out(ord);
231 1 dd=clock_in();
232 1 clock_Rst=0;
233 1 clock_clk=1;
234 1 return(dd);
235 1 }
236 /***************************************************************/
237 //功能:DS1302寫數據
238 void write_clock(uchar ord, uchar dd)
239 { clock_clk=0;
240 1 clock_Rst=0;
241 1 clock_Rst=1;
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 5
242 1 clock_out(ord);
243 1 clock_out(dd);
244 1 clock_Rst=0;
245 1 clock_clk=1;
246 1 }
247 /***************************************************************/
248 //功能:年月日星期小時分秒的時鐘數據讀取
249 void read_clockS(void)
250 { ss = read_clock(0x81);//讀取秒數據
251 1 mm = read_clock(0x83);//讀取分鐘數據
252 1 hh = read_clock(0x85);//小時
253 1 dd = read_clock(0x87);//日
254 1 mo = read_clock(0x89);//月
255 1 xq = read_clock(0x8b);//星期
256 1 yy = read_clock(0x8d);//年
257 1 }
258 /***************************************************************/
259 //功能:設置1302的初始時間(2008年1月1日00時00分00秒星期二)
260 void Init_1302(void)
261 { uchar f;
262 1 if(read_clock(0xc1) != 0xaa)
263 1 { write_clock(0x8e,0x00);//允許寫操作
264 2 write_clock(0x8c,0x08);//年
265 2 write_clock(0x8a,0x02);//星期
266 2 write_clock(0x88,0x01);//月
267 2 write_clock(0x86,0x01);//日
268 2 write_clock(0x84,0x00);//小時
269 2 write_clock(0x82,0x00);//分鐘
270 2 write_clock(0x80,0x00);//秒
271 2 write_clock(0x90,0xa5);//充電
272 2 write_clock(0xc0,0xaa);//寫入初始化標志RAM(第00個RAM位置)
273 2 for(f=0;f<60;f=f+2)
274 2 { write_clock(0xc2+f,0x00); }//清除鬧鐘RAM位為0
275 2 write_clock(0x8e,0x80);//禁止寫操作
276 2 }
277 1 }
278 /***************************************************************/
279 //功能:公歷節日數據庫表
280 void Festival (void)
281 { //在屏幕第一行顯示節日
282 1 if(mo==0x01&&dd==0x01){lcdword(0,0,1," 新年快樂"); }//1月
283 1 else if( mo == 0x02 && dd == 0x10 ){ lcdword(0,0,1,"國際氣象日"); }//2月
284 1 else if( mo == 0x02 && dd == 0x14 ){ lcdword(0,0,1,"今天情人節"); }
285 1 else if( mo == 0x03 && dd == 0x08 ){ lcdword(0,0,1," 3.8婦女節"); } //3月
286 1 else if( mo == 0x03 && dd == 0x12 ){ lcdword(0,0,1," 植樹節 "); }
287 1 else if( mo == 0x03 && dd == 0x15 ){ lcdword(0,0,1,"國際消費日"); }
288 1 else if( mo == 0x04 && dd == 0x01 ){ lcdword(0,0,1," 愚人節 "); }//4
289 1 else if( mo == 0x04 && dd == 0x08 ){ lcdword(0,0,1," 復活節 "); }
290 1 else if( mo == 0x04 && dd == 0x22 ){ lcdword(0,0,1,"世界地球日"); }
291 1 else if( mo == 0x05 && dd == 0x01 ){ lcdword(0,0,1,"國際勞動節"); }//5
292 1 else if( mo == 0x05 && dd == 0x04 ){ lcdword(0,0,1,"中國青年節"); }
293 1 else if( mo == 0x05 && dd == 0x08 ){ lcdword(0,0,1," 紅十字日"); }
294 1 else if( mo == 0x05 && dd == 0x12 ){ lcdword(0,0,1,"國際護士節"); }
295 1 else if( mo == 0x05 && dd == 0x05 ){ lcdword(0,0,1,"近日母親節"); }
296 1 else if( mo == 0x05 && dd == 0x31 ){ lcdword(0,0,1,"世界無煙日"); }
297 1 else if( mo == 0x06 && dd == 0x01 ){ lcdword(0,0,1,"國際兒童節"); }//6
298 1 else if( mo == 0x06 && dd == 0x15 ){ lcdword(0,0,1,"近日父親節"); }
299 1 else if( mo == 0x07 && dd == 0x01 ){ lcdword(0,0,1,"香港回歸日"); }//7
300 1 else if( mo == 0x07 && dd == 0x07 ){ lcdword(0,0,1,"警!!國恥日"); }
301 1 else if( mo == 0x07 && dd == 0x11 ){ lcdword(0,0,1,"世界人口日"); }
302 1 else if( mo == 0x08 && dd == 0x01 ){ lcdword(0,0,1,"八一建軍節"); }//8
303 1 else if( mo == 0x08 && dd == 0x15 ){ lcdword(0,0,1,"戰勝日本日"); }
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 6
304 1 else if( mo == 0x09 && dd == 0x08 ){ lcdword(0,0,1,"國際掃盲日"); }//9
305 1 else if( mo == 0x09 && dd == 0x10 ){ lcdword(0,0,1,"中國教師節"); }
306 1 else if( mo == 0x09 && dd == 0x18 ){ lcdword(0,0,1,"!!9.18記念"); }
307 1 else if( mo == 0x09 && dd == 0x17 ){ lcdword(0,0,1,"國際和平日"); }
308 1 else if( mo == 0x10 && dd == 0x01 ){ lcdword(0,0,1," 國慶節 "); }//10
309 1 else if( mo == 0x10 && dd == 0x16 ){ lcdword(0,0,1,"世界糧食節"); }
310 1 else if( mo == 0x10 && dd == 0x24 ){ lcdword(0,0,1," 聯合國日"); }
311 1 else if( mo == 0x11 && dd == 0x10 ){ lcdword(0,0,1,"世界青年節"); }//11
312 1 else if( mo == 0x11 && dd == 0x28 ){ lcdword(0,0,1," 感恩節"); }
313 1 else if( mo == 0x12 && dd == 0x01 ){ lcdword(0,0,1,"世界艾滋日"); }//12
314 1 else if( mo == 0x12 && dd == 0x24 ){ lcdword(0,0,1,"今晚平安夜"); }
315 1 else if( mo == 0x12 && dd == 0x25 ){ lcdword(0,0,1," 圣誕快樂"); }
316 1 else if( mo == 0x12 && dd == 0x31 ){ lcdword(0,0,1," 明日新年"); }
317 1 //非節日時顯示時晨信息
318 1 else if ( hh >= 0x04 && hh < 0x06 ){ lcdword(0,0,1,"★★▲凌晨"); }
319 1 else if ( hh >= 0x06 && hh < 0x08 ){ lcdword(0,0,1,"☆○▲早晨"); }
320 1 else if ( hh >= 0x08 && hh < 0x12 ){ lcdword(0,0,1,"●▲▲上午"); }
321 1 else if ( hh == 0x12) { lcdword(0,0,1,"▲●▲中午"); }
322 1 else if ( hh >= 0x13 && hh < 0x18 ){ lcdword(0,0,1,"▲▲●下午"); }
323 1 else if ( hh >= 0x18 && hh < 0x22 ){ lcdword(0,0,1,"▲●☆晚上"); }
324 1 else if ( hh >= 0x22 && hh <=0x23 ){ lcdword(0,0,1,"★☆★夜里"); }
325 1 else if ( hh >= 0x00 && hh < 0x04 ){ lcdword(0,0,1,"★★★深夜"); }
326 1 }
327 /***************************************************************/
328 //功能:向LCM中填寫年
329 void lcm_w_yy(void)
330 { //if(read_clock(0x8d) != yy)
331 1 //{
332 1 yy=read_clock(0x8d); //讀取年
333 1 lcdword(1,0,1,"20"); //顯示20
334 1 lcdWriteData((yy/16)+0x30); //顯示年十位
335 1 lcdWriteData(yy%16+0x30); //顯示年個位
336 1 // }
337 1 }
338 /***************************************************************/
339 //向LCM中填寫月
340 void lcm_w_mo(void)
341 {
342 1 //if(read_clock(0x89) != mo)
343 1 //{
344 1 mo = read_clock(0x89); //讀取月
345 1 lcdWriteCommand(0x92);
346 1 lcdWriteData(0x16); //顯示“-”
347 1 if(mo/16!=0)
348 1 {lcdWriteData((mo/16)+0x30);} //顯示十位
349 1 else{lcdWriteData(0x20);} //十位為零則消隱
350 1 lcdWriteData(mo%16+0x30); //顯示月的個位
351 1 lcdWriteData(0x16); //顯示“-”
352 1 //}
353 1 }
354 /***************************************************************/
355 //功能:向LCD中填寫日數據
356 void lcm_w_dd(void)
357 {
358 1 //if(read_clock(0x87) != dd)
359 1 //{
360 1 dd = read_clock(0x87); //讀取日
361 1 lcdWriteCommand(0x94);
362 1 if(dd/16!= 0){lcdWriteData((dd/16)+0x30);} //顯示十位
363 1 else{lcdWriteData(0x20);} //十位為零則消隱
364 1 lcdWriteData(dd%16+0x30);
365 1 //}
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 7
366 1 }
367 /***************************************************************/
369 void lcm_w_xq(void)
370 {
371 1 unsigned char sel;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -