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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9015|回復: 12
打印 上一主題 下一主題
收起左側

基于ISD4004的單片機錄音筆程序源碼與實物設計

  [復制鏈接]
跳轉到指定樓層
樓主
ID:284357 發(fā)表于 2018-6-16 11:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
制作出來實物圖如下:


單片機源程序如下:
  1. // 以ISD4004-8錄音時間為8分鐘,即8*60=480S根據(jù)4004的資料,480秒可分為2400段,也就是1S的段數(shù)為
  2. //  5段,即從,0000-0005H的內容為1秒。0X0000-0X012C ;0X012D-0X0258;0X259-0X0384;0X0385-0X04B0.
  3. #include <reg52.h>
  4. #include <intrins.h>
  5. #include"1602.c"
  6. #include"eeprom.h"
  7. #define uchar unsigned  char
  8. #define uint  unsigned  int
  9. bit playbit,recbit;        //定義兩個位變量,放音和錄音位

  10. ////////定義放音命令,定義常量//////
  11. #define ISDPOWERUP      0X20           //ISD4004上電
  12. #define ISDSTOP         0X10           //ISD4004下電
  13. #define OPERSTOP        0X30           //ISD4004停止當前操作
  14. #define PLAYSET         0XE0           //ISD4004從指定地址開始放音
  15. #define PLAYCUR         0XF0           //ISD4004從當前地址開始放音
  16. #define RECSET          0XA0                 //ISD4004從指定地址開始錄音
  17. #define RECCUR          0XB0                   //ISD4004從當前地址開始錄音

  18. sbit   SCLK=P3^7;
  19. sbit   SS=P3^6;            //LOW IS ACTIVELY
  20. sbit   MOSI=P3^5;
  21. //sbit   MISO=P3^4;

  22. sbit   K1=P1^2;
  23. sbit   K2=P1^3;
  24. sbit   K3=P1^4;                  //按鍵輸入

  25. sbit   LED1=P1^0;
  26. sbit   LED2=P1^1;          //指示燈

  27. uchar aa,bb,cc,dd,ee;
  28. uchar num_rec=0;
  29. void  delayms(uchar ms);
  30. uchar playcout,reccout;         //放音和錄音次數(shù)。               
  31. ////////////////放音部分子程序,放音地址由ADDR決定////
  32. void play(uint addr)
  33. {         uint y;
  34.         SS=0;
  35.         MOSI=0;//發(fā)送開始
  36.         SCLK=0;
  37.         for(y=0;y<8;y++)
  38.         {
  39.                 SCLK=0;
  40.                 if((0x20>>y)&0x01)MOSI=1;
  41.                 else MOSI=0;
  42.                 _nop_();
  43.                 _nop_();
  44.                 _nop_();
  45.                 SCLK=1;
  46.                 _nop_();
  47.                 _nop_();
  48.                 _nop_();
  49.         }//發(fā)送結束
  50.         SS=1;//上電結束
  51.         delayms(50);
  52.         SS=0;
  53.         MOSI=0;//發(fā)送地址
  54.         SCLK=0;
  55.         for(y=0;y<16;y++)
  56.         {
  57.                 SCLK=0;
  58.                 if((addr>>y)&0x01)MOSI=1;
  59.                 else MOSI=0;
  60.                 _nop_();
  61.                 _nop_();
  62.                 _nop_();
  63.                  SCLK=1;
  64.                 _nop_();
  65.                 _nop_();
  66.                 _nop_();
  67.         }//發(fā)送地址結束
  68.         MOSI=0;//放音
  69.         SCLK=0;
  70.         for(y=0;y<8;y++)
  71.         {
  72.                 SCLK=0;
  73.                 if((0xe0>>y)&0x01)MOSI=1;
  74.                 else MOSI=0;
  75.                 _nop_();
  76.                 _nop_();
  77.                 _nop_();
  78.                 SCLK=1;
  79.                 _nop_();
  80.                 _nop_();
  81.                 _nop_();
  82.         }
  83.         SS=1;
  84.         SS=0;
  85.         MOSI=0;//放音
  86.         SCLK=0;
  87.         for(y=0;y<8;y++)
  88.         {
  89.                 SCLK=0;
  90.                 if((0xf0>>y)&0x01)MOSI=1;
  91.                 else MOSI=0;
  92.                 _nop_();
  93.                 _nop_();
  94.                 _nop_();
  95.                 SCLK=1;
  96.                 _nop_();
  97.                 _nop_();
  98.                 _nop_();
  99.         }
  100.         SS=1;          }       
  101. //////////////////////////lu音部分子程序,地址由ADDR決定/////////////////////////
  102. void rec(addr)               
  103. {         uint y;       
  104.         SS=0;
  105.         MOSI=0;//發(fā)送開始
  106.         SCLK=0;
  107.         for(y=0;y<8;y++)
  108.         {
  109.                 SCLK=0;
  110.                 if((0x20>>y)&0x01)MOSI=1;
  111.                 else MOSI=0;
  112.                 _nop_();
  113.                 _nop_();
  114.                 _nop_();
  115.                 SCLK=1;
  116.                 _nop_();
  117.                 _nop_();
  118.                 _nop_();
  119.         }//發(fā)送結束
  120.         SS=1;//上電結束
  121.         delayms(50);
  122.         SS=0;
  123.         MOSI=0;//發(fā)送開始
  124.         SCLK=0;
  125.         for(y=0;y<8;y++)
  126.         {
  127.                 SCLK=0;
  128.                 if((0x20>>y)&0x01)MOSI=1;
  129.                 else MOSI=0;
  130.                 _nop_();
  131.                 _nop_();
  132.                 _nop_();
  133.                 SCLK=1;
  134.                 _nop_();
  135.                 _nop_();
  136.                 _nop_();
  137.         }//發(fā)送結束
  138.         SS=1;//上電結束
  139.         delayms(50);
  140.         delayms(50);
  141.         SS=0;
  142.         MOSI=0;//發(fā)送地址
  143.         SCLK=0;
  144.         for(y=0;y<16;y++)
  145.         {
  146.                 SCLK=0;
  147.                 if((addr>>y)&0x01)MOSI=1;
  148.                 else MOSI=0;
  149.                 _nop_();
  150.                 _nop_();
  151.                 _nop_();
  152.                 SCLK=1;
  153.                 _nop_();
  154.                 _nop_();
  155.                 _nop_();
  156.         }//發(fā)送地址結束
  157.         MOSI=0;
  158.         SCLK=0;
  159.         for(y=0;y<8;y++)
  160.         {
  161.                 SCLK=0;
  162.                 if((0xa0>>y)&0x01)MOSI=1;
  163.                 else MOSI=0;
  164.                 _nop_();
  165.                 _nop_();
  166.                 _nop_();
  167.                 SCLK=1;
  168.                 _nop_();
  169.                 _nop_();
  170.                 _nop_();
  171.         }
  172.         SS=1;
  173.         SS=0;
  174.         MOSI=0;
  175.         SCLK=0;
  176.         for(y=0;y<8;y++)
  177.         {
  178.                 SCLK=0;
  179.                 if((0xb0>>y)&0x01)MOSI=1;
  180.                 else MOSI=0;
  181.                 _nop_();
  182.                 _nop_();
  183.                 _nop_();
  184.                 SCLK=1;
  185.                 _nop_();
  186.                 _nop_();
  187.                 _nop_();
  188.         }
  189.         SS=1;          }

  190. ////////////////////////////////////
  191. ////////////////////////////////
  192. void stop()
  193. {
  194.     uchar y;
  195.         SS=1;
  196.         SS=0;
  197.         MOSI=0;//放音
  198.         SCLK=0;
  199.         for(y=0;y<8;y++)
  200.         {
  201.                 SCLK=0;
  202.                 if((0x30>>y)&0x01)MOSI=1;
  203.                 else MOSI=0;
  204.                 _nop_();
  205.                 _nop_();
  206.                 _nop_();
  207.                 SCLK=1;
  208.                 _nop_();
  209.                 _nop_();
  210.                 _nop_();
  211.         }
  212.         SS=1;
  213. }
  214. ////////////////////////////////////
  215. ////////////////////////////////////
  216. void delayms(uchar ms)       
  217. // 延時子程序
  218. {                                               
  219.         uchar j;
  220.         while(ms--)
  221.         {
  222.                 for(j = 0; j < 120; j++);
  223.         }
  224. }
  225. ////////////////////////////////
  226. void playsound()        ///錄放音子函數(shù)
  227. {
  228.   if(playbit)
  229.   {
  230.      playbit=0;
  231.      switch(playcout)
  232.     {                         ///////////====每段60S=====////////////////
  233.          case 0x01:{play(0x0000);LCD_write_str(0,0,"NUM:1 Playing  ");}break;        //此處第一段音樂的開始地址為0X00,到0X012d地址結束,約為60秒。
  234.      case 0x02:{play(0x012d);LCD_write_str(0,0,"NUM:2 Playing  ");}break;
  235.      case 0x03:{play(0x0259);LCD_write_str(0,0,"NUM:3 Playing  ");}break;
  236.      case 0x04:{play(0x0385);LCD_write_str(0,0,"NUM:4 Playing  ");}break;
  237.     }
  238.    }
  239.   if(recbit)
  240.    {
  241.     recbit=0;
  242.     switch(reccout)
  243.         {   
  244.              case 0x01:{rec(0x0000); LCD_write_str(0,0,"NUM:1 Recording");aa=1;}break;
  245.              case 0x02:{rec(0x012d);LCD_write_str(0,0,"NUM:2 Recording");aa=1;}break;
  246.              case 0x03:{rec(0x0259);LCD_write_str(0,0,"NUM:3 Recording");aa=1;}break;
  247.              case 0x04:{rec(0x0385);LCD_write_str(0,0,"NUM:4 Recording");aa=1;}break;
  248.      }
  249.     }
  250. }
  251. bit key_bit1=0,key_bit2=0;
  252. uchar num11;
  253. uchar  play_count=4,rec_count=4;
  254. ////////////////////////////////////
  255. void keyscan()  //直控鍵盤掃描子程序。
  256. {

  257.                    if(K1==0)
  258.               {
  259.                     while(K1==0);
  260.                         key_bit1=1;
  261.                     recbit=1;
  262.                     reccout++;
  263.                          LED2=0;LED1=1;
  264.                     if(reccout>rec_count)          //
  265.                     reccout=1;
  266.                   }
  267.                   if(K2==0&&key_bit2==0)
  268.                     {
  269.                            while(K2==0);
  270.                            key_bit1=1;
  271.                            playbit=1;
  272.                        playcout++;
  273.                            LED1=0;LED2=1;
  274.                            if(playcout>play_count)
  275.                            playcout=1;       
  276.                 //           reccout=num_rec;                  
  277.                    }                             
  278.                  if(K3==0&&key_bit1==1)
  279.                     {
  280.                           while(K3==0);
  281.                           stop();
  282.                           LED2=1;
  283.                           LED1=1;
  284.                           if(aa==1){
  285.                           num_rec++;
  286.                           aa=0;       
  287.                           if(num_rec>4){
  288.                                  num_rec=1;
  289.                                 key_bit1=0;
  290.                           }
  291.                           }
  292.                           ISP_ERASE(0x2c00);                //注意:字節(jié)編程時必須要先要擦除整個扇區(qū)       
  293.                           ISP_PROGRAM(0x2c00, num_rec);        //寫入eeprom 掉電保存
  294.                           ISP_PROGRAM(0x2c01, reccout);
  295.                           play_count=num_rec;                //保存播放的段數(shù)
  296.                       reccout=num_rec;                //從第幾段錄起
  297.                           LCD_write_str(0,0,"                ");
  298.                           key_bit1=0;
  299.                   }
  300. ////////////////////////////////////////////////////////////////////////////////////////////////
  301.                  if(K3==0&&key_bit1==0)                                        //選擇播放哪段
  302.                     {
  303.                            while(K3==0&&key_bit1==0);
  304.                                 key_bit2=1;
  305.                             num11++;                       
  306.                            if(num11>play_count)
  307.                            {
  308.                                    num11=0;
  309.                                    bb=0;cc=0;dd=0;
  310.                                    key_bit2=0;
  311.                                    LCD_write_str(0,0,"                ");
  312.                            }
  313.                                 switch(num11)
  314.                           {   
  315.                                      case 1:{LCD_write_str(0,0,"NUM:1 Rec    ");bb=1;cc=0;dd=0;ee=0;}break;
  316.                                      case 2:{LCD_write_str(0,0,"NUM:2 Rec    ");bb=0;cc=1;dd=0;ee=0;}break;
  317.                                      case 3:{LCD_write_str(0,0,"NUM:3 Rec    ");cc=0;bb=0;dd=1;ee=0;}break;
  318.                                      case 4:{LCD_write_str(0,0,"NUM:4 Rec    ");cc=0;bb=0;dd=0;ee=1;}break;
  319.                       }               
  320.                         }
  321.                         if(bb==1){

  322.                                   if(K2==0&&key_bit2==1)
  323.                           {
  324.                                     while(K2==0);        
  325.                                         key_bit1=1;
  326.                                         play(0x0000);
  327.                                         LCD_write_str(0,0,"NUM:1 Playing  ");
  328.                                
  329.                                   }
  330.                          }
  331.                          if(cc==1){

  332.                                   if(K2==0&&key_bit2==1)
  333.                           {
  334.                                     while(K2==0);
  335.                                         key_bit1=1;
  336.                                         play(0x012d);
  337.                                         LCD_write_str(0,0,"NUM:2 Playing  ");
  338.                                   }
  339.                          }
  340.                          if(dd==1){

  341.                                   if(K2==0&&key_bit2==1)
  342.                           {
  343.                                     while(K2==0);
  344.                                         key_bit1=1;
  345.                                         play(0x0259);
  346.                                         LCD_write_str(0,0,"NUM:3 Playing  ");

  347.                                   }
  348.                          }
  349.                      if(ee==1){

  350.                                   if(K2==0&&key_bit2==1)
  351.                           {
  352.                                     while(K2==0);
  353.                                         key_bit1=1;
  354.                                         play(0x0385);
  355.                                         LCD_write_str(0,0,"NUM:4 Playing  ");
  356.                                   }
  357.                          }

  358. }
  359. ////////////////////////////////////////////////
  360. /////////以下部分為主程序///////////////////
  361. void main()
  362. {  
  363.    num_rec = ISP_READ(0x2c00);  //保存數(shù)值回讀
  364.    reccout = ISP_READ(0x2c01);
  365.    play_count=num_rec;                //保存條數(shù)
  366.    init1602();                                 //液晶初始化
  367.    LCD_write_str(0,1,"N:");
  368.    stop();
  369.         while(1)
  370.            {
  371.               keyscan();           //按鍵掃描
  372.               playsound();           //錄播放

  373.                   Write_num(0xC2,num_rec);        //顯示條數(shù)
  374.                          
  375.                    }


  376. }
  377.             
