亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

     找回密碼
     立即注冊(cè)

    QQ登錄

    只需一步,快速開(kāi)始

    搜索
    查看: 6366|回復(fù): 2
    打印 上一主題 下一主題
    收起左側(cè)

    基于ISD4002與單片機(jī)的錄音筆設(shè)計(jì)程序與原理圖

    [復(fù)制鏈接]
    跳轉(zhuǎn)到指定樓層
    樓主
    ID:244863 發(fā)表于 2017-11-25 21:34 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
    這個(gè)isd4002沒(méi)法仿真只有原理圖和程序,是別人弄得課程設(shè)計(jì),感覺(jué)高大上就發(fā)上來(lái)了

    如果開(kāi)關(guān)選在VCC,為錄音狀態(tài)
    如果開(kāi)關(guān)選在GND,為放音狀態(tài)
    Altium Designer畫(huà)的原理圖如下:(51hei附件中可下載工程文件)


    單片機(jī)源程序如下:
    1. //*****************************************************
    2. // ISD4002-STC89C52開(kāi)發(fā)板演示例程 C51版本 *
    3. //*****************************************************

    4. #include <reg52.h>

    5. sbit SS      = P1^0; //片選
    6. sbit SCLK    = P1^3; //ISD4003時(shí)鐘
    7. sbit MOSI    = P1^1; //數(shù)據(jù)輸入
    8. sbit MISO    = P1^2; //數(shù)據(jù)輸出
    9. sbit LED     = P1^7; //指示燈
    10. sbit ISD_INT = P3^3; //中斷
    11. sbit AN      = P1^6; //執(zhí)行
    12. sbit STOP    = P1^5; //復(fù)位
    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串行發(fā)送子程序,8位數(shù)據(jù)
    37. //************************************
    38. void spi_send(unsigned char isdx)
    39. {         
    40.         unsigned char isx_counter;
    41.         SS=0; //ss=0,打開(kāi)spi通信端
    42.         SCLK=0;
    43.         for(isx_counter=0;isx_counter<8;isx_counter++) //先發(fā)低位再發(fā)高位,依次發(fā)送。
    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. //發(fā)送stop指令
    58. //*******************************
    59. void isd_stop(void)
    60. {         
    61.         delay(10);
    62.         spi_send(0x30);
    63.         SS=1;
    64.         delayms(50);
    65. }

    66. //*******************************
    67. //發(fā)送上電指令,并延遲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. //********發(fā)送掉電指令,并延遲50ms
    79. void isd_pd(void)
    80. {
    81.         delay(10);
    82.         spi_send(0x10);
    83.         SS=1;
    84.         delayms(50);
    85. }

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

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

    104. //*******************************
    105. //發(fā)送setplay指令
    106. //*******************************
    107. void isd_setplay(unsigned char adl,unsigned char adh)           
    108. {        
    109.         spi_send(adl); //發(fā)送放音起始地址低位
    110.         adh=adh|0xe0;
    111.         spi_send(adh); //發(fā)送放音起始地址高位
    112.         SS=1;
    113. }
    114. //*******************************
    115. //發(fā)送setrec指令
    116. void isd_setrec(unsigned char adl,unsigned char adh)
    117. {
    118.         spi_send(adl); //發(fā)送放音起始地址低位
    119.         adh=adh|0xa0;
    120.         spi_send(adh); //發(fā)送放音起始地址高位
    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; //關(guān)閉spi通信端
    152.                 isd_stop(); //發(fā)送stop指令
    153.                 return 1; //OVF為1,返回1
    154.         }
    155.         else
    156.         {
    157.                 SCLK=0;
    158.                 SS =1; //關(guān)閉spi通信端
    159.                 isd_stop(); //發(fā)送stop指令
    160.                 return 0; //OVF為0,返回0
    161.         }
    162. }
    163. //************************************************************************
    164. //主程序
    165. //功能:1.錄音時(shí),按住AN鍵,LED點(diǎn)亮開(kāi)始錄音,松開(kāi)AN即可停止錄音
    166. // 再次按下AN鍵,LED點(diǎn)亮開(kāi)始錄第二段音,依次類推,直到芯片溢出。
    167. // 按stop鍵芯片復(fù)位
    168. // 2.放音時(shí),按一下AN鍵,即播放一段語(yǔ)音。 按stop鍵芯片復(fù)位。
    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)                 //按鍵防抖動(dòng)
    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則轉(zhuǎn)入錄音部分
    187.                         {
    188.                                 delayms(500);         //延遲錄音        
    189.                                 isd_setrec(0x00,0x00); //發(fā)送0x0000h地址的setplay指令
    190.                                 do
    191.                                         {
    192.                                                 isd_rec();                 //發(fā)送rec指令
    193.                                                 delay(20);
    194.                                                 while(AN==0)         //等待錄音完畢
    195.                                                         {
    196.                                                                 if (ISD_INT==0) //如果芯片溢出,進(jìn)行LED閃爍提示,
    197.                                                                 isd_overflow(); //如果取消錄音(松開(kāi)AN鍵)則停止錄音,芯片復(fù)位
    198.                                                         }               
    199.                                                 if (ISD_INT==0)                break;
    200.                                                 LED=1;                                         //錄音完畢,LED熄滅
    201.                                                 isd_stop();                         //發(fā)送停止命令
    202.                                                 while(AN==1)                         //如果AN再次按下,開(kāi)始錄制下一段語(yǔ)音
    203.                                                         {
    204.                                                                 if(STOP==0)                 //如果按下STOP按鍵,則芯片復(fù)位
    205.                                                                 break;
    206.                                                                 if (AN==0)
    207.                                                                 delayms(500);
    208.                                                         }
    209.                                         }while(AN==0);        
    210.                         }
    211. ……………………

    212. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
    復(fù)制代碼

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



    評(píng)分

    參與人數(shù) 1黑幣 +50 收起 理由
    admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

    查看全部評(píng)分

    分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
    收藏收藏1 分享淘帖 頂 踩
    回復(fù)

    使用道具 舉報(bào)

    沙發(fā)
    ID:413541 發(fā)表于 2018-12-21 13:22 | 只看該作者
    謝謝樓主分享嘍
    回復(fù)

    使用道具 舉報(bào)

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

    地板
    ID:679011 發(fā)表于 2020-3-6 18:10 | 只看該作者
    請(qǐng)問(wèn)錄音/放音那里那個(gè)正方形,里面有個(gè)灰色圈圈是什么元器件呀
    回復(fù)

    使用道具 舉報(bào)

    本版積分規(guī)則

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

    Powered by 單片機(jī)教程網(wǎng)

    快速回復(fù) 返回頂部 返回列表