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

📄 lts.lst

📁 用C语言编的带数码管显示的电子琴
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  LTS                                                                    07/10/2008 21:01:42 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE LTS
OBJECT MODULE PLACED IN lts.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lts.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>
   2          #define uint unsigned int
   3          #define uchar unsigned char
   4          #define ulong unsigned long 
   5          sbit BEEP=P2^4;
   6          sbit K1= P3^2;     
   7          
   8          uchar keyscan(uchar key);//键盘输入函数
   9          void delay(uint t);//延时函数
  10          void scan(uint i);//扫描显示函数
  11          void bi(ulong t);
  12          
  13          uchar table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  14          uchar th0_f; //在中断中装载的T0的值高8位 
  15          uchar tl0_f; //在中断中装载的T0的值低8位 
  16          
  17          /******T0的值,及输出频率对照表******/
  18          uchar code freq[36*2]=
  19          { 
  20                  0xA9,0xEF,//00220HZ ,1  //0 
  21                  0x93,0xF0,//00233HZ ,1# 
  22                  0x73,0xF1,//00247HZ ,2 
  23                  0x49,0xF2,//00262HZ ,2# 
  24                  0x07,0xF3,//00277HZ ,3 
  25                  0xC8,0xF3,//00294HZ ,4 
  26                  0x73,0xF4,//00311HZ ,4# 
  27                  0x1E,0xF5,//00330HZ ,5  
  28                  0xB6,0xF5,//00349HZ ,5# 
  29                  0x4C,0xF6,//00370HZ ,6 
  30                  0xD7,0xF6,//00392HZ ,6# 
  31                  0x5A,0xF7,//00415HZ ,7     
  32                  0xD8,0xF7,//00440HZ 1     //12 
  33                  0x4D,0xF8,//00466HZ 1#    //13 
  34                  0xBD,0xF8,//00494HZ 2     //14 
  35                  0x24,0xF9,//00523HZ 2#    //15 
  36                  0x87,0xF9,//00554HZ 3     //16 
  37                  0xE4,0xF9,//00587HZ 4     //17 
  38                  0x3D,0xFA,//00622HZ 4#    //18 
  39                  0x90,0xFA,//00659HZ 5     //19 
  40                  0xDE,0xFA,//00698HZ 5#    //20 
  41                  0x29,0xFB,//00740HZ 6     //21 
  42                  0x6F,0xFB,//00784HZ 6#    //22 
  43                  0xB1,0xFB,//00831HZ 7     //23 
  44                  0xEF,0xFB,//00880HZ `1 
  45                  0x2A,0xFC,//00932HZ `1# 
  46                  0x62,0xFC,//00988HZ `2 
  47                  0x95,0xFC,//01046HZ `2# 
  48                  0xC7,0xFC,//01109HZ `3 
  49                  0xF6,0xFC,//01175HZ `4 
  50                  0x22,0xFD,//01244HZ  `4# 
  51                  0x4B,0xFD,//01318HZ `5 
  52                  0x73,0xFD,//01397HZ `5# 
  53                  0x98,0xFD,//01480HZ `6 
  54                  0xBB,0xFD,//01568HZ `6# 
  55                  0xDC,0xFD,//01661HZ `7    //35 
C51 COMPILER V7.01  LTS                                                                    07/10/2008 21:01:42 PAGE 2   

  56          };
  57          
  58          //****************************** 
  59          //音乐符号串解释函数 
  60          //入口:要解释的音乐符号串,输出的音调串,输出的时长串 
  61          changedata(uchar *song,uchar *diao,uchar *jie) 
  62          { 
  63   1          uchar i,i1,j; 
  64   1          char gaodi; //高低+/-12音阶 
  65   1          uchar banyin;//有没有半个升音阶 
  66   1          uchar yinchang;//音长 
  67   1          uchar code jie7[8]={0,12,14,16,17,19,21,23}; //C调的7个值 
  68   1       
  69   1          *diao=*song; 
  70   1          for(i=0,i1=0;;) 
  71   1          { 
  72   2              gaodi=0; //高低=0 
  73   2              banyin=0;//半音=0 
  74   2              yinchang=4;//音长1拍 
  75   2              if((*(song+i)=='|') || (*(song+i)==' ')) i++;   //拍子间隔和一个空格过滤 
  76   2              switch(*(song+i))  
  77   2              {     
  78   3                  case ',': gaodi=-12;i++;//低音 
  79   3                  break; 
  80   3           
  81   3                  case '`': gaodi=12;i++; //高音 
  82   3                  break; 
  83   3              } 
  84   2       
  85   2              if(*(song+i)==0)  //遇到0结束 
  86   2              { 
  87   3                  *(diao+i1)=0; //加入结束标志0 
  88   3                  *(jie+i1)=0; 
  89   3                  return; 
  90   3              } 
  91   2       
  92   2              j=*(song+i)-0x30; i++; //取出基准音 
  93   2              j=jie7[j]+gaodi; //加上高低音 
  94   2             
  95   2       
  96   2                      yinc:   switch(*(song+i))  
  97   2              {     
  98   3                  case '#': //有半音j加一个音阶  
  99   3                      i++;j++; 
 100   3                              goto yinc;  
 101   3                   
 102   3       
 103   3                  case '-': //有一个音节加长 
 104   3                      yinchang+=4; 
 105   3                      i++;  
 106   3                      goto yinc; 
 107   3       
 108   3                  case '_': //有一个音节缩短 
 109   3                      yinchang/=2; 
 110   3                      i++;  
 111   3                              goto yinc; 
 112   3                   
 113   3                   
 114   3                  case '.': //有一个加半拍 
 115   3                      yinchang=yinchang+yinchang/2;
 116   3                              i++; 
 117   3                              goto yinc; 
C51 COMPILER V7.01  LTS                                                                    07/10/2008 21:01:42 PAGE 3   

 118   3              } 
 119   2       
 120   2              *(diao+i1)=j; //记录音符 
 121   2              *(jie+i1)=yinchang; //记录音长 
 122   2              i1++;     
 123   2          } 
 124   1      } 
 125          //****************************************** 
 126          //奏乐函数 
 127          //入口:要演奏的音乐符号串 
 128          void play(uchar *songdata) 
 129          { 
 130   1          uchar i,c,j=0; 
 131   1          uint  n; 
 132   1          uchar xdata diaodata[112]; //音调缓冲 
 133   1          uchar xdata jiedata[112];  //音长缓冲 
 134   1       
 135   1          changedata(songdata,diaodata,jiedata); //解释音乐符号串 
 136   1          TR0=1; 
 137   1          for(i=0;diaodata[i]!=0;i++)  //逐个符号演奏 
 138   1          { 
 139   2              tl0_f=freq[diaodata[i]*2]; //取出对应的定时值送给T0 
 140   2              th0_f=freq[diaodata[i]*2+1]; 
 141   2              for(c=0;c<jiedata[i];c++) //按照音长延时 
 142   2                      { 
 143   3                  for(n=0;n<32000;n++); 
 144   3                              if(K1==0)//发现按键,立即退出播放 
 145   3                              {  
 146   4                                      delay(1);
 147   4                                      if(K1==0)
 148   4                                              {TR0=0;scan(0);} 
 149   4                                      return; 
 150   4                              } 
 151   3                      } 
 152   2              TR0=0; 
 153   2              for(n=0;n<500;n++);    //音符间延时 
 154   2         
 155   2              TR0=1; 
 156   2          } 
 157   1          TR0=0; 
 158   1      } 
 159           
 160          //仙剑 
 161          uchar code xianjian[]={ 
 162          "|3_3_3_2_3-|2_3_2_2_,6,6_,7_|12_1_,7,6_,5_|,6---|" 
 163          "3_3_3_2_3.6_|5_6_5_5_22_3_|45_4_32_1_|3.--3_|" 
 164          "67_6_55_3_|5--3_5_|26_5_32_3_|3---|" 
 165          "26_6_6-|16_6_66_7_|`17_6_76_7_|3.--3_|" 
 166          "67_6_55_3_|5--3_5_|67_6_76_7_|3---|" 
 167          "26_6_6-|16_6_66_7_|`17_6_7.5_|6---|" 
 168          }; 
 169          uchar code song3[]={ 
 170          "5-5_3_2_1_|3---|6-6_4_2_1_" 
 171          ",7--,5_|1.3_5.1_|,7.3_5 5_|" 
 172          "6.7_`1.6_|6_5_5-3_2_|1.1_13_2_|" 
 173          "1.1_12_3_|2.1_,62_3_|2-- ,5_|" 
 174          "1.3_5.1_|,7.3_55_|6.7_`1.6_|" 
 175          "6_5_5-3_2_|1.1_13_2_|1.1_12_3_" 
 176          "2.,6_,71_2_|1--" 
 177          }; 
 178          //世上只有妈妈好 
 179          uchar code mamahao[]={ 
C51 COMPILER V7.01  LTS                                                                    07/10/2008 21:01:42 PAGE 4   

 180          "6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|" 
 181          "2.3_55_6_|321-|5.3_2_1_,6_1_|,5--" 
 182          }; 
 183          
 184          //我是一只菠萝 
 185          uchar code boluo[]={ 

⌨️ 快捷键说明

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