最近在家無聊做東西玩,要用一個模塊驅動喇叭放提示音,一開始買的是WT588DM01圖的就是自帶8M Flash省心,結果TM還要另外買30幾塊錢的燒寫器才能用。
后來又咬咬牙買了個JQ6500語音模塊,插USB連電腦就能燒寫mp3進去,果然還是深圳廠商洞察需求。
買是買來了,但是廠家配的資料還分3個版本,PCB外觀都改了,PDF沒更新,只好自己搗鼓,按著參考資料用個51試試手。
51hei截圖_20200130165511.png (451.17 KB, 下載次數: 78)
下載附件
2020-1-30 16:55 上傳
這是PDF里面的模塊外面圖,實際買來的長下面的樣子
51hei截圖_20200130165628.png (111.95 KB, 下載次數: 71)
下載附件
2020-1-30 16:57 上傳
芯片是24腳,模塊16腳。引出來的16個腳沒變,就是模塊PCB板上面有略微變化,但是不影響對模塊引出來的16個腳直接使用。
51hei截圖_20200130165417.png (22.97 KB, 下載次數: 81)
下載附件
2020-1-30 16:54 上傳
模塊接線原理圖,SPK+和SPK-實測可以直接接無源蜂鳴器。
單片機源程序如下:
- #include <reg51.h>//頭文件
- #include <intrins.h>
- /*
- 本模塊的第九腳也就是RX腳連接到單片機的P3^1
- 第十腳也就是TX腳連接到單片機的P3^0(如果你不處理本模塊返回的數據可以不連接)
- 同時本模塊和單片機還要共地急GND連接GND
- 本模塊五伏供電也可以直接由單片機上的電源供電
- */
- typedef unsigned char uint8;
- typedef unsigned int uint16;
- sbit KEY1=P3^2;//第一曲鍵
- sbit KEY2=P3^3;//第一曲循環鍵
- sbit KEY3=P3^4;//暫停鍵
- sbit KEY4=P3^5;//進入睡眠鍵
- uint8 First[]={0x7E,0x04,0x03,0x00,0X01,0xEF};//第一曲指令
- uint8 Next[]={0x7E,0x03,0x11,0x01,0xEF}; // 第一首循環
- uint8 Add[]={0x7E ,0x02, 0x0E, 0xEF}; // 0x0e暫停
- uint8 Sub[]={0x7E ,0x02 ,0x0A, 0xEF}; // 0x0a進入睡眠
- void delay150ms(void) //誤差 -0.000000000047us
- {
- unsigned char a,b,c;
- for(c=6;c>0;c--)
- for(b=52;b>0;b--)
- for(a=220;a>0;a--);
- _nop_(); //if Keil,require use intrins.h
- }
- /*
- * UART初始化
- * 波特率:9600
- */
- void UART_init(void)
- {
- SCON = 0x50; // 10位uart,允許串行接受
- TMOD = 0x20; // 定時器1工作在方式2(自動重裝) 0010 0000
- TH1 = 0xFD;
- TL1 = 0xFD; //設置波特率為9600
- TR1 = 1;
- }
- /*
- * UART 發送一字節
- 入口參數uint8的數據類型 即要發送的數據
- */
- void UART_send_byte(uint8 dat)
- {
- SBUF = dat;
- while (TI == 0);
- TI = 0;
- }
- /*
- * UART 發送字符串
- 第一個參數要發送字符串或數據的首地址
- 第二個參數是要發送的數據或字符串的長度
- */
- void UART_send_string(uint8 *buf,uint8 len)
- { uint8 i;
- for(i=0;i<len;i++)
- UART_send_byte(*buf++);
- }
- main()
- {
- UART_init();//串口初始化
-
- while (1) //一個大循環一直在檢測按鍵和發送指令
- { if(KEY1==0)//如果第一個鍵被按下播放第一段
- { while(!KEY1);//等待按鍵松開
- UART_send_string(First,6);
- }
- else if(KEY2==0)//如果第二個按鍵按下循環第一曲
- { while(!KEY2);//等待按鍵松開
- UART_send_string(Next,5);
- delay150ms(); //經測試,兩個指令之間延時150ms效果最好
- UART_send_string(First,6);
- }
- else if(KEY3==0)//如果第三個按鍵按下暫停播放
- { while(!KEY3);//等待按鍵松開
- UART_send_string(Add,4);
- }
- else if(KEY4==0)//如果第四個按鍵按下進入睡眠狀態
- { while(!KEY4);//等待按鍵松開
- UART_send_string(Sub,4);
- }
- }
- }
復制代碼 用到了四個按鍵,還有一個串口,每檢測到一個按鍵的按下就利用單片機給模塊JQ6500發串口指令,兩個指令之間不少于150ms(實測),不然會沒反應。
順手畫了AD 的原理圖庫和PCB庫
JQ6500原理圖庫和PCB庫.zip
(544.78 KB, 下載次數: 66)
2020-1-30 17:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|