⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1420.lst

📁 语音芯片1420P。可录音20秒。自己编的程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   1420                                                                  04/03/2008 09:30:30 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 1420
OBJECT MODULE PLACED IN D:\1420.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\1420.C DB SB OE

line level    source

   1          #include<reg51.h>
   2          #include<intrins.h>
   3          
   4          sbit key_REC=P1^0;
   5          sbit key_PLAYE=P1^1;
   6          sbit key_PLAYL=P1^2;
   7          sbit key_function=P1^6;
   8          
   9          sbit REC=P1^3;
  10          sbit PLAYE=P1^4;
  11          sbit PLAYL=P1^5;
  12          
  13          
  14          sbit key0=P2^7;
  15          
  16          
  17          
  18          unsigned char key;
  19          bit flag_rec=0,flag_playl=0,flag_playe=0,flag=0;
  20          bit f0=0,f1=0;
  21          
  22          //地址是0x00~0x9F 共160个  8个为一秒
  23          unsigned char voice_addr[]=              // 录音的各地址
  24          {0x00,0x08,0x10,0x18,0x20,
  25          0x28,0x30,0x38,0x40,0x48,
  26          0x50,0x58,0x60,0x68,0x70,
  27          };
  28          //
  29          void delay_10us(unsigned char n)
  30          {
  31   1              do
  32   1              {
  33   2                      _nop_();
  34   2                      _nop_();
  35   2                      _nop_();
  36   2                      _nop_();
  37   2                      _nop_();
  38   2                      }while(--n);
  39   1      }
  40          //
  41          void delay_ms(unsigned int n)
  42                  {
  43   1                      do
  44   1                      {
  45   2                              delay_10us(230);
  46   2                      }while(--n);
  47   1      
  48   1      }
  49          
  50          
  51          
  52          
  53          //键控录音
  54          void Record()
  55          {
C51 COMPILER V8.02   1420                                                                  04/03/2008 09:30:30 PAGE 2   

  56   1              while(flag_rec==1)
  57   1                      {
  58   2                                              key=P2;
  59   2                                              if(key==0xff)continue;//当key_REC按下过一次之后,则程序一直在这里执行直到有命令才开始录音
  60   2                                                                                                                                      //这是因为有continue与while的结果
  61   2                                              delay_ms(10);
  62   2                                              key=P2;
  63   2                                              if(key==0xff)continue;
  64   2                      switch(key)
  65   2                                                      {
  66   3                                                              case 0xfe:
  67   3                                                              {
  68   4                                                                      P0=voice_addr[0];
  69   4                                                                      //录音时因控制延时时间
  70   4                                                                      //应让延时时间小于录音时间
  71   4                                                                      REC=0;
  72   4                                                                      delay_ms(500);
  73   4      
  74   4                                                                      REC=1;
  75   4                                                                      break;
  76   4                                                              }
  77   3                                                              case 0xfd:
  78   3                                                              {
  79   4                                                                      P0=voice_addr[1];
  80   4                                                                      REC=0;
  81   4      
  82   4                                                                      delay_ms(500);
  83   4      
  84   4                                                                      REC=1;
  85   4      
  86   4                                                                      break;
  87   4                                                              }
  88   3                                                              case 0xfb:
  89   3                                                              {
  90   4                                                                      P0=voice_addr[2];
  91   4                                                                      REC=0;
  92   4                                                                      delay_ms(500);
  93   4      
  94   4                                                                      REC=1;
  95   4                                                                      break;
  96   4                                                              }
  97   3      
  98   3                                                              default:
  99   3                                                              {
 100   4                                                                      break;
 101   4                                                              }
 102   3                                              }
 103   2      
 104   2                      flag_rec=0;
 105   2                      }
 106   1      
 107   1      
 108   1      
 109   1      }
 110          
 111          
 112          //电平放音子程序中的子程序
 113           Playl1()
 114           {
 115   1                      switch(key)
 116   1                                              {
 117   2                                                      case 0xfe:
C51 COMPILER V8.02   1420                                                                  04/03/2008 09:30:30 PAGE 3   

 118   2                                                      {
 119   3                                                              P0=0X00;
 120   3                                                              P0=voice_addr[0];
 121   3                                                              PLAYL=0;
 122   3      
 123   3                                                              delay_ms(600);
 124   3      
 125   3                                                              PLAYL=1;
 126   3                                                              break;
 127   3                                                      }
 128   2                                                      case 0xfd:
 129   2                                                      {
 130   3                                                              P0=0X00;
 131   3                                                              P0=voice_addr[1];
 132   3                                                              PLAYL=0;
 133   3                                                              delay_ms(300);
 134   3      
 135   3                                                              PLAYL=1;
 136   3                                                              break;
 137   3                                                      }
 138   2                                                      case 0xfb:
 139   2                                                      {
 140   3                                                              P0=0X00;
 141   3                                                              P0=voice_addr[2];
 142   3                                                              PLAYL=0;
 143   3                                                              delay_ms(600);
 144   3      
 145   3                                                              PLAYL=1;
 146   3                                                              break;
 147   3                                                      }
 148   2      
 149   2                                                      default:
 150   2                                                      {
 151   3                                                              break;
 152   3                                                      }
 153   2      
 154   2      
 155   2                                      }
 156   1                              flag_playl=0;
 157   1      
 158   1      
 159   1      
 160   1              }
 161          //电平触发播放函数
 162          //变为低电平并保持直到变高或遇到结束标志
 163          void Playl()
 164          {
 165   1      
 166   1              while(flag_playl==1)
 167   1                {
 168   2                                      if(f0==1)                                                               //循环
 169   2                              {
 170   3                                      while(f0==1)
 171   3                                      {
 172   4      
 173   4                                              P0=0xc8;
 174   4                                              PLAYL=0;
 175   4                                              while(key_PLAYL==0);
 176   4                                              PLAYL=1;
 177   4                                              f0=0;
 178   4                                              flag_playl=0;
 179   4                                      }
C51 COMPILER V8.02   1420                                                                  04/03/2008 09:30:30 PAGE 4   

 180   3      
 181   3                              }
 182   2                      else
 183   2      
 184   2      
 185   2                      {
 186   3      
 187   3      
 188   3                                      key=P2;
 189   3                                              if(key==0xff)continue;
 190   3                                              delay_ms(10);
 191   3                                              key=P2;
 192   3                                              if(key==0xff)continue;
 193   3                                              Playl1();//把下面的程序写成了一个函数  在上面
 194   3                    }
 195   2      
 196   2              }
 197   1      
 198   1      
 199   1      }
 200          
 201          
 202          //脉冲放音
 203          Playe()
 204          {
 205   1                      while(flag_playe==1)
 206   1                              {
 207   2                              if(f0==1)                                                                       //循环
 208   2                                      {
 209   3      
 210   3                                              while(f0==1)
 211   3                                              {
 212   4                                              PLAYE=1;
 213   4                                              P0=0xc8;
 214   4                                              PLAYE=0;
 215   4                                              if(key_PLAYL==1)continue;
 216   4                                              delay_ms(10);
 217   4                                              if(key_PLAYL==1)continue;
 218   4                                                      PLAYL=0;
 219   4                                              key_PLAYL=1;
 220   4      //                                      PLAYE=1;
 221   4      //                                      PLAYL=0;////////////////???????????????????
 222   4      //
 223   4      //
 224   4      //                                      PLAYL=1;
 225   4                                              f0=0;
 226   4                                              flag_playe=0;
 227   4                                              }
 228   3      
 229   3                                      }
 230   2                                      if(f1==1)                                                                       //快进
 231   2                                              {
 232   3                                                      PLAYE=1;
 233   3                                                      P0=0xd1;//
 234   3                                                      PLAYE=0;
 235   3                                                      f1=0;
 236   3                                                      flag_playe=0;
 237   3                                                      PLAYE=1;
 238   3                                                      PLAYE=0;
 239   3      
 240   3                                              }
 241   2                                      if((f0==0)&&(f1==0))                            //在无操作模式下
C51 COMPILER V8.02   1420                                                                  04/03/2008 09:30:30 PAGE 5   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -