?? 2051.lst
字號:
177 1 ET0=1;
178 1 TR0=1;
179 1 }
C51 COMPILER V9.01 2051 09/19/2012 10:47:35 PAGE 4
180
181 //延時函數
182 void Delay(uint i)
183 {
184 1 while(i--);
185 1 }
186
187 //函數功能:時鐘計時
188 void TimerMake(void)
189 {
190 1 if(++TimeData[Second]>=60) //秒
191 1 {
192 2 TimeData[Second]=0;
193 2 if(++TimeData[Minute]>=60) //分
194 2 {
195 3 TimeData[Minute]=0;
196 3 if(++TimeData[Hour]>=24) //時
197 3 TimeData[Hour]=0;
198 3 }
199 2 }
200 1 }
201
202 //時鐘顯示數據放入顯示緩沖區
203 void TimeDisData(void)
204 {
205 1 DispData[0]=Disp[TimeData[Hour]/10];
206 1 if(SecondFlashFlag)
207 1 {
208 2 //每半秒加小數點用于秒閃
209 2 // DispData[1]=Disp[TimeData[Hour]%10]|0x80;
210 2 // DispData[2]=Disp[TimeData[Minute]/10]|0x80;
211 2 // }
212 2 // else
213 2 // {
214 2 DispData[1]=Disp[TimeData[Hour]%10];
215 2 DispData[2]=Disp[TimeData[Minute]/10];
216 2 }
217 1 DispData[3]=Disp[TimeData[Minute]%10];
218 1 }
219
220 //鬧鈴顯示數據放入顯示緩沖區
221 void TimingDisData(void)
222 {
223 1 if(TimingDisSelectFlag)
224 1 {
225 2 //第2定時時間
226 2 DispData[0]=Disp[TimeData[Hour_n2]/10];
227 2 DispData[1]=Disp[TimeData[Hour_n2]%10];
228 2 DispData[2]=Disp[TimeData[Minute_n2]/10];
229 2 DispData[3]=Disp[TimeData[Minute_n2]%10];
230 2 }
231 1 else
232 1 {
233 2 //第1定時時間
234 2 DispData[0]=Disp[TimeData[Hour_n1]/10];
235 2 DispData[1]=Disp[TimeData[Hour_n1]%10];
236 2 DispData[2]=Disp[TimeData[Minute_n1]/10];
237 2 DispData[3]=Disp[TimeData[Minute_n1]%10];
238 2 }
239 1 }
240
241 //函數功能:顯示
C51 COMPILER V9.01 2051 09/19/2012 10:47:35 PAGE 5
242 //兩種顯示程序都可行,生成的代碼量相當
243 void Display(void)
244 {
245 1 /* uchar i;
246 1 uchar databat;
247 1 uchar ScanStart=0x0e; //掃描初值,由低位開始掃描
248 1
249 1 //選擇顯示數據
250 1 if(TimingSetFlag)
251 1 TimingDisData();
252 1 else
253 1 TimeDisData();
254 1 //動態掃描顯示
255 1 for(i=0;i<4;i++)
256 1 {
257 1 databat=DisScan&0xf0; //保存P3口當前狀態
258 1 DisScan=databat|0x2f; //清屏
259 1 DispOut=DispData[i]; //輸出字符碼
260 1 DisScan=databat|(ScanStart&0x2f); //輸出位掃描碼
261 1 Delay(DISTIME); //延時
262 1 ScanStart=(ScanStart<<1)+1; //產生下一位掃描碼
263 1 }*/
264 1
265 1 //選擇顯示數據
266 1 if(TimingSetFlag)
267 1 TimingDisData();
268 1 else
269 1 TimeDisData();
270 1 //顯示時十位
271 1 Hour_SWei=0;
272 1 DispOut=DispData[0];
273 1 Delay(num);
274 1 Hour_SWei=1;
275 1 //顯示時個位
276 1 Hour_GWei=0;
277 1 DispOut=DispData[1];
278 1 Delay(num);
279 1 Hour_GWei=1;
280 1 //顯示分十位
281 1 Min_SWei=0;
282 1 DispOut=DispData[2];
283 1 Delay(num);
284 1 Min_SWei=1;
285 1 //顯示分個位
286 1 Min_GWei=0;
287 1 DispOut=DispData[3];
288 1 Delay(num);
289 1 Min_GWei=1;
290 1 }
291
292 //函數功能:定鬧時間比較
293 void TimeCompate(void)
294 {
295 1 //時分相等且秒為0時啟動鬧鈴輸出
296 1 if(TimeData[Second]==0)
297 1 {
298 2 if((TimeData[Hour_n1]==TimeData[Hour])&&(TimeData[Minute_n1]==TimeData[Minute]))
299 2 StartBuzze();
300 2
301 2 else if((TimeData[Hour_n2]==TimeData[Hour])&&(TimeData[Minute_n2]==TimeData[Minute]))
302 2 StartBuzze();
303 2 }
C51 COMPILER V9.01 2051 09/19/2012 10:47:35 PAGE 6
304 1 }
305
306 //函數功能:啟動鬧鈴輸出
307 void StartBuzze(void)
308 {
309 1 TimingSuitedFlag=1;
310 1 ET1=1;
311 1 TR1=1; //用TR1控制鬧鈴聲響
312 1 }
313
314 //按鍵掃描函數:產生鍵值
315 void KeyScan(void)
316 {
317 1 uint KeyLongTime;
318 1
319 1 if(!Button_S1)
320 1 {
321 2 Bee_Out=0; //啟動按鍵聲
322 2 if(TimingSuitedFlag) //有鬧鈴輸出時
323 2 {
324 3 TimingSuitedFlag=0;
325 3 Bee_Out=1; //鬧鈴停鬧
326 3 TR1=0; //關閉TR1
327 3 ET1=0;
328 3 }
329 2 else
330 2 {
331 3 while(!Button_S1) //等待按鍵松開
332 3 {
333 4 KeyLongTime++; //長按鍵計時開始
334 4 if(KeyLongTime>300)
335 4 {
336 5 Bee_Out=1; //關閉按鍵聲
337 5 Display(); //保持顯示
338 5 }
340 4 {
341 5 TimeSetFlag=1; //進入校時模式
342 5 SecondFlashFlag=1; //使秒閃長亮
343 5 KeyVal=12; //鍵值置12指向校時模式起始鍵值
344 5 } //校時設定模式的后續鍵值由KeyVal++產生
345 4 }
347 3 KeyVal++; //產生鍵值
348 3 KeyLongTime=0; //清長按鍵計時
349 3 TimingFunFlag=!TimingFunFlag; //鬧鈴功能開或關
350 3 }
351 2 }
352 1 }
353
354 //鍵功能函數:執行鍵值功能
355 void KeyFunction(void)
356 {
357 1 uchar *j; //定義指針
358 1
359 1 switch(KeyVal)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -