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

📄 dzq.lst

📁 51单片机做的一个电子琴程序
💻 LST
字号:
C51 COMPILER V7.01  DZQ                                                                    04/15/2007 20:28:34 PAGE 1   


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

stmt level    source

   1          #define ulong unsigned long
   2          //#include <reg52.h> //包括一个52标准内核的头文件
   3          #include <reg51.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          #include <absacc.h>
   7          uchar key;
   8          uchar kc;
   9          uchar sec=0;
  10          uchar min=0;
  11          uchar hour=0;
  12          uchar day=1;
  13          uchar mon=1;
  14          uint year=2007;
  15          uchar mod=0;
  16          uchar check=0;
  17           //////////////////////////////////////////////////////////////
  18          sbit BEEP=P1^1; //喇叭输出脚
  19          //sbit K1= P3^2;
  20          //sbit K2= P3^5;
  21          //sbit K3= P2^4;
  22          //sbit K4= P2^5;
  23          uchar th0_f; //在中断中装载的T0的值高8位
  24          uchar tl0_f; //在中断中装载的T0的值低8位
  25          //T0的值,及输出频率对照表
  26          uchar code freq[36*2]={
  27          0xA9,0xEF,//00220HZ ,1 //0
  28          0x93,0xF0,//00233HZ ,1#
  29          0x73,0xF1,//00247HZ ,2
  30          0x49,0xF2,//00262HZ ,2#
  31          0x07,0xF3,//00277HZ ,3
  32          0xC8,0xF3,//00294HZ ,4
  33          0x73,0xF4,//00311HZ ,4#
  34          0x1E,0xF5,//00330HZ ,5
  35          0xB6,0xF5,//00349HZ ,5#
  36          0x4C,0xF6,//00370HZ ,6
  37          0xD7,0xF6,//00392HZ ,6#
  38          0x5A,0xF7,//00415HZ ,7
  39          0xD8,0xF7,//00440HZ 1 //12
  40          0x4D,0xF8,//00466HZ 1# //13
  41          0xBD,0xF8,//00494HZ 2 //14
  42          0x24,0xF9,//00523HZ 2# //15
  43          0x87,0xF9,//00554HZ 3 //16
  44          0xE4,0xF9,//00587HZ 4 //17
  45          0x3D,0xFA,//00622HZ 4# //18
  46          0x90,0xFA,//00659HZ 5 //19
  47          0xDE,0xFA,//00698HZ 5# //20
  48          0x29,0xFB,//00740HZ 6 //21
  49          0x6F,0xFB,//00784HZ 6# //22
  50          0xB1,0xFB,//00831HZ 7 //23
  51          0xEF,0xFB,//00880HZ `1
  52          0x2A,0xFC,//00932HZ `1#
  53          0x62,0xFC,//00988HZ `2
  54          0x95,0xFC,//01046HZ `2#
  55          0xC7,0xFC,//01109HZ `3
C51 COMPILER V7.01  DZQ                                                                    04/15/2007 20:28:34 PAGE 2   

  56          0xF6,0xFC,//01175HZ `4
  57          0x22,0xFD,//01244HZ `4#
  58          0x4B,0xFD,//01318HZ `5
  59          0x73,0xFD,//01397HZ `5#
  60          0x98,0xFD,//01480HZ `6
  61          0xBB,0xFD,//01568HZ `6#
  62          0xDC,0xFD,//01661HZ `7 //35
  63          };
  64          //-----------------------------------------------------------------
  65          void delay(uint t)                 /*延时子程序*/
  66          {while(t--);
  67   1      }
  68          /////////////////////////////////////////////////////
  69          void keyin(void)                  //键盘扫描
  70          {unsigned char i,j,w;
  71   1        delay(500);
  72   1        if(~XBYTE[0xf800]&0xf)
  73   1            {w=XBYTE[0xf8fe]&0x0f;
  74   2             if(~w&0x0f)
  75   2                {i=4;
  76   3                 j=w;
  77   3                 w=0xff;
  78   3                 }
  79   2              w=XBYTE[0xf8fd]&0x0f;
  80   2              if(~w&0x0f)
  81   2                 {i=3;
  82   3                  j=w;
  83   3                  w=0xff;
  84   3                  }
  85   2              w=XBYTE[0xf8fb]&0x0f;
  86   2              if(~w&0x0f)
  87   2                {i=2;
  88   3                 j=w;
  89   3                 w=0xff;
  90   3                }
  91   2              w=XBYTE[0xf8f7]&0x0f;
  92   2              if(~w&0x0f)
  93   2                 {i=1;
  94   3                  j=w;
  95   3                  w=0xff;
  96   3                  }
  97   2              w=XBYTE[0xf8ef]&0x0f;
  98   2              if(~w&0x0f)
  99   2                 {i=0;
 100   3                  j=w;
 101   3                  w=0xff;
 102   3                 }
 103   2              w=~j;
 104   2              key=(w<<4)|i;
 105   2           }
 106   1       while(~XBYTE[0xf800]&0xf);
 107   1        switch(key)
 108   1        {case 0x80:kc=20;break;
 109   2         case 0x40:kc=15;break;
 110   2         case 0x20:kc=0;break;
 111   2         case 0x10:kc=5;break;
 112   2         case 0x81:kc=19;break;
 113   2         case 0x41:kc=14;break;
 114   2         case 0x21:kc=9;break;
 115   2         case 0x11:kc=4;break;
 116   2         case 0x82:kc=18;break;
 117   2         case 0x42:kc=13;break;
C51 COMPILER V7.01  DZQ                                                                    04/15/2007 20:28:34 PAGE 3   

 118   2         case 0x22:kc=8;break;
 119   2         case 0x12:kc=3;break;
 120   2         case 0x83:kc=17;break;
 121   2         case 0x43:kc=12;break;
 122   2         case 0x23:kc=7;break;
 123   2         case 0x13:kc=2;break;
 124   2         case 0x84:kc=16;break;
 125   2         case 0x44:kc=11;break;
 126   2         case 0x24:kc=6;break;
 127   2         case 0x14:kc=1;break;}
 128   1       EX1=1;
 129   1       }
 130          
 131            ////////////////////////////////////////////////////////////////////////////
 132          void keybreak(void)  interrupt 2 using 0    //键盘中断
 133          {
 134   1        EX1=0;
 135   1        key=0;
 136   1        keyin();}
 137          ///////////////////////////////////////////
 138          
 139          
 140          
 141          //定时中断0,用于产生唱歌频率
 142          timer0() interrupt 1
 143          {
 144   1      TL0=tl0_f;TH0=th0_f; //调入预定时值
 145   1      BEEP=~BEEP; //取反音乐输出IO
 146   1      }
 147          //按键控制音阶声音输出(电子琴)
 148          void main(void) // 主程序
 149          {
 150   1      ulong n;
 151   1      uchar code jie8[8]={12,14,16,17,19,21,23,24};//1234567`1八个音符在频率表中的位置
 152   1      TMOD = 0x01; //使用定时器0的16位工作模式
 153   1      TR0 = 0;
 154   1      ET0 = 1;
 155   1      EA = 1;
 156   1      while(1)
 157   1      {
 158   2      switch(kc)
 159   2      {
 160   3      case 0:
 161   3      {
 162   4      tl0_f=freq[jie8[0]*2]; //置一个音符的值
 163   4      th0_f=freq[jie8[0]*2+1];
 164   4      TR0 = 1;
 165   4      for(n=0;n<10000;n++); //延时
 166   4      break;
 167   4      }
 168   3      case 1:
 169   3      {
 170   4      tl0_f=freq[jie8[1]*2]; //置一个音符的值
 171   4      th0_f=freq[jie8[1]*2+1];
 172   4      TR0 = 1;
 173   4      for(n=0;n<10000;n++); //延时
 174   4      break;
 175   4      }
 176   3      case 2:
 177   3      {
 178   4      tl0_f=freq[jie8[2]*2]; //置一个音符的值
 179   4      th0_f=freq[jie8[2]*2+1];
C51 COMPILER V7.01  DZQ                                                                    04/15/2007 20:28:34 PAGE 4   

 180   4      TR0 = 1;
 181   4      for(n=0;n<10000;n++); //延时
 182   4      break;
 183   4      }
 184   3      case 3:
 185   3      {
 186   4      tl0_f=freq[jie8[3]*2]; //置一个音符的值
 187   4      th0_f=freq[jie8[3]*2+1];
 188   4      TR0 = 1;
 189   4      for(n=0;n<10000;n++); //延时
 190   4      break;
 191   4      }
 192   3      default :TR0 = 0;BEEP=0;
 193   3      }
 194   2      
 195   2      }
 196   1      }
 197          //------------------------------------------------------
 198          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    755    ----
   CONSTANT SIZE    =     80    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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