📄 test.lst
字号:
186 1 // TH0=TL0=0x7a;//16M
187 1 // TH0=TL0=0x75;//16.59M
188 1 // TH0=TL0=0x72;//17M
189 1 // TH0=TL0=0x37;//24M
190 1 TH0=TL0=-200;//24M
191 1 EA=1;
192 1 ET0=1;
193 1 TR0=1;
194 1 }
195
196 void out_time(unsigned int out_time){
197 1 unsigned char h, m;
198 1 m = out_time % 60;
199 1 h = out_time / 60;
200 1 disp_buff[0] = font[h/10];
201 1 disp_buff[1] = font[h%10];
202 1 disp_buff[2] = font[m/10];
203 1 disp_buff[4] = font[m%10];
204 1 }
205
206 #define FUCTION_NORMAL 0
207 #define FUCTION_TIME_ADJUST 1
208 #define FUCTION_TIMER_ON_SET 2
209 #define FUCTION_TIMER_OFF_SET 3
210 #define FUCTION_MAX 4
211 unsigned char function_select = FUCTION_NORMAL;
212
213 unsigned int key_set = 0; //各按键按下去的时间,按住该键不放时,每运行一次键扫该值加1.
214 bit key_func = 0;
215 #define PUSH_DELAY 200 //100ms
216 #define FIRST_PUSH_DELAY 500 //250ms
217
218 void key_scan(void){
219 1 unsigned int diff;
220 1 //按键为高电平触发.
221 1 if(key_reg & KEY_SET){
222 2 disp_flash = 0;
223 2 if(key_set){//原来已经按下,连续增加.
224 3 if(key_set % PUSH_DELAY == 0 && key_set > FIRST_PUSH_DELAY){
225 4 unsigned int _key_set = key_set - FIRST_PUSH_DELAY;
226 4 diff = _key_set / PUSH_DELAY;
227 4 }else
228 3 diff = 0;
229 3 }else
230 2 diff = 1;
231 2 if (function_select == FUCTION_TIME_ADJUST){
232 3 timer_isr_stop = 1;
233 3 time += diff;
234 3 time %= 1440; //一天为1440分钟
235 3 }else if (function_select == FUCTION_TIMER_ON_SET){
236 3 timer_on += diff;
237 3 timer_on %= 720; //一天为1440分钟
238 3 }else if (function_select == FUCTION_TIMER_OFF_SET){
239 3 timer_long += diff;
240 3 timer_long %= 121;
C51 COMPILER V7.02b TEST 02/02/2004 17:04:14 PAGE 5
241 3 if(timer_long < 10)
242 3 timer_long += 10;
243 3 }
244 2 if (key_set < 65500)
245 2 key_set++;
246 2 }else
247 1 key_set = 0;
248 1
249 1 if(key_reg & KEY_FUNC){
250 2 disp_flash = 0;
251 2 if(!key_func){//原来未按下,改变设置模式,否则不作处理.
252 3 function_select++;
253 3 if (function_select == FUCTION_MAX){
254 4 function_select = FUCTION_NORMAL;//FUCTION_NORMAL == 0
255 4 if (timer_isr_stop){
256 5 timer_isr_stop = 0;
257 5 time_ms = 0;
258 5 }
259 4 }
260 3 key_func = 1;
261 3 }
262 2 }else
263 1 key_func = 0;
264 1 }
265
266 #define FLASH_CHECK(x) disp_flash % x < x / 2
267 void sys_run(){
268 1 while(1){
269 2 if (!sys_wake_up)
270 2 continue;
271 2 sys_wake_up = 0;
272 2 key_scan();
273 2 if(function_select == FUCTION_NORMAL){
274 3 unsigned int diff_time;
275 3 diff_time = time % 720;
276 3 if (diff_time >= timer_on && diff_time < timer_on + timer_long){//timer_long 为0时,定时器不再作输出.
277 4 //out low
278 4 OUT_PIN = 0;
279 4 disp_flash++;
280 4 if(FLASH_CHECK(500))
281 4 disp_on = 1;
282 4 else
283 4 disp_on = 0;
284 4 } else {
285 4 //out high
286 4 OUT_PIN = 1;
287 4 disp_on = 1;
288 4 }
289 3 } else {
290 3 disp_flash++;
291 3 if(FLASH_CHECK(1000))
292 3 disp_on = 1;
293 3 else
294 3 disp_on = 0;
295 3 }
296 2
297 2 if (function_select == FUCTION_TIME_ADJUST){
298 3 dot_pos = 0;
299 3 out_time(time);
300 3 }else if (function_select == FUCTION_TIMER_ON_SET){
301 3 dot_pos = 1;
302 3 out_time(timer_on);
C51 COMPILER V7.02b TEST 02/02/2004 17:04:14 PAGE 6
303 3 }else if (function_select == FUCTION_TIMER_OFF_SET){
304 3 dot_pos = 2;
305 3 out_time(timer_long);
306 3 }else{
307 3 dot_pos = DISP_WIDTH;
308 3 out_time(time);
309 3 }
310 2 out_disp_buff();
311 2 }
312 1 }
313
314
315
316 void main(){
317 1 #if 1
318 1 timer_init();
319 1 sys_run();
320 1 #else
unsigned char i;
unsigned int j;
out_cs_mask(0);
for(i=0; ;){
if (i==16)
i=0;
//DATA_PORT = ~(1 << i);
// out_cs_mask(1);
// spiout(1 << i);
// spiout(font[i]);
// out_disp_buff();
// out_cs_mask(0);
// for(j=0; j<500; j++);
// disp_buff[0] = font[i];
// disp_buff[1] = font[(i+1)&0xf];
// disp_buff[2] = font[(i+2)&0xf];
// disp_buff[3] = font[(i+3)&0xf];
// disp_buff[4] = font[(i+4)&0xf];
// disp_buff[5] = font[(i+5)&0xf];
// for(j=0; j<200; j++);
// out_disp_buff();
#if 0
unsigned char disp_data;
out_cs_mask(1);
//键盘扫描
key_reg = 0;
disp_data = 1<<key_cs;
spiout(disp_data);
if(KEY_LINE)
key_reg |= disp_data;
else
key_reg &= ~disp_data;
key_cs++;
key_cs &= 7;
spiout(key_reg);
out_cs_mask(0);
for(j=0; j<500; j++);
#endif
}
#endif
362 1 }
363
364
C51 COMPILER V7.02b TEST 02/02/2004 17:04:14 PAGE 7
365
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 913 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 25 6
IDATA SIZE = ---- ----
BIT SIZE = 4 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -