📄 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 }
339 4 if(KeyLongTime>600) //长按键超过5秒
340 4 {
341 5 TimeSetFlag=1; //进入校时模式
342 5 SecondFlashFlag=1; //使秒闪长亮
343 5 KeyVal=12; //键值置12指向校时模式起始键值
344 5 } //校时设定模式的后续键值由KeyVal++产生
345 4 }
346 3 //按键松开
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 + -