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

📄 dianziqin.lst

📁 本设计及能产生低音5至高音4
💻 LST
字号:
C51 COMPILER V7.50   DIANZIQIN                                                             04/29/2002 11:51:35 PAGE 1   


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

line level    source

   1          #include "reg52.h"
   2          #include <stdio.h>      
   3          #include <absacc.h>
   4          #include <math.h>
   5          
   6          sbit P2_7 = P2^7;       
   7          unsigned char STH0; 
   8          unsigned char STL0; 
   9          
  10          /* 音符与计数值对应表 */
  11           unsigned int code tab[]={64260,64400, 
  12                           64524,64580,64684,64777, 
  13                           64820,64898,64968,65030, 
  14                           65058,65110,65157,65178}; 
  15          
  16          
  17          /*主程序 */
  18          void main()
  19          {
  20   1              unsigned char key,k;
  21   1              unsigned char i,j;
  22   1              unsigned char get(void); 
  23   1      
  24   1              TMOD = 0x01;    
  25   1              EA = 1;
  26   1              ET0 = 1;
  27   1              
  28   1      
  29   1              while(1)
  30   1          {
  31   2                      P1 = 0xf0;                                                      
  32   2                      if ((P1&0xf0)!=0xf0)                                    // 有键按下
  33   2                      {
  34   3                                                                      
  35   3                              for(i=50;i>0;i--)                     // 去抖动
  36   3      
  37   3                     for(j=200;j>0;j--)
  38   3                                  ; 
  39   3      
  40   3                              if ((P1&0xf0)!=0xf0)                            // 确定键盘有按下
  41   3                              {
  42   4                                      key = get();                                    // 调用键盘扫描函数
  43   4      
  44   4                              
  45   4                                      switch(key)
  46   4                                      {
  47   5                              
  48   5                                              case 0x41:                                              //第 1行第3列 低5 SO    392HZ
  49   5                                                      k = 2;
  50   5                                                      break;
  51   5                                      case 0x81:                                               //第 1行第4列 低6 LA   440HZ
  52   5                                                      k = 3;
  53   5                                                      break;
  54   5                                              case 0x12:                                              // 第2行第1列 低7 SI    494HZ
  55   5                                                      k = 4;
C51 COMPILER V7.50   DIANZIQIN                                                             04/29/2002 11:51:35 PAGE 2   

  56   5                                                      break;
  57   5                                              case 0x22:                                              // 第2行第2列 中1 DO    523HZ
  58   5                                                      k = 5;
  59   5                                                      break;
  60   5                                              case 0x42:                                              // 第2行第3列 中2 RE    587HZ
  61   5                                                      k = 6;
  62   5                                                      break;
  63   5                                              case 0x82:                                              // 第2行第4列 中3 MI    659HZ
  64   5                                                      k = 7;
  65   5                                                      break;
  66   5                                              case 0x14:                                              // 第3行第1列 中4FA        698HZ
  67   5                                                      k = 8;
  68   5                                                      break;
  69   5                                              case 0x24:                                              // 第3行第2列 中5 SO    784HZ
  70   5                                                      k = 9;
  71   5                                                      break;
  72   5                                              case 0x44:                                              // 第3行第3列 中6 LA    880HZ
  73   5                                                      k = 10;
  74   5                                                      break;
  75   5                                              case 0x84:                                              // 第3行第4列 中7 SI    988HZ
  76   5                                                      k = 11;
  77   5                                                      break;
  78   5                                              case 0x18:                                              // 第4行第1列 高1 DO    1046HZ
  79   5                                                      k = 12;
  80   5                                                      break;
  81   5                                              case 0x28:                                              // 第4行第2列 高2 RE    1175HZ
  82   5                                                      k = 13;
  83   5                                                      break;
  84   5                                              case 0x48:                                              // 第4行第3列 高3 MI    1318HZ
  85   5                                                      k = 14; 
  86   5                                                      break;
  87   5                                              case 0x88:                                              // 第4行第4列 高4 FA    1397HZ
  88   5                                                      k = 15;
  89   5                                                      break;
  90   5                                              default:        
  91   5                                                      break;
  92   5                                      }       
  93   4      
  94   4                                      P2_7 = ~P2_7;                                   
  95   4                      
  96   4                                      /* 由k值设定计数器1的计数初值 */
  97   4                          STH0 = tab[k]/256;
  98   4                          STL0 = tab[k]%256; 
  99   4      
 100   4                              TR0 = 1;                                                        
 101   4      
 102   4                                      P1 = 0xf0;                                              
 103   4                                      while ((P1&0xf0)!=0xf0)                 
 104   4                                      {
 105   5                                              P1 = 0xf0;      
 106   5                                      }
 107   4      
 108   4                                      TR1 = 0;                                                        
 109   4                              }
 110   3                      }
 111   2              }    
 112   1      }
 113          
 114            
 115          
 116          
 117                  /* 定时器0中断服务子程序 */
C51 COMPILER V7.50   DIANZIQIN                                                             04/29/2002 11:51:35 PAGE 3   

 118          void time0(void) interrupt 1
 119          {
 120   1              /* 设置计数初值 */
 121   1              TH0 = STH0;
 122   1              TL0 = STL0; 
 123   1              P2_7=~P2_7;     
 124   1      }                               
 125          
 126          
 127          /* 键扫描子程序 */
 128          unsigned char get(void)
 129          {
 130   1              unsigned char scan,temp;
 131   1      
 132   1              if ((P1&0xf0)==0xf0)                    
 133   1                      return(0);
 134   1      
 135   1              scan = 0xfe;
 136   1              while((scan&0x10)!=0)           
 137   1              {
 138   2                      P1 = scan;                      
 139   2                      if ((P1&0xf0)!=0xf0)    
 140   2                      {
 141   3                              temp = (P1&0xf0)|0x0f;
 142   3                              
 143   3                              return((~scan)+(~temp));
 144   3                      }
 145   2                      else scan = (scan<<1)|0x01;             
 146   2              }
 147   1      }
 148          
 149          
 150          
 151          
 152          
 153          
 154            
 155          
 156          
 157          
 158          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    264    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       1
   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 + -