C51 COMPILER V8.08   DENG                                                                  08/15/2015 12:31:33 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE DENG
OBJECT MODULE PLACED IN deng.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE deng.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********************************************************************************
   2          * 【编写时间】： 2014年3月5日
   3          * 【作    者】： 清翔电子:03
   4          * 【版    本】： 1.0
   5          * 【网    站】： http://www.qxmcu.com/ 
   6          * 【淘宝店铺】： http://qxmcu.taobao.com/
   7          * 【实验平台】： QX-MCS51 单片机开发板
   8          * 【外部晶振】： 11.0592mhz     
   9          * 【主控芯片】： STC89C52
  10          * 【编译环境】： Keil μVisio3  
  11          * 【程序功能】：                                                                                    
  12          * 【使用说明】： 实现楼道间照明灯的方便控制，一个照明灯，在楼上和楼下各有一个（闭合式）开关控制。
  13                                  开关的闭合并不直接决定灯的亮灭，而开关状态的改变才是决定灯亮灭的关键。即不管两个开关当前的状态
  14                                  如何，只要有一个开关状态发生变化，都会使照明灯在打亮或者熄灭两种状态间切换。
  15                                  比如当有人要上楼，若之前灯是灭的，在按下楼下开关后（此后开关为闭合状态），灯会打亮；当到楼上后，
  16                                  再按楼上开关，灯会熄灭。而当后来又有人上楼时，再按次楼下开关（此后开关为打开状态），灯同样会打亮；
  17                                  此试验中，用P1口相连的第一个led来模拟照明灯，而用s2和s3来模拟两个开关。注意，因为实际楼道中的
  18                                  开关为闭合式的，而QX-MCS51的开关为反弹式的，所以实验时，请用手一直按着按键演示开关的闭合。
  19          *  说明：免费开源，不提供源代码分析.
  20          **********************************************************************************/
  21          
  22          #include <reg52.h>
  23          
  24          sbit light=P1^0;
  25          sbit s2=P3^0;
  26          sbit s3=P3^1;
  27          
  28          bit change,s2sta,s3sta;//s2sta,s3sta为开关s2和s3前一时刻的状态，用来和当前的s1与s2状态进行对比，
  29                                                     //进而判决两个开关的状态有无发生变化。
  30          bit keyscan()
  31          {
  32   1              if((s2^s2sta)||(s3^s3sta)) //^为异或，若两者不同，则结果为1。即若两开关中，任一开关的状态发生变化，则此条
             -件即为真。
  33   1                      change=1;
  34   1              return change;
  35   1      }
  36          
  37          void main()
  38          {       
  39   1              s2sta=s2;
  40   1              s3sta=s3;
  41   1              while(1)
  42   1              {
  43   2                      keyscan();                 //扫描按键状态是否变化，即是否有人更改了按键状态。
  44   2                      if(change)
  45   2                      {
  46   3                              change=0;          //清零
  47   3                              light=~light;  //一旦发现有开关状态发生了变化，则灯的状态就取反。（若以前亮，则熄灭；反之则打亮）
  48   3                              s2sta=s2;          //同时，将s2和s3的当前状态送给s2sta和s3sta，为以后的比较做准备。
  49   3                              s3sta=s3;
  50   3                      }       
  51   2              }
  52   1      }


C51 COMPILER V8.08   DENG                                                                  08/15/2015 12:31:33 PAGE 2   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     49    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
