?? wannianli.lst
字號:
228 2 DQ = 0; // 給脈沖信號
229 2 dat>>=1;
230 2 DQ = 1; // 給脈沖信號
231 2 if(DQ)
232 2 dat|=0x80;
233 2 Delay(4);
234 2 }
235 1 return(dat);
236 1 }
237 /******************************************************************************/
238 void WriteOneChar(unsigned char dat)//寫一個字節
239 {
240 1 unsigned char i=0;
241 1 for (i=8; i>0; i--)
C51 COMPILER V6.12 WANNIANLI 07/04/2007 21:12:52 PAGE 5
242 1 {
243 2 DQ = 0;
244 2 DQ = dat&0x01;
245 2 Delay(5);
246 2 DQ = 1;
247 2 dat>>=1;
248 2 }
249 1 }
250 /******************************************************************************/
251 unsigned int ReadTemperature(void)//讀取溫度
252 {
253 1 unsigned char a=0;
254 1 unsigned char b=0;
255 1 unsigned int t=0;
256 1 float tt=0;
257 1 Init_DS18B20();
258 1 WriteOneChar(0xCC); // 跳過讀序號列號的操作
259 1 WriteOneChar(0x44); // 啟動溫度轉換
260 1 Init_DS18B20();
261 1 WriteOneChar(0xCC); //跳過讀序號列號的操作
262 1 WriteOneChar(0xBE); //讀取溫度寄存器
263 1 a=ReadOneChar(); //讀低8位
264 1 b=ReadOneChar(); //讀高8位
265 1 t=b;
266 1 t<<=8;
267 1 t=t|a;
268 1 tt=t*0.0625;
269 1 t= tt*10+0.5; //放大10倍輸出并四舍五入
270 1 return(t);
271 1 }
272 /******************************************************************************/
273 uchar printTemperature(void){//寫一個字節
274 1 unsigned int i=0;
275 1 unsigned char a=0,b=0,c=0;
276 1 i=ReadTemperature();//讀溫度并送顯
277 1 a=i/100;
278 1 b=i/10-a*10;
279 1 i = a*10 + b;
280 1 return i;
281 1 }
282 /**********************************************************************************************/
283 void Beeplll(void){//BELL 鬧鐘聲音
284 1 uint a;//定義變量用于發聲的長度設置
285 1 Led_EA = 1;//關列顯示驅動,防止屏幕出現亂碼
286 1 for(a=2500;a>0;a--){//第一個聲音的長度
287 2 Bell_Out = ~Bell_Out;//取反揚聲器驅動口,以產生音頻
288 2 Delay(10);//音調設置延時
289 2 }
290 1 for(a=100;a>0;a--){//同上
291 2 Bell_Out = ~Bell_Out; //
292 2 Delay(6);//音調設置延時
293 2 }
294 1 Bell_Out = 1;
295 1 }
296 /**********************************************************************************************/
297 void Beep(void){//BELL-揚聲器--整點報時
298 1 uchar a;//定義變量用于發聲的長度設置
299 1 Led_EA = 1;//關列顯示驅動,防止屏幕出現亂碼
300 1 for(a=60;a>0;a--){//第一個聲音的長度
301 2 Bell_Out = ~Bell_Out;//取反揚聲器驅動口,以產生音頻
302 2 Delay(100);//音調設置延時
303 2 }
C51 COMPILER V6.12 WANNIANLI 07/04/2007 21:12:52 PAGE 6
304 1 for(a=100;a>0;a--){//同上
305 2 Bell_Out = ~Bell_Out;
306 2 Delay(80);//
307 2 }
308 1 for(a=100;a>0;a--){//同上
309 2 Bell_Out = ~Bell_Out;
310 2 Delay(30);//
311 2 }
312 1 }
313 /**********************************************************************************************/
314 void Beep_set(void){//BELL -揚聲器--確定設置
315 1 uchar a;//定義變量用于發聲的長度設置
316 1 Led_EA = 1;//關列顯示驅動,防止屏幕出現亂碼
317 1 for(a=250;a>0;a--){//第一個聲音的長度
318 2 Bell_Out = ~Bell_Out;//取反揚聲器驅動口,以產生音頻
319 2 Delay(20);//音調設置延時
320 2 }
321 1 for(a=100;a>0;a--){//同上
322 2 Bell_Out = ~Bell_Out;
323 2 Delay(80);//
324 2 }
325 1 }
326 /**********************************************************************************************/
327 void Beep_key(void){//-揚聲器--按鍵音
328 1 uchar a;//定義變量用于發聲的長度設置
329 1 Led_EA = 1;//關列顯示驅動,防止屏幕出現亂碼
330 1 for(a=100;a>0;a--){//聲音的長度
331 2 Bell_Out = ~Bell_Out;
332 2 Delay(50);//音調設置延時
333 2 }
334 1 }
335 /**********************************************************************************************/
336 void clock_out(unsigned char dd){ //-1302驅動程序(底層協議)
337 1 ACC=dd;
338 1 clock_dat=a0; clock_clk=1; clock_clk=0;
339 1 clock_dat=a1; clock_clk=1; clock_clk=0;
340 1 clock_dat=a2; clock_clk=1; clock_clk=0;
341 1 clock_dat=a3; clock_clk=1; clock_clk=0;
342 1 clock_dat=a4; clock_clk=1; clock_clk=0;
343 1 clock_dat=a5; clock_clk=1; clock_clk=0;
344 1 clock_dat=a6; clock_clk=1; clock_clk=0;
345 1 clock_dat=a7; clock_clk=1; clock_clk=0;
346 1 }
347 /**********************************************************************************************/
348 unsigned char clock_in(void){ //-DS1302寫入字節(底層協議)
349 1 clock_dat=1;
350 1 a0=clock_dat;
351 1 clock_clk=1; clock_clk=0; a1=clock_dat;
352 1 clock_clk=1; clock_clk=0; a2=clock_dat;
353 1 clock_clk=1; clock_clk=0; a3=clock_dat;
354 1 clock_clk=1; clock_clk=0; a4=clock_dat;
355 1 clock_clk=1; clock_clk=0; a5=clock_dat;
356 1 clock_clk=1; clock_clk=0; a6=clock_dat;
357 1 clock_clk=1; clock_clk=0; a7=clock_dat;
358 1 return(ACC);
359 1 }
360 /**********************************************************************************************/
361 uchar read_clock(uchar ord){ //-DS1302讀數據(底層協議)
362 1 uchar dd=0;
363 1 clock_clk=0;
364 1 clock_Rst=0;
365 1 clock_Rst=1;
C51 COMPILER V6.12 WANNIANLI 07/04/2007 21:12:52 PAGE 7
366 1 clock_out(ord);
367 1 dd=clock_in();
368 1 clock_Rst=0;
369 1 clock_clk=1;
370 1 return(dd);
371 1 }
372 /**********************************************************************************************/
373 void write_clock(uchar ord, uchar dd){ //-DS1302寫數據(底層協議)
374 1 clock_clk=0;
375 1 clock_Rst=0;
376 1 clock_Rst=1;
377 1 clock_out(ord);
378 1 clock_out(dd);
379 1 clock_Rst=0;
380 1 clock_clk=1;
381 1 }
382 /**********************************************************************************************/
383 void Set_time(unsigned char sel,unsigned char a){ //根據選擇調整的相應項目加1并寫入DS1302-調時用加1程序
384 1 signed char address,item;
385 1 signed char max,mini;
386 1 //if(sel==7) {address=0x80; max=0;mini=0;} //秒7
387 1 if(sel==6) {address=0x82; max=59;mini=0;} //分鐘6
388 1 if(sel==5) {address=0x84; max=23;mini=0;} //小時5
389 1 if(sel==3) {address=0x86; max=31;mini=1;} //日3
390 1 if(sel==2) {address=0x88; max=12;mini=1;} //月2
391 1 if(sel==1) {address=0x8c; max=99; mini=0;} //年1
392 1 if(sel==4) {address=0x8a; max=7;mini=1;} //星期4
393 1 if(sel==200) {address=0xc2+a*6; max=6;mini=0;} //MODE
394 1 if(sel==201) {address=0xc2+a*6+2; max=23;mini=0;} //星期4
395 1 if(sel==202) {address=0xc2+a*6+4; max=59;mini=0;} //星期4
396 1
397 1 //讀取1302某地址上的數值轉換成10進制賦給item
398 1 item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
399 1 if(Add_Key == 0){ key_off ();//等待鍵放開
400 2 item++;//數值加1
401 2 Beep_key();//調時提示音
402 2 }
403 1 if(Add2_Key == 0){ key_off ();//等待鍵放開
404 2 item--;//數值減1
405 2 Beep_key();//調時提示音
406 2 }
407 1 if(item>max) item=mini;//查看數值有效范圍
408 1 if(item<mini) item=max;
409 1 write_clock(0x8e,0x00);//允許寫操作
410 1 write_clock(address,(item/10)*16+item%10);//轉換成16進制寫入1302
411 1 if(sel == 6 && (Add_Key == 0 || Add2_Key == 0)){
412 2 write_clock(0x80,0x00);//秒值=0
413 2 }
414 1 write_clock(0x8e,0x80);//寫保護,禁止寫操作
415 1 }
416 /**********************************************************************************************/
417 void Init_1302(void){//-設置1302的初始時間(2007年1月1日00時00分00秒星期一)
418 1 uchar f;
419 1 if(read_clock(0xc1) != 0xaa){
420 2 write_clock(0x8e,0x00);//允許寫操作
421 2 write_clock(0x8c,0x07);//年
422 2 write_clock(0x8a,0x01);//星期
423 2 write_clock(0x88,0x01);//月
424 2 write_clock(0x86,0x01);//日
425 2 write_clock(0x84,0x00);//小時
426 2 write_clock(0x82,0x00);//分鐘
427 2 write_clock(0x80,0x00);//秒
C51 COMPILER V6.12 WANNIANLI 07/04/2007 21:12:52 PAGE 8
428 2 write_clock(0x90,0xa5);//充電
429 2 write_clock(0xc0,0xaa);//寫入初始化標志RAM(第00個RAM位置)
430 2 for(f=0;f<60;f=f+2){//清除鬧鐘RAM位為0
431 3 write_clock(0xc2+f,0x00);
432 3 }
433 2 write_clock(0x8e,0x80);//禁止寫操作
434 2 }
435 1 }
436 /**********************************************************************************************/
437 void clearRAM (void){//寄存器清空函數-32個寄存器清空(0x00)
438 1 uchar a;//定義變量用于清空數據指針
439 1 for(a=0;a<32;a++){//指向32個寄存器
440 2 Ledplay[a] = 0;//將指向的寄存器清空
441 2 }
442 1 }
443 /**********************************************************************************************/
444 void putin (uchar u){//字符載入函數-將字符裝入顯示寄存器
445 1 uchar a = 0;//定義變量用于數據提取指針
446 1 do{
447 2 Ledplay[bn] = no[u][a];//將二維數組中的一組數據放入顯示緩沖區
448 2 a++;//換下一個提取字節
449 2 bn++;//換下一個顯示緩沖字節
450 2 }
451 1 while(no[u][a] != 0);//當顯示數據為0時結束循環
452 1 bn++;//換下一個顯示緩沖字節
453 1 Ledplay[bn] = 0;//顯示一列的空位,便于字符區分
454 1 }
455 /**********************************************************************************************/
456 void display (void){//點陣屏驅動函數-32*8點陣顯示驅動
457 1 uchar ac,aa=7;//定義兩個數據變量
458 1 for(ac=0x28;ac<0x30;ac++){//掃描后兩塊LED屏(由于P1.5接揚聲器所以高4位為2,旨在關聲音)
459 2 Led_E = ac;//用ac值驅動使能列信號
460 2 Led_24 = DL(Ledplay[aa+8]);//將顯示寄存器數據寫入2、4屏(嵌入DL匯編是為了翻轉字節數據,如果接線正確可省
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -