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

📄 main.lst

📁 用PWM方波调节LED亮度
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  10/19/2006 17:36:25 PAGE 1   


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

stmt level    source

   1          /*******************************************************************************
   2          程序名称:用PWM方波调节LED的亮度
   3          硬件接法:P1.1控制LED,低电平点亮
   4                    K3和K4分别接在P3.4、P3.5,按下时为低电平
   5          运行效果:按K3可调暗LED,按K4可调亮LED
   6          *******************************************************************************/
   7          
   8          
   9          #include <reg51.h>
  10          
  11          
  12          //定义I/O接口
  13          sbit PWM = P1^1;                //PWM输出(接LED)
  14          sbit K3 = P2^0;         //按下使PWM方波占空比增加(LED变暗)
  15          sbit K4 = P2^1;         //按下使PWM方波占空比减少(LED变亮)
  16          
  17          
  18          //定义PWM最大级数
  19          #define PWM_MAX         8
  20          
  21          
  22          //定义PWM级数,分为0~PWM_MAX-1级
  23          unsigned char PwmValue;
  24          
  25          
  26          /*******************************************************************************
  27          函数:KeyScan()
  28          功能:键盘扫描
  29          返回:扫描到的键值
  30          *******************************************************************************/
  31          unsigned char KeyScan()
  32          {
  33   1              unsigned char k;
  34   1              k = '\0';
  35   1              if ( K3 == 0 ) k = '+';
  36   1              if ( K4 == 0 ) k = '-';
  37   1              return k;
  38   1      }
  39          
  40          
  41          /*******************************************************************************
  42          函数:T1_INT_SVC()
  43          功能:定时器T1的中断服务函数
  44          *******************************************************************************/
  45          void T1INTSVC() interrupt 3
  46          {
  47   1              static unsigned char t = 0;
  48   1              TR1 = 0;
  49   1              TH1 = 0xFF;
  50   1              TL1 = 0x00;
  51   1              TR1 = 1;
  52   1              t++;
  53   1              if ( t >= PWM_MAX ) t = 0;
  54   1              if ( t <= PwmValue )
  55   1              {
C51 COMPILER V7.06   MAIN                                                                  10/19/2006 17:36:25 PAGE 2   

  56   2                      PWM = 1;
  57   2              }
  58   1              else
  59   1              {
  60   2                      PWM = 0;
  61   2              }
  62   1      }
  63          
  64          
  65          /*******************************************************************************
  66          函数:Delay()
  67          功能:延时0.01~2.56s
  68          参数:
  69                  t>0时,延时(t*0.01)s
  70                  t=0时,延时2.56s
  71          说明:
  72                  晶振用11.0592MHz
  73          *******************************************************************************/
  74          void Delay(unsigned char t)
  75          {
  76   1              do
  77   1              {
  78   2                      TH0 = 0xDC;
  79   2                      TL0 = 0x00;
  80   2                      TR0 = 1;
  81   2                      while ( !TF0 );
  82   2                      TR0 = 0;
  83   2                      TF0 = 0;
  84   2              } while ( --t != 0 );
  85   1      }
  86          
  87          
  88          /*******************************************************************************
  89          函数:SysInit()
  90          功能:系统初始化
  91          *******************************************************************************/
  92          void SysInit()
  93          {
  94   1              TMOD &= 0xF0;
  95   1              TMOD |= 0x01;   //设置T0为16位定时器
  96   1              TMOD &= 0x0F;
  97   1              TMOD |= 0x10;   //设置T1为16位定时器
  98   1              PwmValue = PWM_MAX / 2;         //设置PWM初值
  99   1              PWM = 1;                //PWM管脚为高
 100   1              TH1 = 0xFF;
 101   1              TL1 = 0x00;             //定时器T1赋初值
 102   1              TR1 = 1;                //启动定时器T1
 103   1              ET1 = 1;                //使能T1中断
 104   1              EA = 1;                 //使能总中断
 105   1      }
 106          
 107          
 108          //主函数
 109          void main()
 110          {
 111   1              unsigned char k;
 112   1              SysInit();
 113   1              for (;;)
 114   1              {
 115   2              //键盘扫描
 116   2                      for (;;)
 117   2                      {
C51 COMPILER V7.06   MAIN                                                                  10/19/2006 17:36:25 PAGE 3   

 118   3                              Delay(5);
 119   3                              k = KeyScan();
 120   3                              if ( k != '\0' ) break;
 121   3                      }
 122   2              //处理按键
 123   2                      switch ( k )
 124   2                      {
 125   3                      case '+':
 126   3                              if ( PwmValue < PWM_MAX-1 ) PwmValue++;
 127   3                              break;
 128   3                      case '-':
 129   3                              if ( PwmValue > 0 ) PwmValue--;
 130   3                              break;
 131   3                      default:
 132   3                              break;
 133   3                      }
 134   2              //等待按键抬起
 135   2                      for (;;)
 136   2                      {
 137   3                              Delay(5);
 138   3                              if ( KeyScan() == '\0' ) break;
 139   3                      }
 140   2              }
 141   1      }
 142          


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