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

📄 key.lst

📁 用NXP公司P89LPC9401单片机开发液晶显示,包括开发资料,各功能驱动程序.
💻 LST
字号:
C51 COMPILER V7.06   KEY                                                                   11/09/2004 16:39:44 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN key.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //****************************************************************
   2          //FILE: key.c
   3          //功能: 按键识别和按键处理      
   4          //****************************************************************
   5          #include <REG931.H>
   6          #include"main.h"
   7          #include"pcf8576d.h"
   8          #include"time.h"
   9          #include"ctime.h"
  10          #include"spi.h"
  11          //****************************************************************
  12          uchar   KeyNum;                                                 //按键ID
  13          bit             KeyFlag;                                                //按键有效标志
  14          uchar   ModifyP;                                                //修改状态指示()0-2
  15          uchar   Mode;                                                   //系统模式
  16          //****************************************************************
  17          void  KeyPressed()  interrupt 7                 //按键中断服务函数
  18          {
  19   1              uint    delay;                                          //延时变量
  20   1              KeyFlag =1;                                                     //置位按键有效标志
  21   1              for(delay=10000;delay>0;delay--);       //延时去抖动
  22   1              if(!MODEKEY)                                            //如果是模式按键
  23   1              {                               
  24   2                      KeyNum=1;                                               //按键ID设为1
  25   2                      if(Mode<8)      
  26   2                              Mode++;                                         //模式<8模式加1
  27   2                      else    
  28   2                              Mode=1;                                         //否则模式设置为1
  29   2                      while(!MODEKEY);                                //等待按键释放
  30   2              }
  31   1              else if(!MODIFY)                                        //如果是MODIFY按键
  32   1              {
  33   2                      KeyNum=2;                                               //把按键盘ID设为2                                               
  34   2                      while(!MODIFY);                                 //等待按键释放                  
  35   2              }
  36   1              else if(!ADD)                                           //如果是ADD按键
  37   1              {
  38   2                      KeyNum=3;                                               //把按键ID设为3
  39   2                      while(!ADD);                                    //等待按键释放
  40   2              }
  41   1              else if(!DEC)                                           //如果是ADDH按键
  42   1              {
  43   2                      KeyNum=4;                                               //把按键ID设为4 
  44   2                      while(!DEC);                                    //等待按键释放
  45   2              }
  46   1              else if(!ENTER)                                         //如果是确认按键
  47   1              {
  48   2                      KeyNum=5;                                               //将按键ID设为5
  49   2                      while(!ENTER);                                  //等待按键释放
  50   2              }
  51   1              else    KeyFlag=0;                                      //无效按键,清楚按键标志
  52   1              for(delay=10000;delay>0;delay--);       //延时去抖动
  53   1              KBCON=0x00;                                                     //清楚按键中断标志
  54   1      }
  55          //****************************************************************
C51 COMPILER V7.06   KEY                                                                   11/09/2004 16:39:44 PAGE 2   

  56          void  ModeKeyP()                                                //模式键服务程序
  57          {
  58   1                      SendDatTo595(0xff<<Mode);               //指示当前模式
  59   1                      if(Mode==2)                                             //如果是星期模式
  60   1                              GetWeek();                                      //需要进行公历到星期的换算
  61   1                      if(Mode==5)                                             //如果是农历模式
  62   1                              ConvertDate();                          //需要将进行农历换算
  63   1                      PCF8576Mode(1);                                 //显示当前模式内容
  64   1                      ModifyP=0;                                              //清零修改状态
  65   1      }
  66          //****************************************************************
  67          void  AddorDecKeyP()                                    //加或减按键服务程序
  68          {
  69   1              bit     modifytype;
  70   1              if(ModifyP!=0)                                          //如果当前修改状态有效
  71   1              {                                                                       //则进行数据调整
  72   2                      if(KeyNum==3)                                   //如果是ADD按键
  73   2                              modifytype=1;                           //置修改类型为1(加)
  74   2                      else                                                    //否则置为0(减)
  75   2                              modifytype=0;                           
  76   2                      if(Mode==1)                                             //如果是时间模式
  77   2                      {
  78   3                              if(ModifyP==1)                          //修改状态为1(状态只有0,1,2)
  79   3                                      ModifyHour(modifytype); //则对小时进行修改
  80   3                              else                                            //为2则对分钟进行修改   
  81   3                                      ModifyMinute(modifytype);
  82   3                      }
  83   2                      else if(Mode==3)                                //如果是日期模式
  84   2                      {       
  85   3                              if(ModifyP==1)                          //修改状态为1
  86   3                                      ModifyMonth(modifytype);//则对月进行修改
  87   3                              else                                                    
  88   3                                      ModifyDay(modifytype);  //否则对日进行修改
  89   3                      }
  90   2                      else if(Mode==4)                                //如果是年模式
  91   2                      {
  92   3                              ModifyYear(modifytype);         //则对年进行修改
  93   3                      }
  94   2                      else if(Mode==7)                                //如果是闹钟模式
  95   2                      {
  96   3                              if(ModifyP==1)                          //状态为1,则对闹钟小时修改
  97   3                                      ModifyAlarmHour(modifytype);
  98   3                              else                                            //否则对闹钟分钟进行修改
  99   3                                      ModifyAlarmMinute(modifytype);
 100   3                      }
 101   2              }
 102   1      
 103   1      }
 104          //****************************************************************
 105          void  ModifyKeyP()                                              //修改按键服务函数
 106          {
 107   1              if(Mode==1||Mode==3||Mode==4||Mode==7)//判断是否是可修改模式
 108   1              {
 109   2                      if(Mode==4)                                             //如果是年模式,状态设置为2
 110   2                              ModifyP=2;                                      //只允许修改低位(0-99)
 111   2                      else                                                    //如果是其它可修改模式          
 112   2                      {                                                               
 113   3                              if(ModifyP<2)                           //使状态在1和2之间切换
 114   3                                      ModifyP++;                              //置为2
 115   3                              else
 116   3                                      ModifyP--;                              //置为1
 117   3                       }
C51 COMPILER V7.06   KEY                                                                   11/09/2004 16:39:44 PAGE 3   

 118   2              }
 119   1      }
 120          //****************************************************************
 121          void  KeyProcess()                                              //按键处理函数
 122          {
 123   1              if(KeyNum==1)                                           //如果是模式按键
 124   1                      ModeKeyP();                                             //调用模式键服务程序            
 125   1              else if(KeyNum==2)                                      //如果是修改按键
 126   1                      ModifyKeyP();                                   //调用修改按键服务
 127   1              else if(KeyNum==3||KeyNum==4)           //如果是加减键
 128   1                      AddorDecKeyP();                                 //调用加减服务
 129   1              else if(KeyNum==5)                                      //如果是确认键
 130   1                      ModifyP=0;                                              //清楚修改状态
 131   1      }
 132          //*****************************END********************************              
 133          
 134          


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


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

⌨️ 快捷键说明

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