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

📄 main.lst

📁 在51上运行的小的OS系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
  74              OSInit ();
  75          
  76              KeySem = OSSemCreate(0);
  77              
  78              OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);      
  79              OSStart ();
  80              return 0;                                                           
  81          }
  82          /*********************************************************************************************************
  83          **                            Task0 任务0
  84          ********************************************************************************************************/
  85          void Task0  (void *pdata)
  86          {
  87              pdata = pdata;
  88              TargetInit ();
  89              
  90              OS_ENTER_CRITICAL();
  91              T1_Ini();
  92              SPI0_Init();
  93              SPI1_Init();
  94              OS_EXIT_CRITICAL();
  95              OSTaskCreate(TaskUI, (void*)0, &TaskUIStk[TaskUIStkSize - 1], TaskUIPro);
  96              OSTaskCreate(TaskKeyScan, (void*)0, &TaskKeyScanStk[TaskKeyScanSize - 1],TaskKeyScanPro);
  97              while (1)
  98              {
  99                  LED5_on();
 100                  OSTimeDly(OS_TICKS_PER_SEC/10);         //延时一秒
 101                  LED5_off();
 102                  OSTimeDly(OS_TICKS_PER_SEC/10);         //延时一秒
 103              }
 104          }
 105          
 106          void TaskUI(void *pdata)
 107          {
 108              uint8 err;
 109             for (err=0; err< 20; err++)
 110                 SPI0Data.Buff[err]=0x5A;
 111              while (1)
 112              {
 113                  //Debug1On();
 114                  OSSemPend(KeySem, OS_1SEC, &err); //  等待信号量
 115                  if (OS_NO_ERR == err)
 116                  {
C51 COMPILER V8.08   MAIN                                                                  08/04/2008 21:49:57 PAGE 4   

 117                       switch (Key.Code)
 118                      {            
 119                          case KEY_K1_PRESS_DOWN:
 120                              LED1_on();
 121                              SPI0Data.Point = 0;
 122                              SPI0Data.Count = 4;
 123                              Set0SPI0SSEL();
 124                              StartSPI();
 125                              break;
 126          
 127                          case KEY_K1_PRESS_UP:
 128                              LED1_off();
 129                              break;
 130              
 131                          case KEY_K2_PRESS_DOWN:
 132                              LED2_on();
 133                              break;
 134                          
 135                          case KEY_K2_PRESS_UP:                    
 136                              LED2_off();
 137                              break;
 138              
 139                          case KEY_K3_PRESS_DOWN:
 140                              SPI1Data.Count = 4;
 141                              SPI1Data.Point = 0;
 142                              SPI1Data.Timer = 5;
 143                              SPI1Data.Mode = SPI1_TX;
 144                              SPI1Data.Ptr_Buff = SPI1Data.Buff;
 145                              StartSPI1();
 146                              LED3_on();
 147                              break;
 148                          
 149                          case KEY_K3_PRESS_UP:
 150                              LED3_off();
 151                              break;
 152              
 153                          case KEY_K4_PRESS_DOWN:
 154                              LED4_on();
 155                              break;
 156              
 157                          case KEY_K4_PRESS_UP:
 158                              LED4_off();
 159                              break;
 160                      }
 161                  }
 162              }
 163          }
 164          
 165          /************************************************************************************
 166          Function:    Scan Key Event.get Key.Signal and Key.Code
 167          Input:    PIN of KEYIN
 168          Output:     PIN of D0,D1,D2,D3;These pins shared with outside,should be restored after process outside pro
             -gress
 169          Key.Signal;this event sholde be cleared after respond
 170          Key.Code;
 171          Local:    Key.ScanCnter local
 172          Note:    scan every port  4*2ms , Scanout a keycode  3*4*2ms
 173           ************************************************************************************/
 174          void TaskKeyScan(void *pdata){
 175              uint8 err;
 176              uint32 timer;
 177              pdata = pdata;
C51 COMPILER V8.08   MAIN                                                                  08/04/2008 21:49:57 PAGE 5   

 178              while (1){
 179                  err = 1;
 180                  OSTimeDly(OS_20MS);
 181          //        SETIO0OUTPUT();
 182                  Key.KStatus[Key.ScanCnter] <<= 1;
 183                  Key.KStatus[Key.ScanCnter] += (READ_PIN_KEYIN() ? 0 : 1);
 184                  if ((Key.KStatus[Key.ScanCnter] &0x7) == K_PRESS_DOWN){
 185                      Key.VT = VT_KEY_HOLD_START;
 186                      Key.Code = Key.ScanCnter + 1;
 187                      err = OSSemPost(KeySem); // 发送信号量
 188                  }
 189                  else if (((Key.KStatus[Key.ScanCnter] &0x7) == K_PRESS_UP)
 190                      && (Key.Code != Key.ScanCnter + 9) ){
 191                      Key.Code = Key.ScanCnter + 5;
 192                      err = OSSemPost(KeySem); // 发送信号量
 193                  }
 194                  else if ((Key.KStatus[Key.ScanCnter] &0x7) == K_PRESS_HOLD){
 195                      if (!Key.VT){
 196                          Key.VT = VT_KEY_HOLD_REPEAT;
 197                          Key.Code = Key.ScanCnter + 9;
 198                          err = OSSemPost(KeySem); // 发送信号量
 199                      }
 200                  }
 201                  if (++Key.ScanCnter >= 4){
 202                      Key.ScanCnter = 0;
 203                  }
 204          //        WRITE_SCAN_KEY(Key.ScanCnter);
 205          
 206                  if (++timer >= 30){//300ms
 207                      timer = 0;
 208                  }        
 209              }
 210          }
 211             
 212          /*********************************************************************************************************
 213          **                            End Of File
 214          ********************************************************************************************************/

C51 COMPILATION COMPLETE.  4 WARNING(S),  59 ERROR(S)

⌨️ 快捷键说明

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