📄 text1.lst
字号:
C51 COMPILER V6.23a TEXT1 06/18/2007 17:49:32 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: E:\学习资料\专业软件\单片机\KEIL非安装版\Keil\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEN
-D
stmt level source
1 #include<reg52.h>
2 code unsigned char ledcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0
-x71};
3 struct Time
4 {
5 unsigned char flag;
6 unsigned char second;
7 unsigned char minute;
8 unsigned char hour;
9 unsigned int ms;
10
11 }gTime;
12 unsigned char tag=0;
13 unsigned char adjust_tag=0;
14 void TimeOut(void);
15 void keyIn(unsigned char keydata);
16 unsigned char keyOut(void);
17 unsigned char getkey(void);
18 void msCall(void);
19 void SLEDScan(void);
20 void keyscan(void);
21 void ledchange(void);
22 unsigned char keybufWp=0;
23 unsigned char keybufRp=0;
24 unsigned char keybuf[8];
25 unsigned char Disbuf[4]={0x00, 000, 0x00, 0x00};
26 void Initial (void)
27 {
28 1 CP_RL2=0;
29 1 C_T2=0;
30 1 RCAP2H=-(1843>>8);
31 1 RCAP2L=-1843;
32 1 TR2=1;
33 1 ET2=1;
34 1 EA=1;
35 1 }
36
37 void Timer1(void) interrupt 5
38 {
39 1 TF2=0;
40 1 msCall();
41 1
42 1 }
43
44 void msCall(void)
45 {
46 1 SLEDScan();
47 1 keyscan();
48 1 if(adjust_tag==0)
49 1 TimeOut();
50 1 }
51
52 void SLEDScan(void)
53 {
C51 COMPILER V6.23a TEXT1 06/18/2007 17:49:32 PAGE 2
54 1 static unsigned char sts=0;
55 1 P2|=0x0f;
56 1 switch(sts)
57 1 {
58 2 case 0 ://;break;
59 2 case 1 :P0=ledcode[Disbuf[3]];P2&=0xf7;break;
60 2 case 2 :P0=ledcode[Disbuf[2]];P2&=0xfb;break;
61 2 case 3 :P0=ledcode[Disbuf[1]];P2&=0xfd;break;
62 2 case 4 :
63 2 if( gTime.flag )
64 2 {
65 3 P0=0x80;
66 3 P2&=0xfd;
67 3 break;
68 3 }
69 2 else
70 2 {
71 3 P0=0x00;
72 3 P2&=0xfd;
73 3 break;
74 3 }
75 2 case 5 :P0=ledcode[Disbuf[0]];P2&=0xfe;break;
76 2 }
77 1 if(++sts>=6) sts=1;
78 1
79 1 }
80
81 void keyIn(unsigned char keydata)
82 {
83 1 keybuf[keybufWp]=keydata;
84 1 if (++keybufWp>=8)
85 1 keybufWp=0;
86 1 }
87
88 unsigned char keyOut(void)
89 { unsigned char retvalue;
90 1 while (keybufRp==keybufWp);
91 1 retvalue=keybuf[keybufRp];
92 1 if (++keybufRp>=8) keybufRp=0;
93 1 return(retvalue);
94 1 }
95
96 void keyscan(void)
97 {
98 1 static unsigned char sts=0;
99 1 static unsigned char cut=10;
100 1 unsigned char keyvalue;
101 1
102 1 if( --cut != 0 ) return;
103 1 cut = 10;
104 1 switch( sts )
105 1 {
106 2 case 0:// ;
107 2
108 2 case 1:
109 2 if( getkey() != 0xff )
110 2 {
111 3 keyvalue = getkey();
112 3 sts = 2;
113 3 }
114 2 break;
115 2
C51 COMPILER V6.23a TEXT1 06/18/2007 17:49:32 PAGE 3
116 2 case 2:
117 2 if(keyvalue!=getkey())
118 2 {
119 3 sts=1;
120 3 break;
121 3 }
122 2
123 2 else
124 2 {
125 3 keyIn(keyvalue);
126 3 sts=3;
127 3 }
128 2 break;
129 2 case 3:
130 2 if(getkey()==0xff)
131 2 sts=4;
132 2 break;
133 2 case 4:if(getkey()!=0xff)
134 2 {
135 3 sts=3;
136 3 break;
137 3 }
138 2 else
139 2 sts=1;
140 2 break;
141 2 }
142 1 }
143
144
145 unsigned char getkey(void)
146 { unsigned char p,x,y;
147 1 P1=0x0f;
148 1 x=P1;
149 1 P1=0xf0;
150 1 y=P1;
151 1 p=x|y;
152 1 switch(p)
153 1 {
154 2 case 0xee : return(0x0c);break;
155 2 case 0xde : return(0x0d);break;
156 2 case 0xbe : return(0x0e);break;
157 2 case 0x7e : return(0x0f);break;
158 2 case 0xed : return(0x08);break;
159 2 case 0xdd : return(0x09);break;
160 2 case 0xbd : return(0x0a);break;
161 2 case 0x7d : return(0x0b);break;
162 2 case 0xeb : return(0x04);break;
163 2 case 0xdb : return(0x05);break;
164 2 case 0xbb : return(0x06);break;
165 2 case 0x7b : return(0x07);break;
166 2 case 0xe7 : return(0x00);break;
167 2 case 0xd7 : return(0x01);break;
168 2 case 0xb7 : return(0x02);break;
169 2 case 0x77 : return(0x03);break;
170 2 case 0xff : return(0xff);break;
171 2 }
172 1 }
173 void TimeOut(void)
174 {
175 1
176 1 if (++gTime.ms<1000) return;
177 1 {
C51 COMPILER V6.23a TEXT1 06/18/2007 17:49:32 PAGE 4
178 2 gTime.ms=0;
179 2 tag=1;
180 2 }
181 1 if ( ++gTime.second<60) return;
182 1 gTime.second=0;
183 1 if ( ++gTime.minute<60) return;
184 1 gTime.minute=0;
185 1 if ( ++gTime.hour<24) return;
186 1 gTime.hour=0;
187 1
188 1 }
189 void mode1( void )/* 模式1 显示分秒 且让第2个小数点常亮*/
190 {
191 1 Disbuf[3]=gTime.second%10;
192 1 Disbuf[2]=gTime.second/10;
193 1 Disbuf[1]=gTime.minute%10;
194 1 Disbuf[0]=gTime.minute/10;
195 1 gTime.flag=1;
196 1 }
197
198 void mode2( void )/*模式2 显示时分 让第2个小数点闪烁 */
199 {
200 1
201 1 Disbuf[3]=gTime.minute%10;
202 1 Disbuf[2]=gTime.minute/10;
203 1 Disbuf[1]=gTime.hour%10;
204 1 Disbuf[0]=gTime.hour/10;
205 1 gTime.flag=(gTime.flag+1)%2;;
206 1
207 1 }
208 unsigned char khit(void)/*判断是否有键按下 有键盘返回值 无返回0*/
209 {
210 1 return (keybufWp-keybufRp);
211 1 }
212 void changemode(void)/* 分状态显示,每按一次C键,模式切换一次*/
213 {
214 1 static unsigned char sts=0;//状态标志
215 1 unsigned char Data=0;
216 1 if(khit())
217 1 Data=keyOut();
218 1 if(Data==0xc)
219 1 sts=(sts+1)%2;
220 1 switch(sts)
221 1 {
222 2 case 0 : mode1();break;
223 2 case 1 : mode2();break;
224 2 }
225 1 }
226 void adjust1(void)
227 {
228 1 unsigned char time;
229 1 gTime.second=0;
230 1 Disbuf[3]=0x00;
231 1 Disbuf[2]=0x00;
232 1 Disbuf[1]=0x00;
233 1 Disbuf[0]=0x01;
234 1 while (khit()==0);
235 1 {
236 2 time=keyOut();
237 2 Disbuf[2]=time;
238 2 gTime.second=10*time;
239 2 }
C51 COMPILER V6.23a TEXT1 06/18/2007 17:49:32 PAGE 5
240 1 while (khit()==0);
241 1 {
242 2 time=keyOut();
243 2 Disbuf[3]=time;
244 2 gTime.second=gTime.second+time;
245 2 }
246 1
247 1
248 1 }
249 void adjust2(void)
250 {
251 1 unsigned char time;
252 1 gTime.minute=0;
253 1 Disbuf[3]=0x00;
254 1 Disbuf[2]=0x00;
255 1 Disbuf[1]=0x00;
256 1 Disbuf[0]=0x02;
257 1 while (khit()==0);
258 1 {
259 2 time=keyOut();
260 2 Disbuf[2]=time;
261 2 gTime.minute=10*time;
262 2 }
263 1 while (khit()==0);
264 1 {
265 2 time=keyOut();
266 2 Disbuf[3]=time;
267 2 gTime.minute=gTime.minute+time;
268 2 }
269 1
270 1 }
271
272 void adjust3(void)
273 {
274 1 unsigned char time;
275 1 gTime.hour=0;
276 1 Disbuf[3]=0x00;
277 1 Disbuf[2]=0x00;
278 1 Disbuf[1]=0x00;
279 1 Disbuf[0]=0x03;
280 1 while (khit()==0);
281 1 {
282 2 time=keyOut();
283 2 Disbuf[2]=time;
284 2 gTime.hour=10*time;
285 2 }
286 1 while (khit()==0);
287 1 {
288 2 time=keyOut();
289 2 Disbuf[3]=time;
290 2 gTime.hour=gTime.hour+time;
291 2 }
292 1
293 1 }
294 void adjust(void)
295 {
296 1
297 1 adjust3();
298 1 adjust2();
299 1 adjust1();
300 1
301 1 }
C51 COMPILER V6.23a TEXT1 06/18/2007 17:49:32 PAGE 6
302 void main(void)
303 {
304 1 Initial();
305 1 while(1)
306 1 {
307 2 unsigned char Data=0;
308 2 if(khit())
309 2 {
310 3 Data=keyOut();
311 3 if(Data==0xa)
312 3 {
313 4 adjust_tag=1;
314 4 adjust();
315 4 adjust_tag=0;
316 4 }
317 3 else
318 3 keybufRp--;
319 3 }
320 2 if( tag==1)//一秒到来的标志 把新的时间读入显示缓存区
321 2 {
322 3 changemode();
323 3 tag=0;
324 3 }
325 2 }
326 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 841 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 2
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 + -