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

📄 test017.lst

📁 51单片机全套学习资料 提供电路原理图 各种C语言实验程序 包括LED流水灯,数码管显示,中断,定时器,串口通信,DS18B20温度显示,液晶1602,12864显示,看门狗,按键检测,音乐播放等程序
💻 LST
字号:
C51 COMPILER V7.50   TEST017                                                               12/28/2006 19:32:37 PAGE 1   


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

line level    source

   1          /********************************************************************************************
   2          * 文 件 名:test017.c
   3          * 功    能:模拟PWM输出控制LED灯的10个亮度级别。 
   4          * 硬件条件:1.CPU型号:AT89S52
   5          *           2.晶振:12.000MHz
   6          *           3.用跳线帽短接LED11__P1.7
   7          *             用跳线帽短接LED10__P1.6
   8          *             用跳线帽短接LED9__P1.5
   9          * 说    明:要改变LED灯的显示亮度,可以使用PWM输出控制。在一定频率的方波中,调整高电平和低电平
  10          *           的占空比,即可实现。例如用低电平点亮一个LED灯,假设把一个周期分为10个时间等份,如果
  11          *           方波中的高低电平占空比是9:1,这时就是一个比较暗的亮度,如果占空比是5:5,就是一个中间
  12          *           亮度,如果高低电平占空比是1:9,这时就是一个比较亮的亮度,高低电平占空比为10:0时,灯
  13          *           是灭的,高低电平占空比为0:10时,灯最亮。
  14          *           在本实验中,我们将定时器2的溢出定为1/2000秒,每10次脉冲输出一个200Hz频率。这每10次
  15          *           脉冲再用来控制高低电平的10个比值。这样,在每个1/200秒的方波周期中,我们都可以改变
  16          *           方波的输出占空比,从而控制LED灯的10个亮度级别。
  17          *           注意:为什么输出方波的频率我们选择200Hz这么高呢?因为如果频率太低,人眼就会看到闪烁
  18          *                 感觉。一般起码要在60Hz以上感觉才好点,120Hz基本上看不到闪烁,因此我们选择200Hz,
  19          *                 人眼将看不到闪烁,只能看到亮度变化。
  20          * 作    者:POWER
  21          * 日    期:2006年12月12号
  22          * 斯凯科技主页:www.armsky.net
  23          * 斯凯科技论坛:www.armsky.net/bbs
  24          *********************************************************************************************/
  25          #include "reg52.h"                               // 包含头文件    
  26          
  27          /* 与编译器无关的数据类型定义 */
  28          /********************************************************************************************/
  29          typedef unsigned char      uint8;                // 无符号8位整型变量
  30          typedef signed   char      int8;                 // 有符号8位整型变量
  31          typedef unsigned short     uint16;               // 无符号16位整型变量
  32          typedef signed   short     int16;                // 有符号16位整型变量
  33          typedef unsigned int       uint32;               // 无符号32位整型变量
  34          typedef signed   int       int32;                // 有符号32位整型变量
  35          typedef float              fp32;                 // 单精度浮点数(32位长度)
  36          typedef double             fp64;                 // 双精度浮点数(64位长度)
  37          /********************************************************************************************/
  38          
  39          /* 定义位变量 */
  40          sbit P1_7 = P1 ^ 7;                              // 控制LED11               
  41          sbit P1_6 = P1 ^ 6;                              // 控制LED10
  42          sbit P1_5 = P1 ^ 5;                              // 控制LED9
  43          sbit P1_2 = P1 ^ 2;                              // PWMDAC输出,用户可以在PWM测试点上用万用表测量
  44          
  45          uint8 scale_0;                                   // 用于保存占空比中输出0的时间份额,总共10份
  46           
  47          /********************************************************************************************
  48          * 函数名称:Timer2_Server()
  49          * 功    能:定时器2溢出中断服务程序。1/2000 秒中断1次。
  50          * 入口参数:无
  51          * 出口参数:无
  52          *********************************************************************************************/
  53          void Timer2_Server(void) interrupt 5  
  54          {
  55   1        static uint8 tt;                               // tt用来保存当前时间在1秒中的比例位置
C51 COMPILER V7.50   TEST017                                                               12/28/2006 19:32:37 PAGE 2   

  56   1        
  57   1        TF2=0;
  58   1        
  59   1        tt++;
  60   1        if(tt==10)                                     // 每1/200秒整开始输出低电平
  61   1         {
  62   2           tt=0;
  63   2      
  64   2               if(scale_0!=0)                              // 加入该句的目的是避免灭灯时发生闪烁
  65   2                {
  66   3                  P1_7=0;
  67   3                  P1_6=0;
  68   3                      P1_5=0;
  69   3                      P1_2=0;
  70   3                }
  71   2         }
  72   1        if(scale_0==tt)                                // 按照当前占空比切换输出高电平
  73   1         {
  74   2           P1_7=1;
  75   2               P1_6=1;
  76   2               P1_5=1;
  77   2               P1_2=1;
  78   2         }
  79   1      }
  80          
  81          /********************************************************************************************
  82          * 函数名称:main()
  83          * 功    能:模拟PWM输出控制LED灯的10个亮度级别。LED9~LED11将同时依次产生10个级别的亮度。与此
  84          *           同时,用户可以用万用表在ARMSKY-51Easy教学实验开发板上的PWM测试点进行测量观察。
  85          *********************************************************************************************/          
  86          void main (void)                
  87          {
  88   1        uint16 n;
  89   1                      
  90   1        RCAP2H =0xFE;                                  // 赋T2的预置值,溢出1次是1/2000秒钟
  91   1        RCAP2L =0x0C; 
  92   1        TR2=1;                                             // 启动定时器2
  93   1        ET2=1;                                         // 打开定时器2中断
  94   1        EA=1;                                          // 打开总中断  
  95   1      
  96   1        while(1)                                       // 死循环
  97   1                {
  98   2                  for(n=0;n<50000;n++);                    // 每过一会儿就自动加一个档次的亮度
  99   2                      scale_0++;
 100   2                      if(scale_0==10) scale_0=0;                   // 当档次达到10后,归0
 101   2                }
 102   1      }
 103          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     95    ----
   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 + -