新聞中心

        ISD4004語音程序

        作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
        1. ///////////ISD4004語音播放部分/////////////////////////////
        2. ////當(dāng)按下P3.5鍵時(shí),從指定地址開始錄音
        3. /// 當(dāng)按下P3.6鍵時(shí),從指定地址開始放音
        4. /// 當(dāng)按下P3.7鍵時(shí),停止當(dāng)前的操作
        5. /// 程序中的錄放停部分已做成子函數(shù),可以直接調(diào)用, 只需要輸入錄音的地址就行
        6. // 錄音地址的設(shè)定與芯片型號(hào)有關(guān)系,以ISD4004-16為例,ISD40044-16錄音時(shí)間為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. //實(shí)驗(yàn)使用注意,按錄音鍵,要切換到放音時(shí),可按停止再放音,也可以先按一下放音鍵,再按一次放音鍵,那可
        12. //原因:本程序在放音前,沒有做停止和下電處理,感興趣的朋友可以直接到停止部分加到放音子函數(shù)中。
        13. #include
        14. #include
        15. #defineucharunsignedchar
        16. #defineuintunsignedint
        17. ////////定義放音命令,定義常量//////
        18. #defineISDPOWERUP 0X20//ISD4004上電
        19. #defineISDSTOP 0X10//ISD4004下電
        20. #defineOPERSTOP 0X30//ISD4004停止當(dāng)前操作
        21. #definePLAYSET 0XE0//ISD4004從指定地址開始放音
        22. #definePLAYCUR 0XF0//ISD4004從當(dāng)前地址開始放音
        23. #defineRECSET 0XA0//ISD4004從指定地址開始錄音
        24. #defineRECCUR 0XB0//ISD4004從當(dāng)前地址開始錄音
        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ā)送結(jié)束
        57. SS=1;//上電結(jié)束
        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ā)送地址結(jié)束
        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ā)送結(jié)束
        128. SS=1;//上電結(jié)束
        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ā)送結(jié)束
        146. SS=1;//上電結(jié)束
        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ā)送地址結(jié)束
        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. // 延時(shí)子程序
        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. }


        關(guān)鍵詞: ISD4004語音程

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 墨竹工卡县| 高邑县| 合作市| 浮山县| 盐池县| 吴川市| 安新县| 合肥市| 新龙县| 溧阳市| 沂南县| 凯里市| 龙井市| 株洲县| 万安县| 成武县| 墨竹工卡县| 东丽区| 秦安县| 民丰县| 镇巴县| 盐亭县| 闽清县| 阿鲁科尔沁旗| 和林格尔县| 商都县| 双辽市| 麟游县| 东阳市| 吉木萨尔县| 皋兰县| 石楼县| 道孚县| 丰镇市| 大田县| 三门峡市| 宜川县| 博湖县| 榆树市| 枞阳县| 尉氏县|