📄 main.lst
字号:
148 4 Clock[DPMIN]=0; //分位清0
149 4 Clock[DPHOUR]++; //时位加1
150 4 if(Clock[DPHOUR]==24) //24小时到
151 4 {
152 5 Clock[DPHOUR]=0; //时位清0
153 5 }
154 4 }
155 3 }
156 2 }
157 1 }
158 void bell(void)
159 {
160 1 BELL=1;delay();delay();delay();delay();delay();
161 1 BELL=0;delay();delay();delay();delay();delay();
162 1 BELL=1;delay();delay();delay();delay();delay();
163 1 BELL=0;delay();delay();delay();delay();delay();
164 1 BELL=1;
165 1 }
166 void intsrl(void) interrupt 0 using 2 //外中断IT0中断服务子函数,K3按键触发
167 {
168 1 SwitchClockMode=1; //置位切换标志位
169 1 if( ClockMode == CLOCKMODE ) //如果在时钟模式下运行
170 1 {
171 2 ClockMode=1; //转到秒表模式下运行
172 2 }
173 1 else
174 1 {
175 2 ClockMode= CLOCKMODE;
176 2 }
177 1 }
178 void time1(void) interrupt 3 using 2
179 {
C51 COMPILER V7.50 MAIN 06/06/2007 14:25:55 PAGE 4
180 1
181 1 TH1=0Xe0;
182 1 TL1=0x10; //计时器放入预置时间,大概10毫秒
183 1 Watch[WHMILSEC]++; //毫秒位减1
184 1 if(Watch[WHMILSEC]==99) //0.1秒到
185 1 {
186 2 Watch[WHMILSEC]=0; //毫秒位清0
187 2 Watch[WHSEC]++; //秒位减1
188 2 if(Watch[WHSEC]==99) //1秒到
189 2 { Watch[WHSEC]=0;
190 3 bell(); //报警
191 3 }
192 2 }
193 1 }
194 void time2(void) interrupt 5 using 2 //定时器T2中断服务子函数
195 {
196 1 TF2=0;
197 1 TH2=0Xe0;
198 1 TL2=0x00; //计时器2放入预置时间,大概10毫秒
199 1 switch(--Refersh)
200 1 { case 0:P2=32;break;
201 2 case 1:P2=16;break;
202 2 case 2:P2=8;break;
203 2 case 3:P2=4;break;
204 2 case 4:P2=2;break;
205 2 case 5:P2=1;break;
206 2 }
207 1 P0=TABLE[Buffer[Refersh]]; //输入要显示数据
208 1 if(Refersh==0) Refersh=6;
209 1
210 1
211 1 }
212 void addTime(uchar mode) //加1子函数
213 {
214 1 switch(mode) //判断当前状态
215 1 {
216 2 case KEYMIN: //时钟分调整时
217 2 {
218 3 Clock[DPMIN]++; //分位加1
219 3 if(Clock[DPMIN]==60) //到60时
220 3 {
221 4 Clock[DPMIN]=0; //分位清0
222 4 }
223 3 }break;
224 2 case KEYHOUR: //时钟时调整
225 2 {
226 3 Clock[DPHOUR]++; //时位加1
227 3 if(Clock[DPHOUR]==24) //24小时到
228 3 {
229 4 Clock[DPHOUR]=0; //时位清0
230 4 }
231 3 }break;
232 2 }
233 1 }
234 void clockDisplay( uchar ClockMode ) //动态显示函数
235 {
236 1 if(ClockMode == CLOCKMODE) //时钟模式
237 1 {
238 2 Buffer[0]=Clock[DPSEC]%10; //数码管显示秒个位
239 2 Buffer[1]=Clock[DPSEC]/10; //秒十位
240 2 Buffer[2]=Clock[DPMIN]%10; //分钟个位
241 2 Buffer[3]=Clock[DPMIN]/10; //分钟十位
C51 COMPILER V7.50 MAIN 06/06/2007 14:25:55 PAGE 5
242 2 Buffer[4]=Clock[DPHOUR]%10; //小时个位
243 2 Buffer[5]=Clock[DPHOUR]/10; //小时十位
244 2 }
245 1 else
246 1 {
247 2 Buffer[0]=Watch[WHMILSEC]%10; //数码管显示秒个位
248 2 Buffer[1]=Watch[WHMILSEC]/10; //秒十位
249 2 Buffer[2]=Watch[WHSEC]%10; //分钟个位
250 2 Buffer[3]=Watch[WHSEC]/10; //分钟十位
251 2 }
252 1 /*
253 1 disp=Buffer[--Refersh]; //刷新
254 1 switch(Refersh)
255 1 { case 0:P2=32;break;
256 1 case 1:P2=16;break;
257 1 case 2:P2=8;break;
258 1 case 3:P2=4;break;
259 1 case 4:P2=2;break;
260 1 case 5:P2=1;break;
261 1 }
262 1 P0=TABLE[disp]; //输入要显示数据
263 1 delay10ms();
264 1 if(Refersh==0) Refersh=6;
265 1 */
266 1 }
267 uchar key(void) //键盘输入
268 {
269 1 uchar i;
270 1 i= P1&0x0f;
271 1 if(i != 0x0f) //键盘屏蔽
272 1 {
273 2 i= P1&0x0f;
274 2 if(i != 0x0f)
275 2 { return (P1&0x0f);
276 3 }
277 2 }
278 1 else return 0;
279 1 }
280
281 void delay(void) //键盘去抖延时
282 {
283 1 uchar j,i;
284 1 for(j=0;j<=40;j++)
285 1 for(i=0;i<=200;i++);
286 1 }
287
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 663 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 4
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 + -