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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 2 页
字号:
 113   3                                                                  Output_Sound();    //转去计算定时常数 
 114   3                                                                       break; 
 115   3                                                          case 8:f=re;              //如果第8个键按下,将中音2的频率赋给f
 116   3                                                                  Output_Sound();    //转去计算定时常数 
 117   3                                                                       break;
C51 COMPILER V8.18   EX79                                                                  01/04/2010 13:10:50 PAGE 3   

 118   3                                                               case 9:f=h_re;           //如果第9个键按下,将高音2的频率赋给f
 119   3                                                                   Output_Sound();    //转去计算定时常数 
 120   3                                                                       break;
 121   3                                                               case 10:f=h_dao;           //如果第10个键按下,将高音1的频率赋给f
 122   3                                                                  Output_Sound();    //转去计算定时常数 
 123   3                                                                       break;
 124   3                            case 11:f=xi;            //如果第11个键按下,将中音7的频率赋给f
 125   3                                                                 Output_Sound();    //转去计算定时常数 
 126   3                                                                       break;
 127   3                                                          case 12:f=la;            //如果第12个键按下,将中音6的频率赋给f
 128   3                                                                  Output_Sound();    //转去计算定时常数 
 129   3                                                                       break; 
 130   3                                                               case 13:f=h_la;          //如果第13个键按下,将高音6的频率赋给f
 131   3                                                                  Output_Sound();    //转去计算定时常数 
 132   3                                                                       break;
 133   3                                                               case 14:f=h_sao;          //如果第14个键按下,将高音5的频率赋给f
 134   3                                                                  Output_Sound();    //转去计算定时常数 
 135   3                                                                       break;
 136   3                            case 15:f=h_fa;          //如果第15个键按下,将高音4的频率赋给f
 137   3                                                                  Output_Sound();    //转去计算定时常数 
 138   3                                                                       break;
 139   3                                                          case 16:f=h_mi;           //如果第16个键按下,将高音3的频率赋给f
 140   3                                                                  Output_Sound();    //转去计算定时常数 
 141   3                                                                       break;  
 142   3                                 } 
 143   2                              }       
 144   1              } 
 145          /**************************************************************
 146          函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波
 147          **************************************************************/ 
 148          
 149            void Time0_serve(void ) interrupt 1 using 1  
 150            {
 151   1               
 152   1              TH0=(8192-C)/32;     //可证明这是13位计数器TH0高8位的赋初值方法
 153   1              TL0=(8192-C)%32;     //可证明这是13位计数器TL0低5位的赋初值方法 
 154   1                   sound=!sound;        //将P3.7引脚取反,输出音频方波
 155   1        }
 156                          
 157          /**************************************************************
 158          函数功能:定时器T1的中断服务子程序,进行键盘扫描,判断键位
 159          **************************************************************/ 
 160            void time1_serve(void) interrupt 3 using 2    //定时器T1的中断编号为3,使用第2组寄存器
 161            {
 162   1           TR1=0;                  //关闭定时器T0
 163   1           P1=0xf0;                 //所有行线置为低电平“0”,所有列线置为高电平“1”
 164   1                if((P1&0xf0)!=0xf0)      //列线中有一位为低电平“0”,说明有键按下
 165   1                 {
 166   2                                       delay20ms();           //延时一段时间、软件消抖
 167   2                                        if((P1&0xf0)!=0xf0)      //确实有键按下
 168   2                                          {
 169   3                                             P1=0xfe;             //第一行置为低电平“0”(P1.0输出低电平“0”)
 170   3                                             if(P14==0)           //如果检测到接P1.4引脚的列线为低电平“0”
 171   3                                           keyval=1;            //可判断是S1键被按下
 172   3                                         if(P15==0)             //如果检测到接P1.5引脚的列线为低电平“0”
 173   3                                           keyval=2;            //可判断是S2键被按下
 174   3                                         if(P16==0)             //如果检测到接P1.6引脚的列线为低电平“0”
 175   3                                           keyval=3;            //可判断是S3键被按下
 176   3                                         if(P17==0)            //如果检测到接P1.7引脚的列线为低电平“0”
 177   3                                           keyval=4;           //可判断是S4键被按下
 178   3                              
 179   3                                         P1=0xfd;             //第二行置为低电平“0”(P1.1输出低电平“0”)
C51 COMPILER V8.18   EX79                                                                  01/04/2010 13:10:50 PAGE 4   

 180   3                                            if(P14==0)           //如果检测到接P1.4引脚的列线为低电平“0”
 181   3                                           keyval=5;            //可判断是S5键被按下
 182   3                                         if(P15==0)             //如果检测到接P1.5引脚的列线为低电平“0”
 183   3                                           keyval=6;            //可判断是S6键被按下
 184   3                                         if(P16==0)             //如果检测到接P1.6引脚的列线为低电平“0”
 185   3                                           keyval=7;            //可判断是S7键被按下
 186   3                                         if(P17==0)            //如果检测到接P1.7引脚的列线为低电平“0”
 187   3                                           keyval=8;           //可判断是S8键被按下
 188   3                                              
 189   3                                         P1=0xfb;             //第三行置为低电平“0”(P1.2输出低电平“0”)
 190   3                                          if(P14==0)          //如果检测到接P1.4引脚的列线为低电平“0”
 191   3                                           keyval=9;          //可判断是S9键被按下
 192   3                                         if(P15==0)           //如果检测到接P1.5引脚的列线为低电平“0”
 193   3                                           keyval=10;         //可判断是S10键被按下
 194   3                                         if(P16==0)          //如果检测到接P1.6引脚的列线为低电平“0”
 195   3                                           keyval=11;        //可判断是S11键被按下
 196   3                                         if(P17==0)          //如果检测到接P1.7引脚的列线为低电平“0”
 197   3                                           keyval=12;        //可判断是S12键被按下
 198   3                              
 199   3                                         P1=0xf7;             //第四行置为低电平“0”(P1.3输出低电平“0”)
 200   3                                          if(P14==0)          //如果检测到接P1.4引脚的列线为低电平“0”
 201   3                                           keyval=13;          //可判断是S13键被按下
 202   3                                         if(P15==0)           //如果检测到接P1.5引脚的列线为低电平“0”
 203   3                                           keyval=14;         //可判断是S14键被按下
 204   3                                         if(P16==0)          //如果检测到接P1.6引脚的列线为低电平“0”
 205   3                                           keyval=15;        //可判断是S15键被按下
 206   3                                         if(P17==0)          //如果检测到接P1.7引脚的列线为低电平“0”
 207   3                                           keyval=16;        //可判断是S16键被按下
 208   3                                   }
 209   2                      }
 210   1           TR1=1;                    //开启定时器T1
 211   1           TH1=(65536-500)/256;  //定时器T1的高8位赋初值
 212   1                TL1=(65536-500)%256;  //定时器T1的高8位赋初值          
 213   1       }
 214          
 215                          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    519    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   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 + -