新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ISD4004語音程序

ISD4004語音程序

作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
  1. ///////////ISD4004語音播放部分/////////////////////////////
  2. ////當按下P3.5鍵時,從指定地址開始錄音
  3. /// 當按下P3.6鍵時,從指定地址開始放音
  4. /// 當按下P3.7鍵時,停止當前的操作
  5. /// 程序中的錄放停部分已做成子函數(shù),可以直接調(diào)用, 只需要輸入錄音的地址就行
  6. // 錄音地址的設定與芯片型號有關系,以ISD4004-16為例,ISD40044-16錄音時間為16
  7. // 分鐘,即16*60=960S, 根據(jù)4004的資料,960秒可分為2400段,也就是1S的段數(shù)為
  8. // 25段,即從,0000-0019H的內(nèi)容為1S,
  9. ///作者:長沙致望科技電子公司 WWW.CSMCU.COM
  10. ///版本:V1.0(2008.12.1)
  11. //實驗使用注意,按錄音鍵,要切換到放音時,可按停止再放音,也可以先按一下放音鍵,再按一次放音鍵,那可
  12. //原因:本程序在放音前,沒有做停止和下電處理,感興趣的朋友可以直接到停止部分加到放音子函數(shù)中。
  13. #include
  14. #include
  15. #defineucharunsignedchar
  16. #defineuintunsignedint
  17. ////////定義放音命令,定義常量//////
  18. #defineISDPOWERUP 0X20//ISD4004上電
  19. #defineISDSTOP 0X10//ISD4004下電
  20. #defineOPERSTOP 0X30//ISD4004停止當前操作
  21. #definePLAYSET 0XE0//ISD4004從指定地址開始放音
  22. #definePLAYCUR 0XF0//ISD4004從當前地址開始放音
  23. #defineRECSET 0XA0//ISD4004從指定地址開始錄音
  24. #defineRECCUR 0XB0//ISD4004從當前地址開始錄音
  25. sbit SS=P1^4;//LOW IS ACTIVELY
  26. sbit MOSI=P1^5;
  27. //sbit MISO=P1^7;
  28. sbit SCLK=P1^7;
  29. sbit K1=P3^5;
  30. sbit K2=P3^6;
  31. sbit K3=P3^7;
  32. sbitINT=P3^2;
  33. sbit LED1=P1^0;
  34. sbit LED2=P1^3;
  35. voiddelayms(uchar ms);
  36. uint addr;////全局變量//// 放音地址
  37. ////////////////放音部分子程序,放音地址由ADDR決定////
  38. voidplay()
  39. {
  40. uint y;
  41. SS=0;
  42. MOSI=0;//發(fā)送開始
  43. SCLK=0;
  44. for(y=0;y<8;y++)//上電
  45. {
  46. SCLK=0;
  47. if((0x20>>y)&0x01)MOSI=1;
  48. elseMOSI=0;
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. SCLK=1;
  53. _nop_();
  54. _nop_();
  55. _nop_();
  56. }//發(fā)送結束
  57. SS=1;//上電結束
  58. delayms(50);
  59. SS=0;
  60. MOSI=0;//發(fā)送地址
  61. SCLK=0;
  62. for(y=0;y<16;y++)
  63. {
  64. SCLK=0;
  65. if((addr>>y)&0x01)MOSI=1;
  66. elseMOSI=0;
  67. _nop_();
  68. _nop_();
  69. _nop_();
  70. SCLK=1;
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. }//發(fā)送地址結束
  75. MOSI=0;//放音
  76. SCLK=0;
  77. for(y=0;y<8;y++)
  78. {
  79. SCLK=0;
  80. if((0xe0>>y)&0x01)MOSI=1;
  81. elseMOSI=0;
  82. _nop_();
  83. _nop_();
  84. _nop_();
  85. SCLK=1;
  86. _nop_();
  87. _nop_();
  88. _nop_();
  89. }
  90. SS=1;
  91. SS=0;
  92. MOSI=0;//放音
  93. SCLK=0;
  94. for(y=0;y<8;y++)
  95. {
  96. SCLK=0;
  97. if((0xf0>>y)&0x01)MOSI=1;
  98. elseMOSI=0;
  99. _nop_();
  100. _nop_();
  101. _nop_();
  102. SCLK=1;
  103. _nop_();
  104. _nop_();
  105. _nop_();
  106. }
  107. SS=1;
  108. }
  109. //////////////////////////lu音部分子程序,地址由ADDR決定/////////////////////////
  110. voidrec()
  111. {uint y;
  112. SS=0;
  113. MOSI=0;//發(fā)送開始
  114. SCLK=0;
  115. for(y=0;y<8;y++)
  116. {
  117. SCLK=0;
  118. if((0x20>>y)&0x01)MOSI=1;
  119. elseMOSI=0;
  120. _nop_();
  121. _nop_();
  122. _nop_();
  123. SCLK=1;
  124. _nop_();
  125. _nop_();
  126. _nop_();
  127. }//發(fā)送結束
  128. SS=1;//上電結束
  129. delayms(50);
  130. SS=0;
  131. MOSI=0;//發(fā)送開始
  132. SCLK=0;
  133. for(y=0;y<8;y++)
  134. {
  135. SCLK=0;
  136. if((0x20>>y)&0x01)MOSI=1;
  137. elseMOSI=0;
  138. _nop_();
  139. _nop_();
  140. _nop_();
  141. SCLK=1;
  142. _nop_();
  143. _nop_();
  144. _nop_();
  145. }//發(fā)送結束
  146. SS=1;//上電結束
  147. delayms(50);
  148. delayms(50);
  149. SS=0;
  150. MOSI=0;//發(fā)送地址
  151. SCLK=0;
  152. for(y=0;y<16;y++)
  153. {
  154. SCLK=0;
  155. if((addr>>y)&0x01)MOSI=1;
  156. elseMOSI=0;
  157. _nop_();
  158. _nop_();
  159. _nop_();
  160. SCLK=1;
  161. _nop_();
  162. _nop_();
  163. _nop_();
  164. }//發(fā)送地址結束
  165. MOSI=0;
  166. SCLK=0;
  167. for(y=0;y<8;y++)
  168. {
  169. SCLK=0;
  170. if((0xa0>>y)&0x01)MOSI=1;
  171. elseMOSI=0;
  172. _nop_();
  173. _nop_();
  174. _nop_();
  175. SCLK=1;
  176. _nop_();
  177. _nop_();
  178. _nop_();
  179. }
  180. SS=1;
  181. SS=0;
  182. MOSI=0;
  183. SCLK=0;
  184. for(y=0;y<8;y++)
  185. {
  186. SCLK=0;
  187. if((0xb0>>y)&0x01)MOSI=1;
  188. elseMOSI=0;
  189. _nop_();
  190. _nop_();
  191. _nop_();
  192. SCLK=1;
  193. _nop_();
  194. _nop_();
  195. _nop_();
  196. }
  197. SS=1;
  198. }
  199. ////////////////////////////////////
  200. ////////////////////////////////
  201. voidstop()
  202. {
  203. uchar y;
  204. SS=1;
  205. SS=0;
  206. MOSI=0;//放音
  207. SCLK=0;
  208. for(y=0;y<8;y++)
  209. {
  210. SCLK=0;
  211. if((0x30>>y)&0x01)MOSI=1;
  212. elseMOSI=0;
  213. _nop_();
  214. _nop_();
  215. _nop_();
  216. SCLK=1;
  217. _nop_();
  218. _nop_();
  219. _nop_();
  220. }
  221. SS=1;
  222. }
  223. ////////////////////////////////////
  224. ////////////////////////////////////void press_key()
  225. voiddelayms(uchar ms)
  226. // 延時子程序
  227. {
  228. uchar j;
  229. while(ms--)
  230. {
  231. for(j=0;j<120;j++);
  232. }
  233. }
  234. ////////////////////////////////
  235. ////////////////////////////////////
  236. voidmain()
  237. {
  238. P1=0xff;
  239. P2=0XFF;
  240. P3=0XFF;
  241. while(1)
  242. {
  243. LED1=INT;
  244. LED2=0;
  245. if(K1==0)
  246. {
  247. delayms(10);
  248. while(K1==0);///松手判斷
  249. LED2=1;
  250. addr=0X05;/////從0X05單元開始
  251. rec();
  252. P1=0XFF;
  253. while(K1==1);
  254. delayms(10);
  255. while(K1==0);///松手判斷
  256. }
  257. if(K2==0)
  258. {
  259. delayms(10);
  260. while(K2==0);
  261. addr=0X05;
  262. play();
  263. P1=0XFF;
  264. }
  265. if(K3==0)
  266. {
  267. delayms(10);
  268. while(K3==0);
  269. LED1=1;
  270. LED2=1;
  271. stop();
  272. P1=0XFF;
  273. }
  274. }
  275. }


關鍵詞: ISD4004語音程

評論


技術專區(qū)

關閉