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

📄 鬼影灯.lst

📁 利用PWM和移位运算设计
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   鬼影灯                                                                04/04/2008 17:53:45 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 鬼影灯
OBJECT MODULE PLACED IN 鬼影灯.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 程序\鬼影灯.c BROWSE DEBUG OBJECTEXTEND PRINT(.\鬼影灯.lst) OBJECT(鬼影灯.o
                    -bj)

line level    source

   1          /*
   2          
   3                                                  鬼 影 灯
   4          
   5                  功能:P1口外接的八个LED发出的光达到流动拖影的效果
   6              
   7                  说明:利用PWM和移位运算设计,并利用人眼的视觉
   8                        暂留现象产生移动,并拖影的动态发光效果。
   9                            
  10                            为实现本程序的功能,几乎采用了穷举的方法,
  11                            例举出各个时段的赋值情况,才掌握规律,比
  12                            较笨拙。虽然实现了预想的结果,但一定可以
  13                            有更好的方法实现,希望大家尝试并互相交流。
  14          
  15          
  16            (C)西安电子科技大学 测控技术与仪器 编写:郭世忠  2008/03/14
  17          */
  18          
  19          #include<reg52.h>        //51寄存器头文件
  20          
  21          void Delayms(int ms);//函数声明
  22          
  23          
  24          
  25          void main(void)      //主程序
  26          {
  27   1         
  28   1        unsigned char k,j,LED;         //定义变量     
  29   1        int i;                                 //有关i的运算出现负值,如果定义成无符号会越界
  30   1        
  31   1                                      
  32   1      while(1)                                                //死循环,单片机程序必须是一个死循环
  33   1      { 
  34   2      
  35   2      /*********************以下为正序方向移动 低位到高位***********************/
  36   2      
  37   2      for(i=0;i<16;i++)                               // 循环16次,移动16位
  38   2        {   
  39   3          for(j=0;j<120;j++)              //重复数次 削除发光抖动 可决定运动快慢
  40   3           {
  41   4                if(i<8)
  42   4                {LED=0xfe<<i;}
  43   4                else
  44   4                 {
  45   5             LED=~(0xff<<(i-8));
  46   5                 }       
  47   4                 for(k=0;k<8;k++)                 //循环8次
  48   4                  {
  49   5                      if(k<(8-i))                     //8-i个直接赋值
  50   5                      {P1=LED;}
  51   5                   else
  52   5                   {           //i个移位赋值                    
  53   6                         LED=0x01|(LED<<1)|LED;  //从低位依次补1
  54   6                     P1=LED;                      
C51 COMPILER V8.02   鬼影灯                                                                04/04/2008 17:53:45 PAGE 2   

  55   6                    }
  56   5                  }
  57   4            
  58   4            } 
  59   3       }  
  60   2      
  61   2       Delayms(300);//短暂延时,便于区分起始状态
  62   2      
  63   2      
  64   2      /*********************以下为逆序方向移动 高位到低位***********************/
  65   2      
  66   2      for(i=0;i<16;i++)                          //逆序方向移动 循环16次,移动16位
  67   2        {   
  68   3          for(j=0;j<120;j++)             //重复数次 削除发光抖动  可决定运动快慢
  69   3           {
  70   4                if(i<8)
  71   4                {LED=0x7f>>i;}
  72   4                else
  73   4                {
  74   5             LED=~(0xff>>(i-8));
  75   5                }       
  76   4                  for(k=0;k<8;k++)        //循环8次
  77   4                  {  
  78   5                       if(k<(8-i))            //8-i个直接赋值
  79   5                       {P1=LED;}
  80   5                   else
  81   5                         {
  82   6                         P1=LED;                                  //i个移位赋值                         
  83   6                         LED=0x80|(LED>>1)|LED;   //从高位依次补1
  84   6                     }                            
  85   5                   }
  86   4            
  87   4               
  88   4                } 
  89   3      
  90   3        } 
  91   2       Delayms(300);   //短暂延时,便于区分起始状态
  92   2      }
  93   1      
  94   1      }
  95          
  96           /****************************************************************************
  97          * 名    称:Delayms()
  98          * 功    能:延迟1ms
  99          * 入口参数:ms: 延迟毫秒数
 100          * 出口参数:无
 101          * 说    明: 11.0592MHz条件下
 102          ****************************************************************************/
 103          void Delayms(int ms)
 104          {
 105   1         unsigned int i;
 106   1         for(;ms>0;ms--)            //循环ms次
 107   1         {
 108   2            for(i=0;i<113;i++); //每次1ms延迟@ 11.0592MHz
 109   2         }
 110   1      }
 111          
 112          
 113          
 114          
 115           /*********************** I/O口输出状态对应表*************************
 116          
C51 COMPILER V8.02   鬼影灯                                                                04/04/2008 17:53:45 PAGE 3   

 117           对应P1口
 118           7654 3210
 119           
 120           1111 1110               0+0+0+0 0+0+0+8次
 121           1111 1110
 122           1111 1110
 123           1111 1110               第一位最亮       i=0
 124           1111 1110
 125           1111 1110                进组
 126           1111 1110
 127           1111 1110
 128          
 129           1111 1100               0+0+0+0 0+0+8+7次
 130           1111 1100
 131           1111 1100
 132           1111 1100               第二位最亮        i=1
 133           1111 1100
 134           1111 1100                                                        
 135           1111 1100
 136           1111 1101
 137          
 138           1111 1000               0+0+0+0 0+8+7+6次
 139           1111 1000
 140           1111 1000
 141           1111 1000               第三位最亮        i=2
 142           1111 1000
 143           1111 1000
 144           1111 1001
 145           1111 1011
 146          
 147           1111 0000               0+0+0+0 8+7+6+5次
 148           1111 0000
 149           1111 0000
 150           1111 0000               第四位最亮      i=3
 151           1111 0000
 152           1111 0001
 153           1111 0011
 154           1111 0111
 155          
 156           1110 0000               0+0+0+8 7+6+5+4次
 157           1110 0000
 158           1110 0000
 159           1110 0000               第五位最亮        i=4
 160           1110 0001
 161           1110 0011
 162           1110 0111
 163           1110 1111
 164          
 165           1100 0000               0+0+8+7 6+5+4+3次
 166           1100 0000
 167           1100 0000
 168           1100 0001               第六位最亮        i=5
 169           1100 0011                                               
 170           1100 0111
 171           1100 1111
 172           1101 1111
 173          
 174           1000 0000               0+8+7+6 5+4+3+2次
 175           1000 0000
 176           1000 0001
 177           1000 0011               第七位最亮        i=6
 178           1000 0111
C51 COMPILER V8.02   鬼影灯                                                                04/04/2008 17:53:45 PAGE 4   

 179           1000 1111
 180           1001 1111
 181           1011 1111
 182          
 183           0000 0000               8+7+6+5 4+3+2+1次
 184           0000 0001
 185           0000 0011
 186           0000 0111               第八位最亮    i=7
 187           0000 1111
 188           0001 1111
 189           0011 1111
 190           0111 1111
 191           ----------------------------------------
 192           0000 0001              
 193           0000 0011              P1=LED; 
 194           0000 0111              LED=0x01|LED|(LED<<1);
 195           0000 1111              
 196           0001 1111               出组
 197           0011 1111                                              8
 198           0111 1111
 199           1111 1111
 200          
 201           0000 0011              
 202           0000 0111
 203           0000 1111
 204           0001 1111                                              9
 205           0011 1111
 206           0111 1111
 207           1111 1111
 208           1111 1111
 209          
 210           0000 0111              
 211           0000 1111
 212           0001 1111                                              10
 213           0011 1111              
 214           0111 1111

⌨️ 快捷键说明

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