復制代碼

所有資料51hei提供下載:
基于單片機錄音筆設計.rar (10.23 MB, 下載次數(shù): 257)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:380971 發(fā)表于 2018-8-2 21:31 | 只看該作者
圖紙沒有對應引腳號怎么接?
回復

使用道具 舉報

板凳
ID:438436 發(fā)表于 2018-12-3 15:33 | 只看該作者
劉風 發(fā)表于 2018-8-2 21:31
圖紙沒有對應引腳號怎么接?

兄弟在么。能不能把里面的東西共享一下。
回復

使用道具 舉報

地板
ID:352018 發(fā)表于 2020-2-23 15:52 | 只看該作者
有仿真嗎
回復

使用道具 舉報

5#
ID:697580 發(fā)表于 2020-2-24 19:20 來自手機 | 只看該作者
請問有講解視頻嗎?
回復

使用道具 舉報

6#
ID:284357 發(fā)表于 2020-8-6 11:06 | 只看該作者
劉風 發(fā)表于 2018-8-2 21:31
圖紙沒有對應引腳號怎么接?

你可以根據(jù)那個程序的引腳定義來接啊
回復

使用道具 舉報

7#
ID:284357 發(fā)表于 2020-8-6 11:07 | 只看該作者
18135776781 發(fā)表于 2020-2-24 19:20
請問有講解視頻嗎?

