📄 rob.lst
字号:
C51 COMPILER V6.12 ROB 01/13/2008 23:15:13 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE ROB
OBJECT MODULE PLACED IN .\rob.OBJ
COMPILER INVOKED BY: D:\Program_Files\Keil\C51\BIN\C51.EXE .\rob.C DEBUG OBJECTEXTEND
stmt level source
1 ///////////////////////12M
2 ////////////////改为按一次键即可清除并启动
3 ///////加一个开关作为两种抢答模式1不可连续抢答,2可连续抢答
4
5 #include<\atmel\AT89X51.h>
6 #include<intrins.h>
7
8
9 sbit robled1 = P3^1;
10 sbit robled2 = P3^3;
11 sbit robled3 = P3^5;
12 sbit robled4 = P1^7;
13 sbit startled = P2^0;
14 sbit speaker = P1^5;
15
16 sbit robkey1 = P1^0;
17 sbit robkey2 = P1^1;
18 sbit robkey3 = P1^2;
19 sbit robkey4 = P1^3;
20 sbit startkey = P1^4;
21
22 sbit statuskey = P0^1;
23
24 unsigned char th0_f; //在中断中装载的T0的值高8位
25 unsigned char tl0_f; //在中断中装载的T0的值低8位
26
27 void delay_10us(unsigned char delayvalue);
28 void delay_ms(unsigned int delayvalue);
29 unsigned char scankey(void);
30 void dispsub(void);
31 unsigned char scanrobkey(void);
32 void alarm(void);
33 void scankey1(void);
34
35 //T0的值,及输出频率对照表
36 unsigned char code freq[36*2]={
37 0xA9,0xEF,//00220HZ ,1 //0
38 0x93,0xF0,//00233HZ ,1#
39 0x73,0xF1,//00247HZ ,2
40 0x49,0xF2,//00262HZ ,2#
41 0x07,0xF3,//00277HZ ,3
42 0xC8,0xF3,//00294HZ ,4
43 0x73,0xF4,//00311HZ ,4#
44 0x1E,0xF5,//00330HZ ,5
45 0xB6,0xF5,//00349HZ ,5#
46 0x4C,0xF6,//00370HZ ,6
47 0xD7,0xF6,//00392HZ ,6#
48 0x5A,0xF7,//00415HZ ,7
49 0xD8,0xF7,//00440HZ 1 //12
50 0x4D,0xF8,//00466HZ 1# //13
51 0xBD,0xF8,//00494HZ 2 //14
52 0x24,0xF9,//00523HZ 2# //15
53 0x87,0xF9,//00554HZ 3 //16
54 0xE4,0xF9,//00587HZ 4 //17
55 0x3D,0xFA,//00622HZ 4# //18
C51 COMPILER V6.12 ROB 01/13/2008 23:15:13 PAGE 2
56 0x90,0xFA,//00659HZ 5 //19
57 0xDE,0xFA,//00698HZ 5# //20
58 0x29,0xFB,//00740HZ 6 //21
59 0x6F,0xFB,//00784HZ 6# //22
60 0xB1,0xFB,//00831HZ 7 //23
61 0xEF,0xFB,//00880HZ `1
62 0x2A,0xFC,//00932HZ `1#
63 0x62,0xFC,//00988HZ `2
64 0x95,0xFC,//01046HZ `2#
65 0xC7,0xFC,//01109HZ `3
66 0xF6,0xFC,//01175HZ `4
67 0x22,0xFD,//01244HZ `4#
68 0x4B,0xFD,//01318HZ `5
69 0x73,0xFD,//01397HZ `5#
70 0x98,0xFD,//01480HZ `6
71 0xBB,0xFD,//01568HZ `6#
72 0xDC,0xFD,//01661HZ `7 //35
73 };
74 ////////////////////////////////////////////
75 timer0() interrupt 1
76 {
77 1 TL0=tl0_f;TH0=th0_f; //调入预定时值
78 1 speaker=~speaker; //取反音乐输出IO
79 1 }
80
81
82 ////////////////////
83 ///////////////////////////////////////
84 void main(){
85 1 unsigned char i,j;
86 1 i=0;j=0;
87 1 speaker=0;
88 1 for(;;){
89 2 P3=0x0;
90 2 P1_5=0;
91 2 P1_7=0;
92 2 P2_0=1;
93 2 P2_2=0;
94 2 j=0;
95 2 for(;;){
96 3 j=scanrobkey();
97 3 if(j==0)break;
98 3 delay_ms(1);
99 3 }
100 2 if(statuskey==1){
101 3 if(startkey==0){
102 4 delay_ms(2);
103 4 if(startkey==0)i=scankey();
104 4 }
105 3 if(i!=0)dispsub();
106 3 i=0;
107 3 }
108 2 if(statuskey==0){
109 3 if(startkey==0){
110 4 delay_ms(2);
111 4 if(startkey==0)scankey1();
112 4 }
113 3 }
114 2 }
115 1 }
116 //////////////////12Mhz
117 unsigned char scanrobkey(void){
C51 COMPILER V6.12 ROB 01/13/2008 23:15:13 PAGE 3
118 1
119 1 if(robkey1==0)return(1);
120 1 if(robkey2==0)return(1);
121 1 if(robkey3==0)return(1);
122 1 if(robkey4==0)return(1);
123 1 return(0);
124 1 }
125 ///////////////////////////////////
126 void scankey1(void){
127 1 unsigned char temp;
128 1 unsigned char k1,k2,k3,k4;
129 1 k1=0;k2=0;k3=0;k4=0;
130 1 temp=0;
131 1 for(;;){ //testing startkey until startkey have been free
132 2 if(startkey==1){delay_ms(1);if(startkey==1)break;}
133 2 delay_ms(1);
134 2 }
135 1 P2_0=0;
136 1 P2_2=1;
137 1
138 1 for(;;){ //every key haved press will setup disabel
139 2 for(;;){
140 3 if((robkey1==0)&&(k1==0)){
141 4 k1=1;
142 4
143 4 robled1=1;
144 4 robled2=0;
145 4 robled3=0;
146 4 robled4=0;
147 4 break;
148 4 }
149 3 if((robkey2==0)&&(k2==0)){
150 4 k2=1;
151 4
152 4 robled1=0;
153 4 robled2=1;
154 4 robled3=0;
155 4 robled4=0;
156 4 break;
157 4 }
158 3 if((robkey3==0)&&(k3==0)){
159 4 k3=1;
160 4
161 4 robled1=0;
162 4 robled2=0;
163 4 robled3=1;
164 4 robled4=0;
165 4 break;
166 4 }
167 3 if((robkey4==0)&&(k4==0)){
168 4 k4=1;
169 4
170 4 robled1=0;
171 4 robled2=0;
172 4 robled3=0;
173 4 robled4=1;
174 4 break;
175 4 }
176 3 if(startkey==0){
177 4 delay_ms(2);
178 4 if(startkey==0){
179 5
C51 COMPILER V6.12 ROB 01/13/2008 23:15:13 PAGE 4
180 5 P3=0x0;
181 5 P1_5=0;
182 5 P1_7=0;
183 5 return;
184 5 }
185 4 }
186 3 }
187 2
188 2 P2_0=1;
189 2 P2_2=1;
190 2 alarm();
191 2 for(temp=0;temp<100;temp++){ //delay 2second exact startkey active other key disabel
192 3 delay_ms(20);
193 3 if(startkey==0){
194 4 delay_ms(2);
195 4 if(startkey==0){
196 5
197 5 P3=0x0;
198 5 P1_5=0;
199 5 P1_7=0;
200 5 return;
201 5 }
202 4 }
203 3 }
204 2 }
205 1
206 1 return;
207 1 }
208
209 //////////////////////
210 unsigned char scankey(void){
211 1
212 1 unsigned char key;
213 1 key=0;
214 1 for(;;){
215 2 if(startkey==1){delay_ms(1);if(startkey==1)break;}
216 2 delay_ms(1);
217 2 }
218 1 P2_0=0;
219 1 P2_2=1;
220 1 for(;;){
221 2 if(robkey1==0){key=1;robled1=1;break;}
222 2 if(robkey2==0){key=2;robled2=1;break;}
223 2 if(robkey3==0){key=3;robled3=1;break;}
224 2 if(robkey4==0){key=4;robled4=1;break;}
225 2 if(startkey==0){
226 3 delay_ms(2);
227 3 if(startkey==0){key=0;break;}
228 3 }
229 2 }
230 1 //if(key==0){
231 1 // for(;;){
232 1 // if(startkey==1){delay_ms(1);if(startkey==1)break;}
233 1 // delay_ms(1);
234 1 // }
235 1 // }
236 1 //if(key!=0)speaker=1;
237 1 return(key);
238 1 }
239 ///////////////////
240 void dispsub(void){
241 1 P2_0=1;
C51 COMPILER V6.12 ROB 01/13/2008 23:15:13 PAGE 5
242 1 P2_2=1;
243 1 alarm();
244 1 delay_10us(10);
245 1 for(;;){
246 2 speaker=0;
247 2 //switch(k){
248 2 // case 1:robled1=1;break;
249 2 // case 2:robled2=1;break;
250 2 // case 3:robled3=1;break;
251 2 // case 4:robled4=1;break;
252 2 // default: break;
253 2 // }
254 2 if(startkey==0){
255 3 delay_ms(2);
256 3 if(startkey==0)break;
257 3 }
258 2 }
259 1 //for(;;){
260 1 // if(startkey==1){delay_ms(1);if(startkey==1)break;}
261 1 // delay_ms(1);
262 1 // }
263 1 P3=0x0;
264 1 P1_5=0;
265 1 P1_7=0;
266 1 }
267
268
269 ///////////////////
270
271 void delay_10us(unsigned char delayvalue){
272 1
273 1 while(--delayvalue!=0){
274 2 _nop_();
275 2 _nop_();
276 2 _nop_();
277 2 _nop_();
278 2 continue;
279 2 }
280 1 }
281 //////////////////////////12Mhz
282 void delay_ms(unsigned int delayvalue){
283 1 unsigned int i,j;
284 1 for(i=0;i<delayvalue;i++)
285 1 for(j=0;j<123;j++);
286 1 }
287 ////////////////////////////////
288 void alarm(void){
289 1 unsigned long n;
290 1 unsigned char i,j=0;
291 1
292 1 unsigned char code jie8[8]={12,14,16,17,19,21,23,24};//1234567`1八个音符在频率表中的位置
293 1 unsigned char code Led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
294 1
295 1 TMOD = 0x01; //使用定时器0的16位工作模式
296 1 TR0 = 1;
297 1 ET0 = 1;
298 1 EA = 1;
299 1
300 1
301 1
302 1 for(i=7;i<8;i++) //循环播放8个音符
303 1 {
C51 COMPILER V6.12 ROB 01/13/2008 23:15:13 PAGE 6
304 2 P0=Led[j];
305 2 j++;
306 2 if(j==8)
307 2 j=0;
308 2 tl0_f=freq[jie8[i]*2]; //置一个音符的值
309 2 th0_f=freq[jie8[i]*2+1];
310 2 for(n=0;n<15000;n++); //延时1秒左右
311 2
312 2 }
313 1 speaker=0;
314 1 EA = 0;
315 1 TR0 = 0;
316 1 ET0 = 0;
317 1
318 1 }
319 /*
320 void alarm(void){
321 signed char i,j;
322 signed stone;
323 //stone=
324 for(i=1;i<10;i++){
325 for(j=1;j<20;j++){
326 speaker=0;
327 delay_10us(i*30);
328 speaker=1;
329 delay_10us((50-i)*30);
330 }
331 delay_ms(j);
332 }
333
334 }
335
336 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 601 ----
CONSTANT SIZE = 88 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 14
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 + -