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

📄 key.lst

📁 《时间触发嵌入式系统设计模式》一书中的合作式调度器的算法
💻 LST
📖 第 1 页 / 共 2 页
字号:
 208          /******************************************************************************************************/
 209          
 210          /*设置主菜单状态寄存器, 1进入设置标志*/
 211          unsigned char g_SET = 0;
 212          /*子功能选项*/
 213          unsigned char g_subset = 0;
 214          /*定义数据指针*/
 215          unsigned char *pF;      /*头*/
 216          unsigned char Led_i;
 217          /*闹铃点计数器*/        
 218          unsigned char RingCnt;
 219          
 220          /*---------------------------------------------------------*-
 221           * 函数名称: KeyProcess()
 222           * 参    数: 
 223           * 返    回:
 224           * 函数功能: 键值处理
 225           * 
 226           * 说    明: 
 227           *
 228           * 当前版本: V1.0                        * 取代版本:
 229           * 作    者: wsl                         * 修    改:  
 230           * 版本信息: 2006-12-16          * 修改信息:  
 231          -*---------------------------------------------------------*/
 232          void KeyProcess(void)
 233          {
 234   1              // 若无按键请求则返回
 235   1              if ( Flag_keyprocess )          
 236   1              {       
 237   2                      Flag_keyprocess = 0;    // 清按键有效标志
 238   2                      // 是引导键
 239   2                      switch ( keybuffer[1] ) 
 240   2                      {
 241   3                              case 0:
C51 COMPILER V8.08   KEY                                                                   10/02/2007 07:17:26 PAGE 5   

 242   3                              // 是功能键
 243   3                                      switch ( keybuffer[0] ) 
 244   3                                      {
 245   4                                              case K_Up:      
 246   4                                              switch (g_SET)
 247   4                                              {
 248   5                                                      case 0: CloseBuzzer();  break;
 249   5                                                      case 1: 
 250   5                                                              g_subset++;
 251   5                                                              if (g_subset > 9)       {g_subset = 0;}
 252   5                                                              Main_MENU_interface(g_subset);
 253   5                                                      break;
 254   5                                                      /***************/
 255   5                                                      case 2:
 256   5                                                      case 3:
 257   5                                                              *(pF+Led_i) = *(pF+Led_i)+1;    /*指针指向的变量加1*/
 258   5                                                              if (Led_i == 0)         {       if (*(pF+Led_i) > 2)    {*(pF+Led_i) = 0;}      }
 259   5                                                              else if(Led_i == 2)     {       if (*(pF+Led_i) > 5)    {*(pF+Led_i) = 0;}      }
 260   5                                                              else    {       if (*(pF+Led_i) > 9)    {*(pF+Led_i) = 0;}      }
 261   5      
 262   5                                                              if (*pF == 2) {if (*(pF+1) > 3) {*(pF+1) = 0;}}
 263   5                                                      break;
 264   5                                                      /*******************/
 265   5      
 266   5                                                      default:        break;
 267   5                                              }
 268   4                                              break;
 269   4      
 270   4                                              case K_LoopRight:       
 271   4                                                      switch (g_SET)
 272   4                                                      {
 273   5                                                              case 0: CloseBuzzer();  break;
 274   5                                                              case 2:
 275   5                                                              case 3: 
 276   5                                                                      Led_i++;
 277   5                                                                      Flag &= 0x0f;
 278   5                                                                      if (Led_i>3)    {Led_i = 0;}
 279   5                                                                      SETBIT(Flag, Led_i+4);          
 280   5                                                              break;
 281   5      
 282   5                                                              default:        break;
 283   5                                                      }
 284   4                                              
 285   4                                              break;
 286   4                                              case K_Enter:   
 287   4                                                      switch (g_SET)
 288   4                                                      {
 289   5                                                              case 0: CloseBuzzer();  break;
 290   5                                                              case 1:
 291   5                                                              switch (g_subset)
 292   5                                                              {       /*进入时钟设置板面*/ 
 293   6                                                                      case 0: 
 294   6                                                                      /*进入系统设置板面*/
 295   6                                                                      Led_i = 0;
 296   6                                                                      DATA_Amend(now.hour, now.min, Led_i);
 297   6                                                                      pF = &dispbuf[0];               /*指向显示缓冲区首地址*/
 298   6                                                                      g_SET = 2;
 299   6                                                                      break;
 300   6                                                                      /*进入闹铃设置板面*/
 301   6                                                                      case 1: 
 302   6                                                                      /*进入闹铃系统设置板面*/
 303   6                                                                      Led_i = 0;
C51 COMPILER V8.08   KEY                                                                   10/02/2007 07:17:26 PAGE 6   

 304   6                                                                      RingCnt = 0;
 305   6                                                                      DATA_Amend(Ring[RingCnt].hour, Ring[RingCnt].min, Led_i);
 306   6                                                                      /*如果RingIDRegister某位为1,说明该点闹铃声已设置*/
 307   6                                                                      if (GETBIT(BackupRingID, RingCnt))
 308   6                                                                      {       /*点亮最后一位的小数点表示该点闹铃声已设置*/
 309   7                                                                              Dlink4 = 1;
 310   7                                                                      }
 311   6                                                                      else
 312   6                                                                      {
 313   7                                                                              Dlink4 = 0;
 314   7                                                                      }
 315   6                                                                      
 316   6                                                                      pF = &dispbuf[0];               /*指向显示缓冲区首地址*/
 317   6                                                                      g_SET = 3;
 318   6                                                                      break;
 319   6                                                                      default:        break;
 320   6                                                              }
 321   5                                                              break;
 322   5                                                              /***************************/
 323   5                                                              case 2: /*保存时间修改设置*/
 324   5                                                                      now.sec = 0x00; 
 325   5                                                                      now.min = dispbuf[2]*10 + dispbuf[3];
 326   5                                                                      now.hour = dispbuf[0]*10 + dispbuf[1];
 327   5                                                                      g_UpdataFlagEn = 1;     /*数码显示缓冲区更新*/
 328   5                                                                      g_SET = 0;      /*清设置标志*/
 329   5                                                                      g_subset = 0;
 330   5                                                                      RTC_interface();
 331   5                                                              break;
 332   5                                                              /*********************************/
 333   5                                                              case 3: /*读闹铃*/
 334   5                                                              RingCnt++;
 335   5                                                              if (RingCnt>8-1) {RingCnt = 0;} /*C语言变量从0开始计数,而闹铃点只有8个*/
 336   5                                                              Led_i = 0;      /*数码管闪烁从时的首位开始*/
 337   5                                                              DATA_Amend(Ring[RingCnt].hour, Ring[RingCnt].min, Led_i);
 338   5                                                              /*如果RingIDRegister某位为1,说明该点闹铃声已设置*/
 339   5                                                              if (GETBIT(BackupRingID, RingCnt))
 340   5                                                              {       /*点亮最后一位的小数点表示该点闹铃声已设置*/
 341   6                                                                      Dlink4 = 1;
 342   6                                                              }
 343   5                                                              else
 344   5                                                              {
 345   6                                                                      Dlink4 = 0;
 346   6                                                              }
 347   5                                                              pF = &dispbuf[0];               /*指向显示缓冲区首地址*/
 348   5                                                              break;
 349   5                                                              /*********************************/
 350   5                                                              default:        break;
 351   5                                                      }                                       
 352   4                                                      break;
 353   4                                              default:        break;
 354   4                                      }
 355   3                                      break;
 356   3                                      
 357   3                              case K_Shift:   
 358   3      
 359   3                                      if ( keybuffer[0] == K_Up )
 360   3                                      {
 361   4                                              /*退出设置板面且不保存已修改的数据*/
 362   4                                              RTC_interface();
 363   4                                              g_UpdataFlagEn = 1;     /*数码显示缓冲区更新*/
 364   4                                              g_SET = 0;      /*清设置标志*/
 365   4                                              g_subset = 0;
C51 COMPILER V8.08   KEY                                                                   10/02/2007 07:17:26 PAGE 7   

 366   4                                      }
 367   3                                      // 是复合键
 368   3                                      if (keybuffer[0] == K_Enter)
 369   3                                      {
 370   4                                              switch (g_SET)
 371   4                                              {
 372   5                                                      case 0:
 373   5                                                              g_SET = 1;      /*置位设置标志*/
 374   5                                                              g_UpdataFlagEn = 0;     /*数码显示缓冲区不更新*/
 375   5                                                              g_subset = 0;
 376   5                                                              /*进入系统设置板面*/
 377   5                                                              Main_MENU_interface(g_subset);
 378   5                                                      break;
 379   5                                                      case 3:
 380   5                                                              /*保存闹铃修改设置*/
 381   5                                                              dispbuf[0] = (dispbuf[0]<<4) + dispbuf[1];
 382   5                                                              dispbuf[2] = (dispbuf[2]<<4) + dispbuf[3];
 383   5                                                              SetRing(dispbuf[0] , dispbuf[2], RingCnt);
 384   5                                                              dispbuf[0] = dispbuf[0]>>4;
 385   5                                                              dispbuf[2] = dispbuf[2]>>4;
 386   5                                                              g_UpdataFlagEn = 1;     /*数码显示缓冲区更新*/
 387   5                                                              g_SET = 0;      /*清设置标志*/
 388   5                                                              g_subset = 0;
 389   5                                                              RTC_interface();
 390   5      
 391   5                                                      break;
 392   5                                                      default : break;
 393   5                                              }
 394   4      
 395   4                                      }
 396   3                                      break;
 397   3                              
 398   3                              default:        break;
 399   3                      
 400   3                      }
 401   2      
 402   2              }
 403   1              // 置位按键任务完成标志
 404   1              Flag_keydone = 1;                       
 405   1      }
 406          /*********************************************************************************************************
             -********/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    841    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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