沒有講解視頻
回復

使用道具 舉報

8#
ID:848415 發(fā)表于 2020-12-5 16:42 | 只看該作者
我已經下載了你的程序,請問一下,第一張圖片上面藍色的那個小板子是什么啊?是AM1117嗎?
回復

使用道具 舉報

9#
ID:848415 發(fā)表于 2020-12-5 16:44 | 只看該作者
另外,4004好像沒有擦除錄音的指令啊?
回復

使用道具 舉報

10#
ID:167530 發(fā)表于 2021-2-3 08:58 | 只看該作者
建議貼一下引腳方便對照代碼看。
回復

使用道具 舉報

11#
ID:894185 發(fā)表于 2021-3-20 10:02 來自手機 | 只看該作者
請問錄好的音是存在語音芯片里面,還是單片機里面?
回復

使用道具 舉報

12#
ID:778106 發(fā)表于 2021-4-10 19:59 來自手機 | 只看該作者
你好,想問一下能具體實現(xiàn)什么功能呢
回復

使用道具 舉報

13#
ID:277420 發(fā)表于 2021-7-6 16:57 | 只看該作者
18135776781 發(fā)表于 2020-2-24 19:20
請問有講解視頻嗎?

圖紙沒有對應引腳號怎么接?
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级淫片免费视频黄 | 另类专区亚洲 | 亚洲一区二区免费看 | 一区二区三区不卡视频 | 国产黄色av电影 | 亚洲精品久久久久久一区二区 | 在线观看中文字幕亚洲 | 国产精品久久久久久久久图文区 | 黑人精品欧美一区二区蜜桃 | 一区二区中文 | 皇色视频在线 | 日韩黄色小视频 | 在线观看国产视频 | 综合久久av | www.成人.com | 日韩a在线观看 | 色综合久久久久 | 亚洲欧美日韩在线不卡 | 国产精品一区二区在线 | 国产精品亚洲一区二区三区在线 | www.887色视频免费 | 人人操日日干 | 91免费观看国产 | 国产免费拔擦拔擦8x高清 | 国产成人精品免费视频大全最热 | 亚洲视频在线播放 | 亚洲欧美一区在线 | 国产视频久久久 | 日本欧美大片 | 国产综合欧美 | 午夜黄色影院 | 一级大黄色片 | 日韩在线中文 | 久久久久久久久久久蜜桃 | 高清18麻豆 | 国产日韩欧美激情 | 精品国产一区二区三区免费 | 天色综合网 | 国产精品国产三级国产aⅴ浪潮 | 蜜桃av一区二区三区 | 中文字幕中文字幕 |