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

📄 chengxu.lst

📁 信号测量 实时显示 延时2秒 键盘扫描
💻 LST
字号:
C51 COMPILER V8.08   CHENGXU                                                               05/31/2008 22:34:57 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1                  #include <intrins.h> 
   2          #include<reg51.h>
   3          #include<absacc.h>
   4          #define uchar unsigned char 
   5          #define uint unsigned int 
   6          
   7          sbit LED1= P1^0;
   8          sbit LED2= P1^1;
   9          sbit LED3= P1^2;
  10          sbit LED4= P1^3;
  11          
  12          
  13          void Delay(uint n)  //软件延时
  14          {
  15   1        unsigned int i,j;
  16   1      
  17   1        for(i=0;i<n;i++)
  18   1        {
  19   2          for(j=0;j<100;j++);
  20   2        }
  21   1      
  22   1      }
  23           void dingshiqijishi(void)//定时器秒计时
  24          {TMOD|=0x01;    //定时器0,方式1
  25   1        TL0=0x0D8;     //TL0定时器0低8位计数器
  26   1        TH0=0x0F0;     //TH0定时器0高8位计数器
  27   1        TR0=1;         //定时器/计数器0启动位.TR0=1:开始计时或计数 TR0=1禁止计时或计数 
  28   1        ET0=1;         //定时器/计数器0中断使能
  29   1        EA=1;                  //全局中断使能
  30   1      }
  31          
  32           void kongzhiLED1(void)  //LED1控制函数
  33          { P0=0x01;
  34   1        LED1=0;
  35   1        dingshiqijishi() ;
  36   1       LED1=1;
  37   1      }
  38          
  39          void kongzhiLED2(void)  //LED2控制函数
  40          { P0=0x02;
  41   1        LED2=0;
  42   1        dingshiqijishi();
  43   1       LED2=1;
  44   1      }
  45          
  46          void kongzhiLED3 (void) //LED3控制函数
  47          { P0=0x03;
  48   1        LED3=0;
  49   1       dingshiqijishi();
  50   1        LED3=1;
  51   1      }
  52          
  53          void kongzhiLED4 (void) //LED4控制函数
  54          { P0=0x04;
  55   1        LED4=0;
C51 COMPILER V8.08   CHENGXU                                                               05/31/2008 22:34:57 PAGE 2   

  56   1      }
  57          
  58          uchar key(void)//4x4键盘子程序-判断有键闭合后调用该子程序返回键值
  59          //0x11,0x21,0x41,0x81
  60          //0x12,0x22,0x42,0x82
  61          //0x14,0x24,0x44,0x84
  62          //0x18,0x28,0x48,0x88
  63          {
  64   1       uchar hang,lie;
  65   1       P2=0xf0;
  66   1       if((P2&0xf0)!=0xff)//有键闭合,顺序执行,否则为干扰,返回“0”
  67   1       {
  68   2        hang=0xfe;//行扫初值
  69   2        while((hang&0x10)!=0)
  70   2        {
  71   3         P2=hang;
  72   3            if((P2&0xf0)!=0xf0)//判断健值
  73   3            {
  74   4             lie=((P2&0xf0)|0x0f);
  75   4             return((~hang)+(~lie));
  76   4                  }
  77   3            else
  78   3            hang=(hang<<1)|0x01;
  79   3           }
  80   2        }
  81   1           return(0);
  82   1      }
  83          
  84          
  85          void push(void)//判断是否有键按下
  86          
  87          {
  88   1         uint m,kpush;;
  89   1         P2=0xf0;
  90   1         while(1)
  91   1       {
  92   2        if ((kpush=P2&0x0f)!=0xff)
  93   2                {
  94   3                   Delay(100) ;//延时
  95   3                   m=key();//调用键值判断
  96   3             switch(m) {
  97   4          case 0x11: kongzhiLED1();//按键1按下LED1亮    
  98   4          case 0x21: kongzhiLED2();//按键2按下LED2亮
  99   4          case 0x41: kongzhiLED3();//按键3按下LED3响
 100   4          case 0x81: kongzhiLED4();//按键4按下LED4响
 101   4           default:break ;
 102   4         }
 103   3          }
 104   2           }
 105   1      }
 106          
 107          
 108          
 109          void main() 
 110          { 
 111   1      
 112   1      while(1)
 113   1              { P0=0x00;
 114   2                 LED4=1;
 115   2                push();                               //扫描键盘
 116   2               
 117   2              }
C51 COMPILER V8.08   CHENGXU                                                               05/31/2008 22:34:57 PAGE 3   

 118   1      
 119   1      }
 120          void intersvr0(void) interrupt 0 using 1  //定时器0中断服务程序
 121          {
 122   1        static uint  cishu=0; //中断次数
 123   1      
 124   1       cishu++;
 125   1      
 126   1        if( (cishu%20)==0 )   //每100ms中断一次,20次就是2000ms即为2s "%"为求余
 127   1        { LED1=LED2=LED3=LED4=1;
 128   2          cishu=0;
 129   2        }
 130   1      
 131   1      }


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