📄 main.lst
字号:
185 10 ;//用户挂机了,不用播放
186 10 }
187 9 }
188 8 else
189 8 {
190 9 KEY_Value=0;//没有按键或其它键,不用播放
191 9 }
192 8 }
193 7 else if(serial_rx_buff[0]==COFFE_ERROR_STATUS)
194 7 {
195 8 //播放咖啡机状态错误
196 8 }
197 7 //else if(serial_rx_buff[0]==COFFE_IDLE_STATUS)
198 7 //{
199 7 //
200 7 //}
201 7 else
202 7 {
203 8 //播放状态不能识别
204 8 }
205 7 //serial_rx_buff[0]=0x00;
206 7 }
207 6 else
208 6 {
209 7 //播放命令没有发送成功
210 7 }
211 6 }
212 5 else
213 5 {
214 6 //播放您的按键不合理,请重新选择
215 6 }
216 5 }
217 4 }
218 3 HandUp=0;
219 3 }
220 2 }
221 1 _nop_();
222 1 }
223
224 /**************************************************************************
225 * 函数原型: void ISD_Init(void);
226 * 功 能: 初始化
227 **************************************************************************/
228 void ISD_Init(void)
229 {
230 1 ISD_Reset();
231 1 ClrInt();
232 1 ISD_PU();
233 1 //SendChar(0xcc); //发送标志位!!!!!!!!!!!!1111
234 1 ClrInt();
235 1 ISD_WR_APC2(0xa8); //初始化之前的指令都不影响状态,且上电后为RDY=1
236 1 }
237 /**************************************************************************
238 * 函数原型: void ISD_PU(void);
239 * 功 能: 上电
240 **************************************************************************/
241 void ISD_PU(void)
C51 COMPILER V7.07 MAIN 12/19/2008 15:13:10 PAGE 5
242 {
243 1 do
244 1 {
245 2 // SendChar(0xdd); //发送标志位!!!!!!!!!!!!1111
246 2 ISD_SendData(PU);
247 2 ISD_SendData(0x00);
248 2 SS=1;
249 2 RdStatus();
250 2 // }while((SR0_L&0x04)&&(SR1&0x01)); //等待RDY=1且PU=1
251 2 }while(SR0_L&0x01); //等待CMD_ERR=0,则正确
252 1 delay_ms(100);
253 1 }
254 /**************************************************************************
255 * 函数原型: void RdStatus(void);
256 * 功 能: 读取状态 任何情况都可以进行 且执行后不影响状态
257 **************************************************************************/
258 void RdStatus(void)
259 {
260 1 ISD_SendData(RD_STATUS);
261 1 SR0_L =ISD_SendData(RD_STATUS);
262 1 ISD_SendData(0x00);
263 1 SR0_H =ISD_SendData(0x00);
264 1 ISD_SendData(0x00);
265 1 SR1 =ISD_SendData(0x00);
266 1 SS=1;
267 1 delay_ms(10);
268 1 //下面的几条语句放在了上面交叉
269 1 // SR0_L =ISD_SendData(RD_STATUS);
270 1 // SR0_H =ISD_SendData(0x00);
271 1 // SR1 =ISD_SendData(0x00);
272 1 // SS=1;
273 1 // SendChar(SR0_L);
274 1 // SendChar(SR0_H);
275 1 // SendChar(SR1);
276 1 // delay_ms(10);
277 1 }
278 /**************************************************************************
279 * 函数原型: void ISD_Play();
280 * 功 能: 播放 前:idle 后:idle
281 **************************************************************************/
282 void ISD_Play()
283 {
284 1 do{
285 2 ISD_SendData(0x50);
286 2 ISD_SendData(0x00);
287 2 SS=1;
288 2 delay_ms(10); //延迟10ms
289 2 //SendChar(0xdd);
290 2 RdStatus();
291 2 }while(SR0_L&0x01); //if(SR0_L^0==1){system Err}<CMD_Err==1>
292 1 //SendChar(0xee);
293 1 do
294 1 {
295 2 RdStatus();
296 2 }while(SR1&0x04); //FWD之前一定要是idle 空闲状态
297 1 // while(!(SR1&0x01)); //当RDY=0等待,变为1后执行STOP,停止当前操作
298 1 //SendChar(0xEF);
299 1 delay_ms(1000); //延迟10ms
300 1 // ISD_Stop(); //撤到下面快进里面
301 1 // ClrInt();
302 1 }
303
C51 COMPILER V7.07 MAIN 12/19/2008 15:13:10 PAGE 6
304 /**************************************************************************
305 * 函数原型: void ISD_FWD(void);
306 * 功 能: 掉电 前:idle 后:idle
307 **************************************************************************/
308 void ISD_FWD(void)
309 {
310 1 ISD_Stop();
311 1 ClrInt();
312 1 // do
313 1 // { SendChar(0xff);
314 1 // RdStatus();
315 1 // }while(SR1&0x01); //FWD之前一定要是idle 空闲状态
316 1 // do
317 1 // {
318 1 // SendChar(0xff);
319 1 ISD_SendData(FWD);
320 1 ISD_SendData(0x00);
321 1 SS=1;
322 1 // RdStatus();
323 1 // }while(SR0_L&0x01);
324 1 //SendChar(0xf1);
325 1 }
326
327 //-----------------------------------------------------------------------------
328 // 系统时钟初始化 SYSCLK_Init()
329 //-----------------------------------------------------------------------------
330
331 void SYSCLK_Init (void)
332 {
333 1 int i; /*延时计数器*/
334 1 OSCXCN = 0x67; /*打开外部晶体振荡器形式,并设为与24M匹配的模式*/
335 1 for (i=0; i < 256; i++) ; /*延时等待时钟稳定*/
336 1 while (!(OSCXCN & 0x80)) ; /*查询外部晶体是否稳定起振*/
337 1 OSCICN = 0x88; /*正式使用外部晶体作为系统时钟,并使能时钟丢失检测*/
338 1 }
339 //-----------------------------------------------------------------------------
340 // 端口初始化 PORT_Init() CLK/MOSI/MISO/SS P3.6担当片选功能,SS无用
341 //-----------------------------------------------------------------------------
342 void PORT_Init(void)
343 {
344 1 PRT3CF |= 0xC0; //P3.6推挽输出 控制片选,因为SPI一直在主方式,SS没有用
345 1 //不要下面的三行是因为模拟SPI
346 1 // PRT2MX |= 0X01; //SPI0OEN使能位,即SCK、MISO、MOSI、NSS分别连接到P2.0、P2.1、P2.2和P2.3
347 1 // PRT2CF |= 0X0F; //P2.0-P2.3推挽输出
348 1 // P2MODE |= 0X0F; //P2.0-P2.3数字输入
349 1 //下面为串口配置
350 1 //PRT0MX |= 0x41; //UARTEN=1,T2E=1,即P0.0-TX ,P0.1-RX ,T2-P0.6相连
351 1 PRT0MX |= 0x3D;
352 1 //P0MODE |= 0x03; // 配置P0.0和P0.1为数字输入
353 1 //PRT0CF |= 0x03; // 使能 RX, TX 为推挽输出
354 1 PRT0CF |= 0x01;
355 1 PRT1CF |= 0x80;
356 1 PRT3CF &= 0xf0;
357 1 P3MODE |= 0x0f;
358 1 }
359 //-----------------------------------------------------------------------------
360 // 串口初始化 UART_Init() T2初始化16位自动重装波特率可调
361 //-----------------------------------------------------------------------------
362 void UART_Init(void)
363 {
364 1 unsigned int temp;//计算得到的捕捉寄存器RCAP2H,RCAP2L定时初值
365 1 SCON = 0x50;//方式1:8位UART,波特率可调,无停止位,“0X50则是接收使能”
C51 COMPILER V7.07 MAIN 12/19/2008 15:13:10 PAGE 7
366 1 T2CON = 0x30; //TX和RX接受时钟都为T2
367 1 temp =(unsigned int)(65536 - SYSCLK/BAUDRATE/32);
368 1 RCAP2L =(unsigned char)(temp&0x00FF);
369 1 RCAP2H =(unsigned char)((temp>>8)&0x00FF);
370 1 TR2 = 1;
371 1 }
372
373 void Timer0_Init(void)
374 {
375 1 TMOD |=0x05;
376 1 TCON |=0x11;
377 1 TH0=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -