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

📄 timer.lst

📁 51单片机实现渐变灯
💻 LST
字号:
C51 COMPILER V7.50   TIMER                                                                 08/01/2012 22:41:36 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE timer.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***************************************************************************
   2          标题:  PWM
   3          效果:  数码管做精确的秒计数00-99
   4          技术支持QQ群:73535837
   5          说明:  板使用12M晶振
   6          ******************************************************************************/
   7          
   8          //头文件:
   9          #include "reg51.h"
  10          
  11          //变量定义:
  12          unsigned char table[]=
  13                                  {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  14                                                  //表:共阳数码管 0-9 
  15          extern unsigned char timer0=0;  //作为计数时间量
  16          unsigned int pwm_index=10;//PWM占空比西系数
  17          unsigned char lold=1;           //作为按键放开的凭证,1为放开,0为按下
  18          unsigned char led=0;
  19          
  20          //引脚定义:     
  21          sbit SMG_q = P1^0;      //定义数码管阳级控制脚(千位)
  22          sbit SMG_b = P1^1;      //定义数码管阳级控制脚(百位)  
  23          sbit SMG_s = P1^2;      //定义数码管阳级控制脚(十位)
  24          sbit SMG_g = P1^3;      //定义数码管阳级控制脚(个位)
  25          
  26          sbit led0 = P2^0;       //定义第一个LED灯
  27          sbit led1 = P2^1;
  28          sbit led2 = P2^2;
  29          sbit led3 = P2^3;
  30          sbit led4 = P2^4;
  31          sbit led5 = P2^5;
  32          sbit led6 = P2^6;
  33          sbit led7 = P2^7;
  34          sbit key1 = P3^7;       //定义按键1
  35          sbit key2 = P3^6;       //定义按键1
  36          sbit key3 = P3^5;       //定义按键1
  37          
  38          //函数声明:
  39          void displaylow(unsigned char da);
  40          void displayhigh(unsigned char da);
  41          void delay(void); 
  42          void init();                                    //初如化函数
  43          void light(unsigned int level,unsigned char led);
  44          
  45          //主函数,C语言的入口函数:      
  46          void main()
  47          {
  48   1      
  49   1              init();                                 //初始化中断控制寄存器
  50   1              while(1)
  51   1              {       if(key1==0)     //按键1按下,LED1灯亮
  52   2                      {       if(lold)
  53   3                              {
  54   4                                      pwm_index++;
  55   4                                      lold=0;
C51 COMPILER V7.50   TIMER                                                                 08/01/2012 22:41:36 PAGE 2   

  56   4                              
  57   4                              }
  58   3                      }
  59   2              
  60   2                      
  61   2                      else if(key2==0)        //按键1按下,LED1灯亮
  62   2                      {       if(lold)
  63   3                              {       if(pwm_index==0)
  64   4                                      pwm_index=0;
  65   4                                      else  pwm_index--;
  66   4                              }
  67   3                                      lold=0;
  68   3                              
  69   3                      }
  70   2                      else if(key3==0)        //按键1按下,LED1灯亮
  71   2                      {       if(lold)led++;
  72   3                              lold=0;
  73   3                      }
  74   2                      else lold=1;
  75   2                      light(0,0);
  76   2                      light(1,1);
  77   2                      light(4,2);
  78   2                      light(15,3);
  79   2                      light(15,4);
  80   2                      light(1,5);
  81   2                      light(4,6);
  82   2                      light(0,7);
  83   2                      displayhigh(led);
  84   2                      displaylow(pwm_index);
  85   2                      
  86   2              }
  87   1      }
  88          
  89          //初始化函数
  90          void init()
  91          {
  92   1              
  93   1              timer0=0;
  94   1              TMOD=0X01;              //设置定时器1为模式一,即16位计算模式
  95   1              TH0=(65536-2003)/256;   //给计数寄存器赋值,1毫秒时间
  96   1              TL0=(65536-2003)%256;
  97   1              EA=1;           //开启总中断
  98   1              ET0=1;          //开启定时器0中断
  99   1              TR0=1;          //启定定时器0
 100   1      }
 101          
 102          //中断函数,关键字"interrupt" , 这是C语言的中断函数表示法,1表时定地器0
 103          void timer() interrupt 1
 104          {
 105   1              TH0=(65536-503)/256;    //重新赋值
 106   1              TL0=(65536-503)%256;
 107   1              timer0++;                                       //0.5毫秒加1
 108   1      //      if(timer0==pwm_index)
 109   1      //      {       led0=0; }
 110   1              if(timer0==20)
 111   1              {       timer0=0;
 112   2              }       
 113   1              
 114   1      }
 115          
 116          //显示函数,参数为显示内容,只显示两位数
 117          void displaylow(unsigned char da)
C51 COMPILER V7.50   TIMER                                                                 08/01/2012 22:41:36 PAGE 3   

 118          {
 119   1              SMG_s=0;                        //选择十位数码管
 120   1              P0=table[da/10];        //获取十位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
 121   1              delay();                        //延时
 122   1              P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
 123   1              SMG_s=1;                        //关闭十位数码管
 124   1      
 125   1              SMG_g=0;                        //选择个位数码管
 126   1              P0=table[da%10];        //获取个位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
 127   1              delay();                        //延时
 128   1              P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
 129   1              SMG_g=1;                        //关闭个位数码管
 130   1      }
 131          
 132          void displayhigh(unsigned char da)
 133          {
 134   1              SMG_q=0;                        //选择十位数码管
 135   1              P0=table[da/10];        //获取十位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
 136   1              delay();                        //延时
 137   1              P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
 138   1              SMG_q=1;                        //关闭十位数码管
 139   1      
 140   1              SMG_b=0;                        //选择个位数码管
 141   1              P0=table[da%10];        //获取个位值,查表输出定义好的数码管段值与P0口,显示相应的0-9
 142   1              delay();                        //延时
 143   1              P0=0XFF;                        //清除数码管显示,因是共阳型,所以不是0
 144   1              SMG_b=1;                        //关闭个位数码管
 145   1      }
 146          
 147          void light(unsigned int level,unsigned char led) //level为5级,5最亮,1最暗
 148          {       
 149   1              //led=led&&0x03;
 150   1              switch(led)
 151   1              {       case 0: if(timer0<level)        led0=0;
 152   2                              else led0=1;
 153   2                              break;
 154   2                      case 1: if(timer0<level)        led1=0;
 155   2                              else led1=1;
 156   2                              break;
 157   2                      case 2: if(timer0<level)        led2=0;
 158   2                              else led2=1;
 159   2                              break;
 160   2                      case 3: if(timer0<level)        led3=0;
 161   2                              else led3=1;
 162   2                              break;  
 163   2                      case 4: if(timer0<level)        led4=0;
 164   2                              else led4=1;
 165   2                              break;
 166   2                      case 5: if(timer0<level)        led5=0;
 167   2                              else led5=1;
 168   2                              break;
 169   2                      case 6: if(timer0<level)        led6=0;
 170   2                              else led6=1;
 171   2                              break;
 172   2                      case 7: if(timer0<level)        led7=0;
 173   2                              else led7=1;
 174   2                              break;
 175   2              }
 176   1      
 177   1      }
 178          
 179          
C51 COMPILER V7.50   TIMER                                                                 08/01/2012 22:41:36 PAGE 4   

 180          //延时子函数,短暂延时
 181          void delay(void){               
 182   1              unsigned char i=10;
 183   1              while(i--);
 184   1      }
 185          


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