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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.18   EX79                                                                  01/04/2010 13:10:50 PAGE 1   


C51 COMPILER V8.18, COMPILATION OF MODULE EX79
OBJECT MODULE PLACED IN ex79.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ex79.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //简易电子琴
   2          #include<reg52.h>   //包含51单片机寄存器定义的头文件
   3          
   4          sbit P14=P1^4;      //将P14位定义为P1.4引脚
   5          sbit P15=P1^5;      //将P15位定义为P1.5引脚
   6          sbit P16=P1^6;      //将P16位定义为P1.6引脚
   7          sbit P17=P1^7;      //将P17位定义为P1.7引脚
   8          unsigned char keyval;    //定义变量储存按键值
   9          
  10          sbit sound=P3^6;    //将sound位定义为P3.7
  11          unsigned int C;     //全局变量,储存定时器的定时常数
  12          unsigned int f;     //全局变量,储存音阶的频率
  13          
  14          //以下是C调低音的音频宏定义
  15          #define l_dao 262   //将“l_dao”宏定义为低音“1”的频率262Hz
  16          #define l_re 286    //将“l_re”宏定义为低音“2”的频率286Hz
  17          #define l_mi 311    //将“l_mi”宏定义为低音“3”的频率311Hz
  18          #define l_fa 349    //将“l_fa”宏定义为低音“4”的频率349Hz
  19          #define l_sao 392   //将“l_sao”宏定义为低音“5”的频率392Hz
  20          #define l_la 440    //将“l_a”宏定义为低音“6”的频率440Hz
  21          #define l_xi 494    //将“l_xi”宏定义为低音“7”的频率494Hz
  22                 
  23               //以下是C调中音的音频宏定义
  24          #define dao 523     //将“dao”宏定义为中音“1”的频率523Hz
  25          #define re 587      //将“re”宏定义为中音“2”的频率587Hz
  26          #define mi 659      //将“mi”宏定义为中音“3”的频率659Hz
  27          #define fa 698      //将“fa”宏定义为中音“4”的频率698Hz
  28          #define sao 784     //将“sao”宏定义为中音“5”的频率784Hz
  29          #define la 880      //将“la”宏定义为中音“6”的频率880Hz
  30          #define xi 987      //将“xi”宏定义为中音“7”的频率53
  31                
  32          //以下是C调高音的音频宏定义
  33          #define h_dao 1046     //将“h_dao”宏定义为高音“1”的频率1046Hz
  34          #define h_re 1174      //将“h_re”宏定义为高音“2”的频率1174Hz
  35          #define h_mi 1318      //将“h_mi”宏定义为高音“3”的频率1318Hz
  36          #define h_fa 1396     //将“h_fa”宏定义为高音“4”的频率1396Hz
  37          #define h_sao 1567    //将“h_sao”宏定义为高音“5”的频率1567Hz
  38          #define h_la 1760     //将“h_la”宏定义为高音“6”的频率1760Hz
  39          #define h_xi 1975     //将“h_xi”宏定义为高音“7”的频率1975Hz
  40          /**************************************************************
  41          函数功能:软件延时子程序
  42          **************************************************************/
  43           void delay20ms(void)   
  44          {
  45   1         unsigned char i,j;
  46   1              for(i=0;i<100;i++)
  47   1               for(j=0;j<60;j++)
  48   1                 ;
  49   1       }
  50          
  51          
  52          /*******************************************
  53          函数功能:节拍的延时的基本单位,延时200ms
  54          ******************************************/
  55          void delay()               
C51 COMPILER V8.18   EX79                                                                  01/04/2010 13:10:50 PAGE 2   

  56             {
  57   1           unsigned char i,j;
  58   1                for(i=0;i<250;i++)
  59   1                  for(j=0;j<250;j++)
  60   1                       ;
  61   1         }
  62          /*******************************************
  63          函数功能:输出音频
  64          入口参数:F
  65          ******************************************/
  66          void Output_Sound(void)
  67          {
  68   1        C=(46083/f)*10;          //计算定时常数
  69   1        TH0=(8192-C)/32;     //可证明这是13位计数器TH0高8位的赋初值方法
  70   1        TL0=(8192-C)%32;     //可证明这是13位计数器TL0低5位的赋初值方法
  71   1        TR0=1;               //开定时T0
  72   1        delay();             //延时200ms,播放音频
  73   1        TR0=0;               //关闭定时器
  74   1        sound=1;        //关闭蜂鸣器
  75   1        keyval=0xff;      //播放按键音频后,将按键值更改,停止播放
  76   1      }
  77          /*******************************************
  78          函数功能:主函数
  79          ******************************************/     
  80          void main(void)
  81            {  
  82   1                 EA=1;         //开总中断
  83   1                 ET0=1;         //定时器T0中断允许
  84   1                      ET1=1;        //定时器T1中断允许
  85   1                      TR1=1;        //定时器T1启动,开始键盘扫描
  86   1            TMOD=0x10;    //分别使用定时器T1的模式1,T0的模式0
  87   1           TH1=(65536-500)/256;  //定时器T1的高8位赋初值
  88   1                TL1=(65536-500)%256;  //定时器T1的高8位赋初值                                                            
  89   1                              
  90   1                                       while(1)            //无限循环
  91   1                                         {
  92   2                                          switch(keyval)
  93   2                                                  {
  94   3                                                          case 1:f=dao;            //如果第1个键按下,将中音1的频率赋给f
  95   3                                                                  Output_Sound();    //转去计算定时常数 
  96   3                                                                       break;
  97   3                                                               case 2:f=l_xi;           //如果第2个键按下,将低音7的频率赋给f
  98   3                                                                  Output_Sound();    //转去计算定时常数 
  99   3                                                                       break;
 100   3                            case 3:f=l_la;           //如果第3个键按下,将低音6的频率赋给f
 101   3                                                                  Output_Sound();    //转去计算定时常数 
 102   3                                                                       break;
 103   3                                                          case 4:f=l_sao;          //如果第4个键按下,将低音5的频率赋给f
 104   3                                                                    Output_Sound();    //转去计算定时常数 
 105   3                                                                       break;
 106   3                                                               case 5:f=sao;             //如果第5个键按下,将中音5的频率赋给f
 107   3                                                                      Output_Sound();    //转去计算定时常数 
 108   3                                                                       break;
 109   3                                                               case 6:f=fa;              //如果第6个键按下,将中音4的频率赋给f
 110   3                                                                   Output_Sound();    //转去计算定时常数 
 111   3                                                                       break;
 112   3                            case 7:f=mi;             //如果第7个键按下,将中音3的频率赋给f

⌨️ 快捷键说明

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