📄 fff.lst
字号:
167 4 }
168 3
169 3 }
170 2 }
171 1
172 1 }
173 /*******************************************************************
174 * 函数名称:d3()
175 * 功 能:数码管输出显示
176 * 入口参数:无
177 * 出口参数:无
178 *******************************************************************/
179 void d3(void) //显示输出
C51 COMPILER V7.06 FFF 05/01/2008 16:56:16 PAGE 4
180 {
181 1 uchar sel=0x80,i ; //定义sel为位选通变量并初使化
182 1 if(k2) //判断是否处于调时状态
183 1 {
184 2 if(k2==4)a[0]=a[1]=a[4]=a[6]=a[7]=10; //星期显示设置
185 2 if(k1&&(k3--==0)) k3=255; //设置位调节闪烁初值
186 2 }
187 1 for(i=0;i<=8;i++) //循环显示八个数码管
188 1 {
189 2 P2=0xff; //清屏
190 2 P0=tt[a[i]]; //输出显示数值
191 2 if(k1&&(k3>200)) //判断是否闪烁
192 2 if (k1==1&&(i==6||i==7))P2=0xff; //时位闪烁
193 2 else if(k1==2&&(i==3||i==4))P2=0xff; //分位闪烁
194 2 else if(k1==3&&(i==0||i==1))P2=0xff; //秒位闪烁
195 2 else P2=~sel; //非闪烁状态
196 2 else P2=~sel; //非闪烁状态
197 2 sel=sel>>1; //显示位移位
198 2 }
199 1 }
200 /*******************************************************************
201 * 函数名称:d2()
202 * 功 能:循环调用
203 * 入口参数:无
204 * 出口参数:无
205 *******************************************************************/
206 void d2(void)
207 {
208 1 while(1)
209 1 {
210 2 a[0]=*s%10; //给显示数组赋值
211 2 a[1]=*s/10;
212 2 a[2]=10;
213 2 a[3]=*m%10;
214 2 a[4]=*m/10;
215 2 a[5]=10;
216 2 a[6]=*h%10;
217 2 a[7]=*h/10;
218 2
219 2 d3(); //调用显示输出函数
220 2 }
221 1 }
222 /*******************************************************************
223 * 函数名称:d1()
224 * 功 能:中断设置
225 * 入口参数:无
226 * 出口参数:无
227 *******************************************************************/
228 void d1(void)
229 {
230 1 TMOD=0x11;
231 1 TH1=0xff; TH0=0xff;
232 1 TL1=0xff; TL0=0xff;
233 1 IE=0x8f;
234 1 TR1=1;
235 1 IT0=1; IT1=1;
236 1 IP=0x02;
237 1 }
238 /*******************************************************************
239 * 函数名称:main()
240 * 功 能:程序入口,调用功能子函数
241 * 入口参数:无
C51 COMPILER V7.06 FFF 05/01/2008 16:56:16 PAGE 5
242 * 出口参数:无
243 *******************************************************************/
244 void main(void)
245 {
246 1 d1(); //调用中断位设置函数
247 1 d2();
248 1 }
249 /*******************************************************************
250 * 函数名称:d5()
251 * 功 能:切换显示菜单
252 * 入口参数:无
253 * 出口参数:无
254 *******************************************************************/
255 void d5(void) //显示菜单调节函数
256 {
257 1 switch(k2)
258 1 {
259 2 case 1:{h=&h1; m=&m1; s=&s1; }break;//菜单1:显示时钟时间
260 2 case 2:{h=&h2; m=&m2; s=&s2; }break;//菜单2:显示定时时刻
261 2 case 3:{h=&year;m=&month;s=&day; }break;//菜单3:显示日历年月日
262 2 case 4:{h=&wday;m=&wday; s=&wday;}break;//菜单4:显示星期0--6
263 2 default:{k2=0;h=&h1;m=&m1;s=&s1; }break;//复位显示
264 2 }
265 1 }
266 /*******************************************************************
267 * 函数名称:d7()
268 * 功 能:调节限制,防止数值调节超出值域
269 * 入口参数:无
270 * 出口参数:无
271 *******************************************************************/
272 void d7(void) //调节限制函数
273 {
274 1 if(k2==1||k2==2) //计时与定时限制
275 1 if (k1==1&&*p>=24) *p=0; //小时限制
276 1 else if(*p>=60) *p=0; //分、秒限制
277 1 if(k2==3) //日历限制
278 1 if (k1==1&&*p>=100)*p=0; //年限制
279 1 else if(k1==2&&*p>12) *p=1; //月限制
280 1 else if(k1==3&&*p>n) *p=1; //日限制
281 1 if(k2==4)
282 1 if (k1==2&&*p>6) *p=0; //星期限制
283 1
284 1 }
285 /*******************************************************************
286 * 函数名称:timer0()
287 * 功 能:菜单切换及位加数调节
288 * 入口参数:无
289 * 出口参数:无
290 *******************************************************************/
291 /**外部中断1调节函数**/
292 void timer0(void)interrupt 0 using 0 //外部中断0调节
293 {
294 1 if(k1) //判断是位调节还是菜单调节
295 1 {
296 2 (*p)++; //位加数调节
297 2 d7(); //调用调节限制函数
298 2 }
299 1 else
300 1 {
301 2 k2++; //菜单加数调节
302 2 d5(); //调用调节菜单
303 2 }
C51 COMPILER V7.06 FFF 05/01/2008 16:56:16 PAGE 6
304 1 }
305 /*******************************************************************
306 * 函数名称:timer2()
307 * 功 能:调节位选择及关铃声
308 * 入口参数:无
309 * 出口参数:无
310 *******************************************************************/
311 void timer2(void)interrupt 2 using 2 //外部中断1调节
312 {
313 1 TR0=0;k5=0; //手动关铃声
314 1 if(k2) //断是否处于调节状态
315 1 {
316 2 if (k2==4){k1++;} //期调节位选择
317 2 if (++k1==1) p=h; //选择时位
318 2 else if(k1==2) p=m; //选择分位
319 2 else if(k1==3) p=s; //选择秒位
320 2 else k1=0; //复位
321 2 }
322 1 }
323 /***************************lns主程序snl***************************/
324
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1016 ----
CONSTANT SIZE = 206 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -