久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5847|回復: 2
收起左側

基于ISD4002與單片機的錄音筆設計程序與原理圖

[復制鏈接]
ID:244863 發表于 2017-11-25 21:34 | 顯示全部樓層 |閱讀模式
這個isd4002沒法仿真只有原理圖和程序,是別人弄得課程設計,感覺高大上就發上來了

如果開關選在VCC,為錄音狀態
如果開關選在GND,為放音狀態
Altium Designer畫的原理圖如下:(51hei附件中可下載工程文件)
0.png

單片機源程序如下:
  1. //*****************************************************
  2. // ISD4002-STC89C52開發板演示例程 C51版本 *
  3. //*****************************************************

  4. #include <reg52.h>

  5. sbit SS      = P1^0; //片選
  6. sbit SCLK    = P1^3; //ISD4003時鐘
  7. sbit MOSI    = P1^1; //數據輸入
  8. sbit MISO    = P1^2; //數據輸出
  9. sbit LED     = P1^7; //指示燈
  10. sbit ISD_INT = P3^3; //中斷
  11. sbit AN      = P1^6; //執行
  12. sbit STOP    = P1^5; //復位
  13. sbit PR      = P1^4; //PR=1錄音  PR=0放音

  14. void delay(unsigned int time) //延遲n微秒
  15. {
  16.         while(time!=0)
  17.         {
  18.                 time-- ;
  19.         }
  20. }
  21. void delayms(unsigned int time) //延遲n毫秒
  22. {         
  23.         TMOD=0x01;
  24.         for(time;time>0;time--)
  25.         {
  26.                 TH0=0xfc;
  27.                 TL0=0x18;
  28.                 TR0=1;
  29.                 while(TF0!=1)
  30.                 {;}
  31.                 TF0=0;
  32.                 TR0=0;
  33.         }

  34. }
  35. //************************************
  36. //ISD4002 spi串行發送子程序,8位數據
  37. //************************************
  38. void spi_send(unsigned char isdx)
  39. {         
  40.         unsigned char isx_counter;
  41.         SS=0; //ss=0,打開spi通信端
  42.         SCLK=0;
  43.         for(isx_counter=0;isx_counter<8;isx_counter++) //先發低位再發高位,依次發送。
  44.         {         
  45.                 if ((isdx&0x01)==1)
  46.                                         MOSI=1;
  47.                 else
  48.                                         MOSI=0;
  49.                 isdx=isdx>>1;
  50.                 SCLK=1;
  51.                 delay(2);
  52.                 SCLK=0;
  53.                 delay(2);
  54.         }
  55. }

  56. //*******************************
  57. //發送stop指令
  58. //*******************************
  59. void isd_stop(void)
  60. {         
  61.         delay(10);
  62.         spi_send(0x30);
  63.         SS=1;
  64.         delayms(50);
  65. }

  66. //*******************************
  67. //發送上電指令,并延遲50ms
  68. //*******************************
  69. void isd_pu(void)
  70. {
  71.         delay(10);
  72.         SS=0;
  73.         spi_send(0x20);
  74.         SS=1;
  75.         delayms(50);
  76. }


  77. //*******************************

  78. //********發送掉電指令,并延遲50ms
  79. void isd_pd(void)
  80. {
  81.         delay(10);
  82.         spi_send(0x10);
  83.         SS=1;
  84.         delayms(50);
  85. }

  86. //*******************************
  87. //發送play指令
  88. //*******************************
  89. void isd_play(void)
  90. {
  91.         LED=0;
  92.         spi_send(0xf0);
  93.         SS=1;
  94. }

  95. //*******************************
  96. //發送rec指令
  97. //*******************************
  98. void isd_rec(void)
  99. {
  100.         LED=0;
  101.         spi_send(0xb0);
  102.         SS=1;
  103. }

  104. //*******************************
  105. //發送setplay指令
  106. //*******************************
  107. void isd_setplay(unsigned char adl,unsigned char adh)           
  108. {        
  109.         spi_send(adl); //發送放音起始地址低位
  110.         adh=adh|0xe0;
  111.         spi_send(adh); //發送放音起始地址高位
  112.         SS=1;
  113. }
  114. //*******************************
  115. //發送setrec指令
  116. void isd_setrec(unsigned char adl,unsigned char adh)
  117. {
  118.         spi_send(adl); //發送放音起始地址低位
  119.         adh=adh|0xa0;
  120.         spi_send(adh); //發送放音起始地址高位
  121.         SS=1;
  122. }

  123. //************************************
  124. //芯片溢出,LED閃爍提醒停止錄音
  125. //************************************
  126. void isd_overflow(void)
  127. {
  128.         while(AN==0)
  129.         {
  130.                 LED=1;
  131.                 delayms(300);
  132.                 LED=0;
  133.                 delayms(300);
  134.         }
  135. }

  136. //************************************
  137. //檢查芯片是否溢出(讀OVF,并返回OVF值)
  138. //************************************
  139. unsigned char chk_isdovf(void)
  140. {
  141.         SS=0;
  142.         delay(2);
  143.         SCLK=0;
  144.         delay(2);
  145.         SCLK=1;
  146.         SCLK=0;
  147.         delay(2);

  148.         if (MISO==1)
  149.         {
  150.                 SCLK=0;
  151.                 SS =1; //關閉spi通信端
  152.                 isd_stop(); //發送stop指令
  153.                 return 1; //OVF為1,返回1
  154.         }
  155.         else
  156.         {
  157.                 SCLK=0;
  158.                 SS =1; //關閉spi通信端
  159.                 isd_stop(); //發送stop指令
  160.                 return 0; //OVF為0,返回0
  161.         }
  162. }
  163. //************************************************************************
  164. //主程序
  165. //功能:1.錄音時,按住AN鍵,LED點亮開始錄音,松開AN即可停止錄音
  166. // 再次按下AN鍵,LED點亮開始錄第二段音,依次類推,直到芯片溢出。
  167. // 按stop鍵芯片復位
  168. // 2.放音時,按一下AN鍵,即播放一段語音。 按stop鍵芯片復位。
  169. //************************************************************************
  170. void main(void)
  171. {        
  172.         unsigned char ovflog;
  173.         while(1)
  174.         {
  175.                 P0=P1=P2=P3=0xff; //初始化
  176.                 while (AN==1)                 //等待AN鍵按下
  177.                         {
  178.                                 if (AN==0)                 //按鍵防抖動
  179.                                 {delayms(20);}
  180.                         }
  181.                 delayms(300);        delayms(300);delayms(300);delayms(300);delayms(300);delayms(300);
  182.                 isd_pu(); //AN鍵按下,ISD上電并延遲50ms
  183.                 isd_pd();
  184.                 isd_pu();
  185.                 delayms(300);
  186.                 if (PR==1) //如果PR=1則轉入錄音部分
  187.                         {
  188.                                 delayms(500);         //延遲錄音        
  189.                                 isd_setrec(0x00,0x00); //發送0x0000h地址的setplay指令
  190.                                 do
  191.                                         {
  192.                                                 isd_rec();                 //發送rec指令
  193.                                                 delay(20);
  194.                                                 while(AN==0)         //等待錄音完畢
  195.                                                         {
  196.                                                                 if (ISD_INT==0) //如果芯片溢出,進行LED閃爍提示,
  197.                                                                 isd_overflow(); //如果取消錄音(松開AN鍵)則停止錄音,芯片復位
  198.                                                         }               
  199.                                                 if (ISD_INT==0)                break;
  200.                                                 LED=1;                                         //錄音完畢,LED熄滅
  201.                                                 isd_stop();                         //發送停止命令
  202.                                                 while(AN==1)                         //如果AN再次按下,開始錄制下一段語音
  203.                                                         {
  204.                                                                 if(STOP==0)                 //如果按下STOP按鍵,則芯片復位
  205.                                                                 break;
  206.                                                                 if (AN==0)
  207.                                                                 delayms(500);
  208.                                                         }
  209.                                         }while(AN==0);        
  210.                         }
  211. ……………………

  212. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
120基于單片機錄音筆設計(ISD4002版).rar (45.81 KB, 下載次數: 101)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:413541 發表于 2018-12-21 13:22 | 顯示全部樓層
謝謝樓主分享嘍
回復

使用道具 舉報

ID:480456 發表于 2019-3-20 13:48
程序編譯后和hex不一樣,用不了

ID:679011 發表于 2020-3-6 18:10 | 顯示全部樓層
請問錄音/放音那里那個正方形,里面有個灰色圈圈是什么元器件呀
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一二三区免费 | 亚洲国产精品一区二区第一页 | 亚洲理论在线观看电影 | 91精品久久久| 免费av观看| 国内自拍偷拍 | 亚洲一区成人 | 成人高清在线 | 国产精品 亚洲一区 | 国产精品色综合 | 美国av毛片 | 奇米影视在线 | 欧美日韩一区二区三区四区五区 | 91免费看片 | 青青草华人在线视频 | 欧洲精品在线观看 | 亚洲精品一区二区三区中文字幕 | 中国一级特黄视频 | 久久久xx | 成人久久久| www.一区二区三区.com | 日韩视频中文字幕 | 亚洲日本视频 | 成人免费一区二区 | 欧美日韩国产高清 | 免费看黄色视屏 | 成人亚洲性情网站www在线观看 | 一区二区三区电影在线观看 | 啪啪免费网站 | 一区二区三区欧美在线观看 | 亚洲精品在线国产 | 久久久精品视频免费看 | 人人九九精 | 国产毛片久久久久久久久春天 | 日韩在线看片 | 国产午夜精品一区二区三区四区 | 婷婷免费视频 | 久久99国产精一区二区三区 | 国产乱人伦精品一区二区 | 丝袜美腿av | 韩国av一区二区 |