?? ds18b20.lst
字號:
C51 COMPILER V8.08 DS18B20 04/01/2009 22:08:33 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <LCD1602.h>
3 #include <DS18B20.h>
4 #include <DS1308.h>
5
6 sbit P1_4=P1^4;
7 sbit P1_5=P1^5;
8 sbit P1_6=P1^6;
9 sbit P1_7=P1^7;
10 uchar tem_data []= {""};
11 uchar time_data[21]= {""};
12 uchar x;
13
14
15 uchar code week1[]= {"Monday"};
16 uchar code week2[]= {"Tuesday"};
17 uchar code week3[]= {"Wednesday"};
18 uchar code week4[]= {"Thursday"};
19 uchar code week5[]= {"Friday"};
20 uchar code week6[]= {"Saturday"};
21 uchar code week7[]= {"Sunday"};
22
23
24 void Temdata_pro(uchar t)
25 {
26 1 if(Tflag==1)
27 1 tem_data[0]='+';
28 1 else
29 1 tem_data[0]='-';
30 1 tem_data[1]=t/10+'0';
31 1 tem_data[2]=t%10+'0';
32 1 tem_data[3]='.';
33 1 tem_data[4]='0';
34 1 tem_data[5]='\0';
35 1 }
36
37 void data_pro()
38 {
39 1 time_data[0]='2';
40 1 time_data[1]='0';
41 1 time_data[2]=((ys>>4)&0x0f)+'0';
42 1 time_data[3]=( ys&0x0f)+'0';
43 1 time_data[4]='-';
44 1 time_data[5]=((mn>>4)&0x01)+'0';
45 1 time_data[6]=( mn&0x0f)+'0';
46 1 time_data[7]='-';
47 1 time_data[8]=((day>>4)&0x03)+'0';
48 1 time_data[9]=( day&0x0f)+'0';
49 1 time_data[10]=' ';
50 1 time_data[11]=' ';
51 1 time_data[12]=((hr>>4)&0x09)+'0';
52 1 time_data[13]=( hr&0x0f)+'0';
53 1 time_data[14]=':';
54 1 time_data[15]=((min>>4)&0x0f)+'0';
55 1 time_data[16]=( min&0x0f)+'0';
C51 COMPILER V8.08 DS18B20 04/01/2009 22:08:33 PAGE 2
56 1 time_data[17]=':';
57 1 time_data[18]=((sec>>4)&0x0f)+'0';
58 1 time_data[19]=( sec&0x0f)+'0';
59 1 time_data[20]='\0';
60 1 x=we&0x07;
61 1 }
62
63
64
65 uchar key_san()
66 {
67 1 P1=0xfe;
68 1 if(!P1_4)return (10);
69 1 if(!P1_5)return (0);
70 1 if(!P1_6)return (11);
71 1 if(!P1_7)return (12);
72 1 P1=0xfd;
73 1 if(!P1_4)return (1);
74 1 if(!P1_5)return (2);
75 1 if(!P1_6)return (3);
76 1 if(!P1_7)return (13);
77 1 P1=0xfb;
78 1 if(!P1_4)return (4);
79 1 if(!P1_5)return (5);
80 1 if(!P1_6)return (6);
81 1 if(!P1_7)return (14);
82 1 P1=0xf7;
83 1 if(!P1_4)return (7);
84 1 if(!P1_5)return (8);
85 1 if(!P1_6)return (9);
86 1 if(!P1_7)return (15);
87 1
88 1 }
89
90 uchar CaculateWeekDay(uchar y,uchar m, uchar d)
91 { uchar weekday;
92 1 uchar c=21; //世紀數
93 1 if(m==1) {m=13; y--;}
94 1 if(m==2) {m=14; y--;}
95 1 weekday=y+y/4+c/4-2*c+26*(m+1)/10+d-1; //蔡勒(Zeller)公式
96 1 return weekday;
97 1 }
98
99 void set_time()
100 {
101 1 uchar key_code,kk=0;
102 1 uchar comH,comL;
103 1 uchar y,m,d,week;
104 1 uchar initime[]= {"2009-01-01 00:00:00"};
105 1 WriteCommand(0x01); //清屏
106 1 WriteCommand(0x0f); //開光標
107 1 display_string(0,0,initime);
108 1 WriteCommand(0x02); //光標復位
109 1 do
110 1 {
111 2 P1=0xf0;
112 2 if(P1!=0xf0)
113 2 {
114 3 delayms(5);
115 3 if(P1!=0xf0)
116 3 key_code=key_san();
117 3 initime[kk]=key_code+'0'; //鍵值轉換
C51 COMPILER V8.08 DS18B20 04/01/2009 22:08:33 PAGE 3
118 3 P1=0xf0;
119 3 while(P1!=0xf0); //等待按鍵釋放
120 3 display_onechar(0,kk,initime[kk]); //顯示更改后的時間
121 3 kk++;
122 3 if(kk==4) { kk++; display_onechar(0,kk-1,initime[kk-1]);} //跳過分隔符
123 3 if(kk==7) { kk++; display_onechar(0,kk-1,initime[kk-1]);}
124 3 if(kk==10) { kk++; display_onechar(0,kk-1,initime[kk-1]);}
125 3 if(kk==13) { kk++; display_onechar(0,kk-1,initime[kk-1]);}
126 3 if(kk==16) { kk++; display_onechar(0,kk-1,initime[kk-1]);}
127 3 }
128 2
129 2 }
130 1 while( key_code!=11) ; //設置完畢,退出
131 1 kk=0;
132 1 WriteCommand(0x0c); //關光標
133 1
134 1 comH=initime[2]-'0'; //向DS1308寫入新數據
135 1 comL=initime[3]-'0';
136 1 y=(comH<<4)|comL;
137 1 WriteYs(y);
138 1 comH=initime[5]-'0';
139 1 comL=initime[6]-'0';
140 1 m=(comH<<4)|comL;
141 1 WriteMn(m);
142 1 comH=initime[8]-'0';
143 1 comL=initime[9]-'0';
144 1 d=(comH<<4)|comL;
145 1 WriteDay(d);
146 1 comH=initime[11]-'0';
147 1 comL=initime[12]-'0';
148 1 WriteHr(((comH<<4)|comL));
149 1 comH=initime[14]-'0';
150 1 comL=initime[15]-'0';
151 1 WriteMin(((comH<<4)|comL));
152 1 comH=initime[17]-'0';
153 1 comL=initime[18]-'0';
154 1 WriteSec(((comH<<4)|comL));
155 1 week=CaculateWeekDay(y,m,d);
156 1 WriteWe(week);
157 1
158 1
159 1 }
160 /***************************************************************************/
161 void main (void)
162 {
163 1 uchar i;
164 1 uchar T;
165 1 uchar key_code;
166 1 lcd_init();
167 1 DS1308_init();
168 1 Write_CGRAM(LcdBuf); //向CGRAM寫入自定義的攝氏度符號
169 1 for(i=0;i<2;i++)
170 1 display_onechar(1,i+17,i); //顯示自定義的攝氏度符號
171 1 while(1)
172 1 {
173 2 read_DS1308(); //讀取時間和日期
174 2 data_pro(); //時間和日期數據處理
175 2 switch (x) //顯示星期
176 2 {
177 3 case 1: display_string(1,0,week1); break;
178 3 case 2: display_string(1,0,week2); break;
179 3 case 3: display_string(1,0,week3); break;
C51 COMPILER V8.08 DS18B20 04/01/2009 22:08:33 PAGE 4
180 3 case 4: display_string(1,0,week4); break;
181 3 case 5: display_string(1,0,week5); break;
182 3 case 6: display_string(1,0,week6); break;
183 3 case 7: display_string(1,0,week7); break;
184 3 }
185 2 display_string(0,0,time_data);
186 2
187 2 tmstart(); // ds1820開始轉換
188 2 dmsec(2);
189 2 T=tmrtemp(); // 讀取溫度
190 2 Temdata_pro(T); //溫度數據處理
191 2 display_string(1,12,tem_data);
192 2
193 2 P1=0xf0;
194 2 while(P1!=0xf0)
195 2 {
196 3 delayms(5);
197 3 if(P1!=0xf0)
198 3 key_code=key_san();
199 3 P1=0xf0;
200 3 while(P1!=0xf0);
201 3 if(key_code==10)
202 3 set_time();
203 3 }
204 2
205 2
206 2 }
207 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1690 ----
CONSTANT SIZE = 93 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 30 36
IDATA SIZE = ---- ----
BIT SIZE = 1 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -