📄 time.lst
字号:
C51 COMPILER V7.06 TIME 09/02/2005 08:49:54 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND TABS(2)
stmt level source
1 #include <AT89X52.H>
2 #include <absacc.h>
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 extern void delay(uint dtime);
8 /*串口操作 ************************* ******************************/
9 extern char getbyte(void); //从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
10 extern putbyte(char c); //放入一个字节到发送缓冲区
11 extern putstring(uchar *puts); //发送一个定义在程序存储区的字符串到串口
12 extern putbytes(uchar *outplace,uint j);//放一串数据到发送缓冲区,需要定义发送的字节数
13 extern puthex(uchar c); //发送一个字节的hex码,分成两个字节发。
14 extern bit inbufsign; //串口接收到数据标志
15 extern void serial_init (void); //串口初始化
16 #define CR putstring("\r\n") //发送一个回车换行
17
18 /*液晶操作***/
19 extern void lcd_cls(void); //清屏
20 extern void lcd_string(uchar attr,uchar *string); //显示字符串
21 extern void lcd_rect();
22 extern void lcd_char(uchar attr,uchar num);
23 extern void lcd_char1(uchar attr,uchar num);
24 extern void lcd_cursor(uchar x, uchar y);
25 //8279操作
26 extern void init8279();
27 //变量声明
28 //不能对绝对变量进行初始化,对于函数和bit类型变量不能采用这种方法进行绝对地址定位
29 uchar xdata time_num[6] _at_ 0x2020;
30 uchar xdata time_num1[6] _at_ 0x2030;
31
32 uchar xdata s0 _at_ 0x2000;
33 uchar xdata s1 _at_ 0x2001;
34 uchar xdata m0 _at_ 0x2002;
35 uchar xdata m1 _at_ 0x2003;
36 uchar xdata h0 _at_ 0x2004;
37 uchar xdata h1 _at_ 0x2005;
38
39 uint xdata num _at_ 0x2006 ;
40
41 uchar data aa=0,key_data=0;
42 bit bdata flag1=0,flag2=0; //flag2控制第一次输出00:00:00
43 //**********键盘操作
44 extern uchar data key;
45 //函数声明
46 bit GetKeyInput(void);
47 void updatetime();
48 void time_1ms();
49 //变量初始化
50 void var_init()
51 {
52 1 s0=0;
53 1 s1=0;
54 1 m0=0;
55 1 m1=0;
C51 COMPILER V7.06 TIME 09/02/2005 08:49:54 PAGE 2
56 1 h0=0;
57 1 h1=0;
58 1 num=0;
59 1 }
60
61 //函数定义
62 void func_up() //按下向上键时的处理函数
63 {
64 1 if(aa==1||aa==3)
65 1 {
66 2 time_num[aa-1]++;
67 2 if(time_num[aa-1]==10)
68 2 time_num[aa-1]=0;
69 2 return;
70 2 }
71 1 if(aa==2||aa==4)
72 1 {
73 2 time_num[aa-1]++;
74 2 if(time_num[aa-1]==6)
75 2 time_num[aa-1]=0;
76 2 return;
77 2 }
78 1 if(aa==5&&time_num[5]<=1)
79 1 {
80 2 time_num[aa-1]++;
81 2 if(time_num[aa-1]==10)
82 2 time_num[aa-1]=0;
83 2 return;
84 2 }
85 1 if(aa==6)
86 1 {
87 2 time_num[aa-1]++;
88 2 if(time_num[aa-1]==3)
89 2 time_num[aa-1]=0;
90 2 }
91 1
92 1 }
93 void func_down()//按下向下键时的处理函数
94 {
95 1 if(aa==1||aa==3)
96 1 {
97 2 if(time_num[aa-1]==0)
98 2 time_num[aa-1]=10;
99 2 time_num[aa-1]--;
100 2 return;
101 2
102 2 }
103 1 if(aa==2||aa==4)
104 1 {
105 2 if(time_num[aa-1]==0)
106 2 time_num[aa-1]=6;
107 2 time_num[aa-1]--;
108 2 return;
109 2
110 2 }
111 1 if(aa==5&&time_num[5]<=1)
112 1 {
113 2 if(time_num[aa-1]==0)
114 2 time_num[aa-1]=10;
115 2 time_num[aa-1]--;
116 2 return;
117 2 }
C51 COMPILER V7.06 TIME 09/02/2005 08:49:54 PAGE 3
118 1 if(aa==6)
119 1 {
120 2 switch(time_num[aa-1])
121 2 {
122 3 case 2:
123 3 time_num[aa-1]=1;
124 3 break;
125 3 case 1:
126 3 time_num[aa-1]=0;
127 3 break;
128 3 case 0:
129 3 time_num[aa-1]=2;
130 3 break;
131 3 }
132 2 }
133 1
134 1 }
135 void time_out()
136 {
137 1 if(flag2==0) //第一次输出"00:00:00"
138 1 {
139 2 lcd_cls();
140 2 flag2=1;
141 2 lcd_cursor(3,1);
142 2 lcd_string(0,"00:00:00");
143 2 }
144 1 if(time_num[5]!=time_num1[5])
145 1 {
146 2 lcd_cursor(3,1);
147 2 lcd_char1(0,time_num[5]);
148 2 time_num1[5]=time_num[5];
149 2 }
150 1
151 1 if(time_num[4]!=time_num1[4])
152 1 {
153 2 lcd_cursor(4,1);
154 2 lcd_char1(0,time_num[4]);
155 2 time_num1[4]=time_num[4];
156 2 }
157 1
158 1 if(time_num[3]!=time_num1[3])
159 1 {
160 2 lcd_cursor(6,1);
161 2 lcd_char1(0,time_num[3]);
162 2 time_num1[3]=time_num[3];
163 2 }
164 1
165 1 if(time_num[2]!=time_num1[2])
166 1 {
167 2 lcd_cursor(7,1);
168 2 lcd_char1(0,time_num[2]);
169 2 time_num1[2]=time_num[2];
170 2 }
171 1
172 1 if(time_num[1]!=time_num1[1])
173 1 {
174 2 lcd_cursor(9,1);
175 2 lcd_char1(0,time_num[1]);
176 2 time_num1[1]=time_num[1];
177 2 }
178 1
179 1 lcd_cursor(10,1);
C51 COMPILER V7.06 TIME 09/02/2005 08:49:54 PAGE 4
180 1 lcd_char1(0,time_num[0]);
181 1 }
182 void init_main()
183 {
184 1
185 1 serial_init();
186 1 init8279();
187 1 var_init();
188 1 //**************
189 1 T2CON=0x00;
190 1 RCAP2L=(65536-1843)%256;
191 1 RCAP2H=(65536-1843)/256;
192 1 TL2 = RCAP2L;
193 1 TH2 = RCAP2H;
194 1 ET2 = 1; // 允许T2中断
195 1 TR2=1;//启动定时器
196 1 //*********************
197 1 lcd_cls();
198 1 delay(100);
199 1 }
200 void get_data()
201 {
202 1 if(num==1000)
203 1 {
204 2 flag1=1;
205 2 updatetime();
206 2 num=0;
207 2 time_num[0]=s0;
208 2 time_num[1]=s1;
209 2 time_num[2]=m0;
210 2 time_num[3]=m1;
211 2 time_num[4]=h0;
212 2 time_num[5]=h1;
213 2 }
214 1 }
215 void main(void) //recursive 递归
216 {
217 1 init_main();
218 1 for(;;)
219 1 {
220 2 if(GetKeyInput()==1)
221 2 {
222 3 if(key_data==3)
223 3 {
224 4 aa++;
225 4 TR2=0; //关定时器
226 4 flag1=1; //保证每次修改数据后进行LCD刷新
227 4 }
228 3 if(aa==7)
229 3 aa=1;
230 3 switch(key_data)
231 3 {
232 4 case 1:
233 4 func_up();
234 4 flag1=1; //保证每次修改数据后进行LCD刷新
235 4 break;
236 4 case 2:
237 4 func_down();
238 4 flag1=1; //保证每次修改数据后进行LCD刷新
239 4 break;
240 4 case 4: //完成设置
241 4 s0=time_num[0];
C51 COMPILER V7.06 TIME 09/02/2005 08:49:54 PAGE 5
242 4 s1=time_num[1];
243 4 m0=time_num[2];
244 4 m1=time_num[3];
245 4 h0=time_num[4];
246 4 h1=time_num[5];
247 4 TR2=1; //重新启动定时器
248 4 break;
249 4 }
250 3 }
251 2 if(flag1==1)
252 2 {
253 3 flag1=0;
254 3 time_out();
255 3 }
256 2 }
257 1
258 1 }
259
260 bit GetKeyInput(void)
261 {
262 1 uchar bdata flag=0;//由数据时为1
263 1 switch(key)
264 1 {
265 2 case 0x00:
266 2 return 0;
267 2 case 0xd2:
268 2 key_data=1;//上
269 2 flag=1;
270 2 break;
271 2 case 0xda: //下
272 2 key_data=2;
273 2 flag=1;
274 2 break;
275 2 case 0xdb://左
276 2 key_data=3;
277 2 flag=1;
278 2 break;
279 2 case 0xdc:
280 2 key_data=4; //完成
281 2 flag=1;
282 2 break;
283 2 }
284 1 key=0;
285 1 return flag;
286 1 }
287
288 //定时器0中断处理函数
289 void time_1ms() interrupt 5//定时一毫秒
290 {
291 1 TF2=0; //软件清除T2溢出标志
292 1 num++;
293 1 get_data();
294 1 }
295 //计时函数
296 void updatetime()
297 {
298 1 if(s0==9) //如果10ms位需要进位,则进入语句
299 1 {
300 2 s0=0;
301 2 if(s1==5) //如果100ms位需要进位,则进入语句
302 2 {
303 3 s1=0;
C51 COMPILER V7.06 TIME 09/02/2005 08:49:54 PAGE 6
304 3 if(m0==9) //如果1sec位需要进位,则进入语句
305 3 {
306 4 m0=0;
307 4 if(m1==5) //如果10sec位需要进位,则进入语句
308 4 {
309 5 m1=0;
310 5 if(h0==9&&h1<=1)
311 5 {h0=0;
312 6 h1++;}
313 5 else if(h0==3&&h1==2)
314 5 {h0=0;
315 6 h1=0;}
316 5 else h0++;
317 5 }
318 4 else m1++;
319 4 }
320 3 else m0++;
321 3 }
322 2 else s1++;
323 2 }
324 1 else s0++;
325 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1094 ----
CONSTANT SIZE = 9 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -