?? 八路.lst
字號(hào):
C51 COMPILER V8.02 八路 04/21/2009 13:32:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 八路
OBJECT MODULE PLACED IN 八路.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 八路.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
4 0xf8,0x80,0x90};
5 uchar i;
6 uchar flag1,flag2,flag3,flag3_1,flag6,flag6_1,flag4,flag7,flag8,flag9; //flag1為搶答標(biāo)志
7 //flag2為顯示標(biāo)志
8 //flag3為中斷次數(shù)標(biāo)志
9 //flag4為鍵值標(biāo)志
10 //flag5為答題標(biāo)志
11 //flag6為中斷1次數(shù)標(biāo)志
12 uchar miao,fen,key,key2;
13 uchar fenzhi=1;
14 uchar dashi=1;
15 uchar qiangshi=0;
16 uchar fen1,fen2,fen3,fen4,fen5,fen6,fen7,fen8;
17 sbit haoce=P3^1;
18 sbit jishice=P3^4;
19 sbit fenshi=P3^3;
20 sbit fenge=P3^2;
21 sbit beep=P3^6;
22 uchar keyscan();
23 uchar nokeyscan();
24 void display(uchar);
25 uchar start();
26 void init0();
27 void init1();
28 void disshi(uchar);
29 void disfen(uchar);
30 void discha(uchar);
31 void fenshu();
32 uchar jifen();
33 void chaxun();
34 void disset(uchar,uchar,uchar);
35 void set();
36 void qiangda();
37 void main()
38 {
39 1 while(1)
40 1 {
41 2 chaxun();
42 2 set();
43 2 qiangda();
44 2 }
45 1 }
46 void init0()
47 {
48 1 TMOD=0X01;
49 1 TH0=(65536-45872)/256;//T0初值,50ms中斷一次
50 1 TL0=(65536-45872)%256;
51 1 EA=1;
52 1 ET0=1;
53 1 TR0=1;
54 1 }
55 void init1()
C51 COMPILER V8.02 八路 04/21/2009 13:32:20 PAGE 2
56 {
57 1 TMOD=0X10;
58 1 TH1=(65536-45872)/256;//T1初值,50ms中斷一次
59 1 TL1=(65536-45872)%256;
60 1 EA=1;
61 1 ET1=1;
62 1 TR1=1;
63 1 }
64 void time0() interrupt 1
65 {
66 1 TR1=0;
67 1 flag3++;
68 1 TH0=(65536-45872)/256;//T0初值,50ms中斷一次
69 1 TL0=(65536-45872)%256;
70 1 if(flag3==201) //10秒開始倒計(jì)時(shí)
71 1 {
72 2 flag3_1++;
73 2 flag3=0;
74 2 }
75 1 if(flag3_1==qiangshi)//qiangshi為1時(shí)是10s;
76 1 {
77 2
78 2 switch(flag3) //10秒搶答時(shí)間
79 2 {
80 3 case 0x14:miao=9;disshi(miao);break;
81 3 case 0x28:miao=8;disshi(miao);break;
82 3 case 0x3c:miao=7;disshi(miao);break;
83 3 case 0x50:miao=6;disshi(miao);break;
84 3 case 0x64:miao=5;disshi(miao);break;
85 3 case 0x78:miao=4;disshi(miao);break;
86 3 case 0x8c:miao=3;disshi(miao);break;
87 3 case 0xa0:miao=2;disshi(miao);break;
88 3 case 0xb4:miao=1;disshi(miao);break;
89 3 case 0xc8:miao=0;disshi(miao);
90 3 for(i=20;i>0;i--)
91 3 {
92 4 beep=~beep;
93 4 delay(50);
94 4 }
95 3 beep=1;
96 3 flag2=1;
97 3 TR0=0;
98 3 jishice=1;
99 3 break;
100 3 }
101 2 }
102 1 }
103 void time1() interrupt 3
104 {
105 1 flag6++;
106 1 TR0=0;
107 1 TH1=(65536-45872)/256;//T0初值,50ms中斷一次
108 1 TL1=(65536-45872)%256;
109 1 if(flag6==201) //20秒答題時(shí)間,10秒開始倒計(jì)時(shí)
110 1 {
111 2 flag6_1++;
112 2 flag6=0;
113 2 }
114 1 if(flag6_1==dashi)//dashi為1時(shí)是10s;
115 1 {
116 2 switch(flag6)
117 2 {
C51 COMPILER V8.02 八路 04/21/2009 13:32:20 PAGE 3
118 3 case 0x14:miao=9;disshi(miao);break;
119 3 case 0x28:miao=8;disshi(miao);break;
120 3 case 0x3c:miao=7;disshi(miao);break;
121 3 case 0x50:miao=6;disshi(miao);break;
122 3 case 0x64:miao=5;disshi(miao);break;
123 3 case 0x78:miao=4;disshi(miao);break;
124 3 case 0x8c:miao=3;disshi(miao);break;
125 3 case 0xa0:miao=2;disshi(miao);break;
126 3 case 0xb4:miao=1;disshi(miao);break;
127 3 case 0xc8:miao=0;disshi(miao);
128 3 for(i=20;i>0;i--)
129 3 {
130 4 beep=~beep;
131 4 delay(50);
132 4 }
133 3 beep=1;
134 3 flag1=0;
135 3 TR1=0;
136 3 fenshu();
137 3 break;
138 3 }
139 2 }
140 1 }
141 void qiangda()
142 {
143 1 if(start()==1)//等待搶答開始鍵按下
144 1 {
145 2 flag3=0;
146 2 flag3_1=0;
147 2 flag6=0;
148 2 flag6_1=0;
149 2 init0();
150 2 if(flag8==1)
151 2 {
152 3 flag8=0;
153 3 flag2=0;
154 3 }
155 2 while(!flag2)//判斷是否已有人搶答
156 2 {
157 3 flag4=keyscan();
158 3 if(flag4!=0) //有人按下才顯示
159 3 {
160 4 display(flag4);//顯示
161 4 }
162 3 }
163 2 }
164 1 }
165 uchar keyscan()//帶消抖的鍵盤掃描
166 {
167 1 uchar temp;
168 1 P1=0xfe;
169 1 temp=P1;
170 1 temp=temp&0xf0;
171 1 if(temp!=0xf0)
172 1 {
173 2 delay(10);
174 2 temp=P1;
175 2 temp=temp&0xf0;
176 2 if(temp!=0xf0)
177 2 {
178 3 temp=P1;
179 3 switch(temp)
C51 COMPILER V8.02 八路 04/21/2009 13:32:20 PAGE 4
180 3 {
181 4 case 0xee:key=1;break;
182 4 case 0xde:key=2;break;
183 4 case 0xbe:key=3;break;
184 4 case 0x7e:key=4;break;
185 4 default: key=0;
186 4 }
187 3 while(temp!=0xf0) //等待釋放
188 3 {
189 4 temp=P1;
190 4 temp=temp&0xf0;
191 4 }
192 3 }
193 2 }
194 1 P1=0xfd;
195 1 temp=P1;
196 1 temp=temp&0xf0;
197 1 if(temp!=0xf0)
198 1 {
199 2 delay(10);
200 2 temp=P1;
201 2 temp=temp&0xf0;
202 2 if(temp!=0xf0)
203 2 {
204 3 temp=P1;
205 3 switch(temp)
206 3 {
207 4 case 0xed:key=5;break;
208 4 case 0xdd:key=6;break;
209 4 case 0xbd:key=7;break;
210 4 case 0x7d:key=8;break;
211 4 default: key=0;
212 4 }
213 3 while(temp!=0xf0) //等待釋放
214 3 {
215 4 temp=P1;
216 4 temp=temp&0xf0;
217 4 }
218 3 }
219 2 }
220 1 return key;
221 1 }
222 uchar nokeyscan()//無消抖的鍵盤掃描
223 {
224 1 uchar temp;
225 1 P1=0xfe;
226 1 temp=P1;
227 1 temp=temp&0xf0;
228 1 if(temp!=0xf0)
229 1 {
230 2 temp=P1;
231 2 switch(temp)
232 2 {
233 3 case 0xee:key2=1;break;
234 3 case 0xde:key2=2;break;
235 3 case 0xbe:key2=3;break;
236 3 case 0x7e:key2=4;break;
237 3 default: key2=0;
238 3 }
239 2
240 2 }
241 1 P1=0xfd;
C51 COMPILER V8.02 八路 04/21/2009 13:32:20 PAGE 5
242 1 temp=P1;
243 1 temp=temp&0xf0;
244 1 if(temp!=0xf0)
245 1 {
246 2 temp=P1;
247 2 switch(temp)
248 2 {
249 3 case 0xed:key2=5;break;
250 3 case 0xdd:key2=6;break;
251 3 case 0xbd:key2=7;break;
252 3 case 0x7d:key2=8;break;
253 3 default: key2=0;
254 3 }
255 2 }
256 1 return key2;
257 1 }
258 void display(uchar num)//顯示函數(shù)
259 {
260 1 TR0=0;
261 1 flag2=1;
262 1 while(start()!=2)//等待答題開始鍵按下
263 1 {
264 2 haoce=0;
265 2 jishice=1;
266 2 P0=table[num];
267 2 delay(10);
268 2 haoce=1;
269 2 jishice=0;
270 2 P0=table[10-miao];
271 2 delay(10);
272 2 }
273 1 jishice=1;
274 1 haoce=1;
275 1 init1();
276 1 while(start()!=3);
277 1 TR1=0;
278 1 fenshu();
279 1 }
280 void disshi(uchar num1)//顯示倒計(jì)時(shí)
281 {
282 1 jishice=0;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -