?? 1420.lst
字號:
C51 COMPILER V8.02 1420 04/03/2008 09:30:30 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 1420
OBJECT MODULE PLACED IN D:\1420.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\1420.C DB SB OE
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3
4 sbit key_REC=P1^0;
5 sbit key_PLAYE=P1^1;
6 sbit key_PLAYL=P1^2;
7 sbit key_function=P1^6;
8
9 sbit REC=P1^3;
10 sbit PLAYE=P1^4;
11 sbit PLAYL=P1^5;
12
13
14 sbit key0=P2^7;
15
16
17
18 unsigned char key;
19 bit flag_rec=0,flag_playl=0,flag_playe=0,flag=0;
20 bit f0=0,f1=0;
21
22 //地址是0x00~0x9F 共160個 8個為一秒
23 unsigned char voice_addr[]= // 錄音的各地址
24 {0x00,0x08,0x10,0x18,0x20,
25 0x28,0x30,0x38,0x40,0x48,
26 0x50,0x58,0x60,0x68,0x70,
27 };
28 //
29 void delay_10us(unsigned char n)
30 {
31 1 do
32 1 {
33 2 _nop_();
34 2 _nop_();
35 2 _nop_();
36 2 _nop_();
37 2 _nop_();
38 2 }while(--n);
39 1 }
40 //
41 void delay_ms(unsigned int n)
42 {
43 1 do
44 1 {
45 2 delay_10us(230);
46 2 }while(--n);
47 1
48 1 }
49
50
51
52
53 //鍵控錄音
54 void Record()
55 {
C51 COMPILER V8.02 1420 04/03/2008 09:30:30 PAGE 2
56 1 while(flag_rec==1)
57 1 {
58 2 key=P2;
59 2 if(key==0xff)continue;//當key_REC按下過一次之后,則程序一直在這里執行直到有命令才開始錄音
60 2 //這是因為有continue與while的結果
61 2 delay_ms(10);
62 2 key=P2;
63 2 if(key==0xff)continue;
64 2 switch(key)
65 2 {
66 3 case 0xfe:
67 3 {
68 4 P0=voice_addr[0];
69 4 //錄音時因控制延時時間
70 4 //應讓延時時間小于錄音時間
71 4 REC=0;
72 4 delay_ms(500);
73 4
74 4 REC=1;
75 4 break;
76 4 }
77 3 case 0xfd:
78 3 {
79 4 P0=voice_addr[1];
80 4 REC=0;
81 4
82 4 delay_ms(500);
83 4
84 4 REC=1;
85 4
86 4 break;
87 4 }
88 3 case 0xfb:
89 3 {
90 4 P0=voice_addr[2];
91 4 REC=0;
92 4 delay_ms(500);
93 4
94 4 REC=1;
95 4 break;
96 4 }
97 3
98 3 default:
99 3 {
100 4 break;
101 4 }
102 3 }
103 2
104 2 flag_rec=0;
105 2 }
106 1
107 1
108 1
109 1 }
110
111
112 //電平放音子程序中的子程序
113 Playl1()
114 {
115 1 switch(key)
116 1 {
117 2 case 0xfe:
C51 COMPILER V8.02 1420 04/03/2008 09:30:30 PAGE 3
118 2 {
119 3 P0=0X00;
120 3 P0=voice_addr[0];
121 3 PLAYL=0;
122 3
123 3 delay_ms(600);
124 3
125 3 PLAYL=1;
126 3 break;
127 3 }
128 2 case 0xfd:
129 2 {
130 3 P0=0X00;
131 3 P0=voice_addr[1];
132 3 PLAYL=0;
133 3 delay_ms(300);
134 3
135 3 PLAYL=1;
136 3 break;
137 3 }
138 2 case 0xfb:
139 2 {
140 3 P0=0X00;
141 3 P0=voice_addr[2];
142 3 PLAYL=0;
143 3 delay_ms(600);
144 3
145 3 PLAYL=1;
146 3 break;
147 3 }
148 2
149 2 default:
150 2 {
151 3 break;
152 3 }
153 2
154 2
155 2 }
156 1 flag_playl=0;
157 1
158 1
159 1
160 1 }
161 //電平觸發播放函數
162 //變為低電平并保持直到變高或遇到結束標志
163 void Playl()
164 {
165 1
166 1 while(flag_playl==1)
167 1 {
168 2 if(f0==1) //循環
169 2 {
170 3 while(f0==1)
171 3 {
172 4
173 4 P0=0xc8;
174 4 PLAYL=0;
175 4 while(key_PLAYL==0);
176 4 PLAYL=1;
177 4 f0=0;
178 4 flag_playl=0;
179 4 }
C51 COMPILER V8.02 1420 04/03/2008 09:30:30 PAGE 4
180 3
181 3 }
182 2 else
183 2
184 2
185 2 {
186 3
187 3
188 3 key=P2;
189 3 if(key==0xff)continue;
190 3 delay_ms(10);
191 3 key=P2;
192 3 if(key==0xff)continue;
193 3 Playl1();//把下面的程序寫成了一個函數 在上面
194 3 }
195 2
196 2 }
197 1
198 1
199 1 }
200
201
202 //脈沖放音
203 Playe()
204 {
205 1 while(flag_playe==1)
206 1 {
207 2 if(f0==1) //循環
208 2 {
209 3
210 3 while(f0==1)
211 3 {
212 4 PLAYE=1;
213 4 P0=0xc8;
214 4 PLAYE=0;
215 4 if(key_PLAYL==1)continue;
216 4 delay_ms(10);
217 4 if(key_PLAYL==1)continue;
218 4 PLAYL=0;
219 4 key_PLAYL=1;
220 4 // PLAYE=1;
221 4 // PLAYL=0;////////////////???????????????????
222 4 //
223 4 //
224 4 // PLAYL=1;
225 4 f0=0;
226 4 flag_playe=0;
227 4 }
228 3
229 3 }
230 2 if(f1==1) //快進
231 2 {
232 3 PLAYE=1;
233 3 P0=0xd1;//
234 3 PLAYE=0;
235 3 f1=0;
236 3 flag_playe=0;
237 3 PLAYE=1;
238 3 PLAYE=0;
239 3
240 3 }
241 2 if((f0==0)&&(f1==0)) //在無操作模式下
C51 COMPILER V8.02 1420 04/03/2008 09:30:30 PAGE 5
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -