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