📄 dingshiqi.lst
字号:
C51 COMPILER V8.02 DINGSHIQI 06/22/2010 17:09:44 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DINGSHIQI
OBJECT MODULE PLACED IN dingshiqi.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE dingshiqi.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 “天祥电子” 倾情奉献
3 www.txmcu.cn
4 www.txmcu.com
5 按键功能简介
6 S17 继续计时 S18 设置定时
7 S19 取消定时 S6--S15 分别为数字键0--9
8 ********************************************************************
9 该例程为数码管显示可定时计时器,用到TX-1C开发板中矩阵键盘的上三排(不包括S16)与第四排前两个按键。
10
11 若要设置定时时间,可先按下S18(第四排第一个),
12 然后按数字键S6--S15设置定时时间(设置顺序是由高位到低位的顺序),
13 设置完定时后,按下S17可恢复到正常计时状态
14 定时时间到,蜂鸣器会持续响一分钟报时。
15 若要取消定时,或者蜂鸣器响时想对其关闭,可以按下S19功能键。
16 注意晶振需为11.0592M。
17 若为其他数值晶振,请合理改变TH0与TL0参数值,否则计时会有很大误差 。
18 **********************************************************************************************************
-*************/
19 #include<reg51.h>
20
21 #define uchar unsigned char
22
23 sbit dula=P2^6;
24 sbit wela=P2^7;
25 sbit beep=P2^3;
26 unsigned char j,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;
27 uchar shi20,shi10,fen20,fen10,miao20,miao10,ok=1,wei,dingshi,yidingshi;
28 uchar baoshi,baoshijieshu;
29 unsigned int pp;
30 unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
31 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
32
33 void delay(unsigned char i)
34 {
35 1 for(j=i;j>0;j--)
36 1 for(k=125;k>0;k--);
37 1 }
38 void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1)
39 {
40 1 dula=0;
41 1 P0=table[shi2];
42 1 dula=1;
43 1 dula=0;
44 1
45 1 wela=0;
46 1 P0=0xfe;
47 1 wela=1;
48 1 wela=0;
49 1 delay(5);
50 1
51 1 P0=table[shi1]|0x80;
52 1 dula=1;
53 1 dula=0;
54 1
C51 COMPILER V8.02 DINGSHIQI 06/22/2010 17:09:44 PAGE 2
55 1 P0=0xfd;
56 1 wela=1;
57 1 wela=0;
58 1 delay(5);
59 1
60 1 P0=table[fen2];
61 1 dula=1;
62 1 dula=0;
63 1
64 1 P0=0xfb;
65 1 wela=1;
66 1 wela=0;
67 1 delay(5);
68 1
69 1 P0=table[fen1]|0x80;
70 1 dula=1;
71 1 dula=0;
72 1
73 1 P0=0xf7;
74 1 wela=1;
75 1 wela=0;
76 1 delay(5);
77 1
78 1 P0=table[miao2];
79 1 dula=1;
80 1 dula=0;
81 1
82 1 P0=0xef;
83 1 wela=1;
84 1 wela=0;
85 1 delay(5);
86 1
87 1 P0=table[miao1];
88 1 dula=1;
89 1 dula=0;
90 1
91 1 P0=0xdf;
92 1 wela=1;
93 1 wela=0;
94 1 delay(5);
95 1 }
96
97 void keyscan0()
98 {
99 1 P3=0xfb;
100 1 temp=P3;
101 1 temp=temp&0xf0;
102 1 if(temp!=0xf0)
103 1 {
104 2 delay(10);
105 2 if(temp!=0xf0)
106 2 {
107 3 temp=P3;
108 3 switch(temp)
109 3 {
110 4 case 0x7b:
111 4 ok=1;
112 4 dingshi=0;
113 4 break;
114 4 }
115 3
116 3 }
C51 COMPILER V8.02 DINGSHIQI 06/22/2010 17:09:44 PAGE 3
117 2 }
118 1 P3=0xf7;
119 1 temp=P3;
120 1 temp=temp&0xf0;
121 1 if(temp!=0xf0)
122 1 {
123 2 delay(10);
124 2 if(temp!=0xf0)
125 2 {
126 3 temp=P3;
127 3 switch(temp)
128 3 {
129 4 case 0xe7:
130 4 ok=0;
131 4 dingshi=1;
132 4 break;
133 4 case 0xd7:
134 4 yidingshi=0; //取消定时
135 4 break;
136 4 }
137 3
138 3 }
139 2 }
140 1 }
141
142
143 void keyscan()
144 {
145 1 {
146 2 P3=0xfe;
147 2 temp=P3;
148 2 temp=temp&0xf0;
149 2 if(temp!=0xf0)
150 2 {
151 3 delay(10);
152 3 if(temp!=0xf0)
153 3 {
154 4 temp=P3;
155 4 switch(temp)
156 4 {
157 5 case 0xee:
158 5 key=0;
159 5 wei++;
160 5 break;
161 5
162 5 case 0xde:
163 5 key=1;
164 5 wei++;
165 5 break;
166 5
167 5 case 0xbe:
168 5 key=2;
169 5 wei++;
170 5 break;
171 5
172 5 case 0x7e:
173 5 key=3;
174 5 wei++;
175 5 break;
176 5 }
177 4 while(temp!=0xf0)
178 4 {
C51 COMPILER V8.02 DINGSHIQI 06/22/2010 17:09:44 PAGE 4
179 5 temp=P3;
180 5 temp=temp&0xf0;
181 5 beep=0;
182 5 }
183 4 beep=1;
184 4 }
185 3 }
186 2 P3=0xfd;
187 2 temp=P3;
188 2 temp=temp&0xf0;
189 2 if(temp!=0xf0)
190 2 {
191 3 delay(10);
192 3 if(temp!=0xf0)
193 3 {
194 4 temp=P3;
195 4 switch(temp)
196 4 {
197 5 case 0xed:
198 5 key=4;
199 5 wei++;
200 5 break;
201 5
202 5 case 0xdd:
203 5 key=5;
204 5 wei++;
205 5 break;
206 5
207 5 case 0xbd:
208 5 key=6;
209 5 wei++;
210 5 break;
211 5
212 5 case 0x7d:
213 5 key=7;
214 5 wei++;
215 5 break;
216 5 }
217 4 while(temp!=0xf0)
218 4 {
219 5 temp=P3;
220 5 temp=temp&0xf0;
221 5 beep=0;
222 5 }
223 4 beep=1;
224 4 }
225 3 }
226 2 P3=0xfb;
227 2 temp=P3;
228 2 temp=temp&0xf0;
229 2 if(temp!=0xf0)
230 2 {
231 3 delay(10);
232 3 if(temp!=0xf0)
233 3 {
234 4 temp=P3;
235 4 switch(temp)
236 4 {
237 5 case 0xeb:
238 5 key=8;
239 5 wei++;
240 5 break;
C51 COMPILER V8.02 DINGSHIQI 06/22/2010 17:09:44 PAGE 5
241 5
242 5 case 0xdb:
243 5 key=9;
244 5 wei++;
245 5 break;
246 5 }
247 4 while(temp!=0xf0)
248 4 {
249 5 temp=P3;
250 5 temp=temp&0xf0;
251 5 beep=0;
252 5 }
253 4 beep=1;
254 4 }
255 3 }
256 2 }
257 1 }
258
259 void main()
260 {
261 1 TMOD=0x01;
262 1
263 1 TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
264 1 TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
265 1 ET0=1;
266 1 EA=1;
267 1
268 1 while(1)
269 1 { keyscan0();
270 2
271 2 if(ok==1)
272 2 { TR0=1;
273 3 wei=0;
274 3 display(a1,a0,b1,b0,c1,c0);
275 3 if(pp==20)
276 3 { pp=0;
277 4 m++;
278 4 if(m==60)
279 4 {
280 5 m=0;
281 5 f++;
282 5 if(f==60)
283 5 {
284 6 f=0;
285 6 s++;
286 6 if(s==24) //为24h一个循环,若要12h,只需在此改为12即可。
287 6 {
288 7 s=0;
289 7 }
290 6 }
291 5 }
292 4 }
293 3
294 3 a0=s%10;
295 3 a1=s/10;
296 3 b0=f%10;
297 3 b1=f/10;
298 3 c0=m%10;
299 3 c1=m/10;
300 3 display(a1,a0,b1,b0,c1,c0);
301 3 }
302 2 else
C51 COMPILER V8.02 DINGSHIQI 06/22/2010 17:09:44 PAGE 6
303 2 {
304 3 if(dingshi==1)
305 3 {
306 4 TR0=0;
307 4 display(shi20,shi10,fen20,fen10,miao20,miao10);
308 4 keyscan();
309 4 if(key!=10)
310 4 {
311 5 switch(wei)
312 5 {
313 6 case 1: if(key<3) //小时最高位为2
314 6 shi20=key;
315 6 else
316 6 wei--;
317 6 break;
318 6 case 2: if(a1==1|a1==0)
319 6 shi10=key;
320 6 else
321 6 if(key<5)
322 6 a0=key; //当小时最高位为2时,低位最高为4
323 6 break;
324 6 case 3: if(key<6) //分钟最高位为5
325 6 fen20=key;
326 6 else
327 6 wei--;
328 6 break;
329 6 case 4: fen10=key; break;
330 6 case 5: if(key<6) //秒最高位为5
331 6 miao20=key;
332 6 else
333 6 wei--;
334 6 break;
335 6 case 6: miao10=key; break;
336 6 }
337 5 key=10;
338 5 }
339 4 yidingshi=1;
340 4 display(shi20,shi10,fen20,fen10,miao20,miao10);
341 4 }
342 3 }
343 2 if(yidingshi==1)
344 2 {
345 3 if((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10)&&(c1==miao20)&&(c0==miao10))
346 3 beep=0;
347 3 }
348 2 if(((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10+1)&&(c1==miao20)&&(c0==miao10))||(yidingshi==0))//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -