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

📄 os.lst

📁 这是广西大学生设计大赛的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   OS                                                                    04/26/2008 21:37:30 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE OS
OBJECT MODULE PLACED IN os.OBJ
COMPILER INVOKED BY: D:\Keil1\C51\BIN\C51.EXE os.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include "os.h"
   3          #include "lcd.h"
   4          #include "datetime.h"
   5          #include "ds18b20.h"
   6          #include "keyboard.h"
   7          #include "voice.h"
   8          #include "ctrl.h"
   9          
  10           
  11          
  12          #define OS_STATUS_REDRAW     0x80
  13          #define OS_STATUS_LOOP       0x40
  14          #define OS_STATUS_USERMASK   0x0F
  15          
  16          #define SEC_PER_CONVERT   3
  17          
  18          #define LOGO_VERSION  "TX-Thermo V1.30"
  19          #define LOGO_MAKER   "(C)2006 TOT Studio"
  20          
  21           
  22          
  23          BIT    os_TempeUnitInF;
  24          //BIT  os_EnableVoice[25]; //0~23=hour, 24=alarm
  25          BYTE   os_EnableVoice[4]; //0~23=hour, 24=alarm
  26          
  27           
  28          
  29          //////////////////////////////////////////////////////////////////////
  30          //
  31          //      “控件”
  32          
  33          void osShowProcessing(BYTE line)
  34          {
  35   1       BYTE i;
  36   1       lcdTextOut(0,line,"");
  37   1       for (i=0; i<20; i++)
  38   1       {
  39   2        lcdTextAddOut( ((i - g_14HzClock) & 0x08) ? " " : ">" );
  40   2       }
  41   1      }
  42          
  43          /*
  44          BYTE osShowEdit(BYTE x, BYTE y, char* lpBuf, BYTE szBuf)
  45          // return 0 = esc
  46          // return 1 = ok
  47          // return 2 = over
  48          {
  49           BYTE i,chr,pos,key;
  50          
  51           if (szBuf == 0) return 2;    // 缓冲区长度不能为零
  52          
  53           for (i=0;i<szBuf;i++) lpBuf[i]=' ';
  54           lpBuf[szBuf-1] = 0;      // 最后一个字节设为 0
  55           lcdDisplayOnOffControl(1,1,0);   // show cursor (BIT d, BIT c, BIT b)
C51 COMPILER V8.02   OS                                                                    04/26/2008 21:37:30 PAGE 2   

  56           pos=0;
  57          
  58           while (pos+1 < szBuf)
  59           {
  60            lcdTextOut(x,y,lpBuf);
  61            lcdTextOut(x+pos,y,"");    // set cursor
  62          
  63            do{
  64             key = kbdGetKeyPress();   // wait for an input
  65            }while (key >= 16);
  66          
  67            switch ( key )      // convert vkey to chr
  68            {
  69            case VKEY_0:  chr='0';  break;
  70            case VKEY_1:  chr='1';  break;
  71            case VKEY_2:  chr='2';  break;
  72            case VKEY_3:  chr='3';  break;
  73            case VKEY_4:  chr='4';  break;
  74            case VKEY_5:  chr='5';  break;
  75            case VKEY_6:  chr='6';  break;
  76            case VKEY_7:  chr='7';  break;
  77            case VKEY_8:  chr='8';  break;
  78            case VKEY_9:  chr='9';  break;
  79            case VKEY_UP:  chr='U';  break;
  80            case VKEY_DOWN:  chr='D';  break;
  81            case VKEY_LEFT:  chr='L';  break;
  82            case VKEY_RIGHT: chr='R';  break;
  83            case VKEY_ENTER: chr='E';  break;
  84            case VKEY_CANCEL: chr='C';  break;
  85            default:   chr='U';
  86            }
  87          
  88            if (('0' <= chr) && (chr <= '9'))
  89            {
  90             //数字
  91             lpBuf[pos] = chr;
  92             pos++;
  93            }
  94            else if (chr == 'E')
  95            {
  96             //确定
  97             pos = szBuf;
  98            }
  99            else if (chr == 'C')
 100            {
 101             //退出
 102             pos = szBuf;
 103            }
 104            else if (chr == 'L')
 105            {
 106             //退格
 107             if (pos>0)
 108             {
 109              pos--;
 110              lpBuf[pos] = ' ';
 111             }
 112            }
 113           }
 114          
 115           lcdDisplayOnOffControl(1,0,0);  // hide cursor (BIT d, BIT c, BIT b)
 116           if (chr=='C') return 0;
 117           if (chr=='E') return 1;
C51 COMPILER V8.02   OS                                                                    04/26/2008 21:37:30 PAGE 3   

 118           return 2;
 119          }
 120          */
 121          
 122          //////////////////////////////////////////////////////////////////////
 123          //
 124          //      Boot
 125          
 126          void osBootLogo()
 127          {
 128   1       OWBROM searchPtr;
 129   1       BIT skip = FALSE;
 130   1      
 131   1       lcdClearDisplay();
 132   1       lcdTextOut(2,0,LOGO_VERSION);
 133   1       lcdTextOut(1,1,LOGO_MAKER);
 134   1       g_1HzClock = 0;
 135   1      
 136   1      
 137   1       lcdTextOut(0,3,"ESC=Skip            ");
 138   1       owbPreSearchDevices( &searchPtr );
 139   1       while ( !owbIsSearchEnd(&searchPtr) )
 140   1       {
 141   2        if ( owbSearchPath( &searchPtr , OWB_DEVICESEARCH ) )
 142   2        {
 143   3         owbCacheSearch();
 144   3      
 145   3         lcdTextOut(16,3,"x");
 146   3         lcdUIntOut( owbGetSearchIndex()+1, 3 );
 147   3        }
 148   2        osShowProcessing(2);
 149   2        if ( kbdGetKeyPress()==VKEY_CANCEL )
 150   2        {
 151   3         skip = TRUE;
 152   3         break;
 153   3        }
 154   2       }
 155   1       owbUnpreSearchDevices();
 156   1      
 157   1      
 158   1       while ((g_1HzClock < 5) && ( !skip ))
 159   1       {
 160   2        osShowProcessing(2);
 161   2       }
 162   1      }
 163          
 164          
 165          void osSelectSearchDevice()
 166          {
 167   1       BYTE key,status,cacheIndex;
 168   1       OWBROM searchPtr;
 169   1      
 170   1       status = 1;
 171   1       cacheIndex = owbGetCacheIndex();
 172   1      
 173   1       while (status)
 174   1       {
 175   2        switch (status)
 176   2        {
 177   3        case 1:    //show info
 178   3         lcdClearDisplay();
 179   3         lcdTextOut(0,0,"Sel & Search Device");
C51 COMPILER V8.02   OS                                                                    04/26/2008 21:37:30 PAGE 4   

 180   3      
 181   3         lcdTextOut(0,1,"CurSel/Total=");
 182   3         lcdUIntOut( owbGetCacheIndex()+1, 3 );
 183   3         lcdTextAddOut("/");
 184   3         lcdUIntOut( owbCountDevices(), 3 );
 185   3      
 186   3         lcdTextOut(0,2,"Select this:       ");
 187   3         lcdTextOut(13,2,"");
 188   3         lcdUIntOut( cacheIndex+1, 3 );
 189   3      
 190   3         status = 2;
 191   3         break;
 192   3        case 2:    //set sel
 193   3         lcdTextOut(0,3,"UpDn=Sel Ok=Search");
 194   3         while (1)
 195   3         {
 196   4          key = kbdGetKeyPress();
 197   4          if (key == VKEY_ENTER)
 198   4          {
 199   5           status = 3;
 200   5           break;
 201   5          }
 202   4          if (key == VKEY_CANCEL)
 203   4          {
 204   5           status = 0;
 205   5           break;
 206   5          }
 207   4          if (key == VKEY_UP)
 208   4          {
 209   5           status = 1;
 210   5           cacheIndex++;
 211   5           if (cacheIndex >= owbCountDevices()) cacheIndex = 0;
 212   5           break;
 213   5          }
 214   4          if (key == VKEY_DOWN)
 215   4          {
 216   5           status = 1;
 217   5           if (cacheIndex == 0) cacheIndex = owbCountDevices()-1;
 218   5           else cacheIndex--;
 219   5           break;
 220   5          }
 221   4         }
 222   3         break;
 223   3        case 3:    //processing
 224   3         lcdTextOut(0,3,"ESC=Stop            ");
 225   3         owbPreSearchDevices( &searchPtr );
 226   3         while ( !owbIsSearchEnd(&searchPtr) )
 227   3         {
 228   4          if ( owbSearchPath( &searchPtr , OWB_DEVICESEARCH ) )
 229   4          {
 230   5           if (owbGetSearchIndex() == cacheIndex)
 231   5            owbCacheSearch();
 232   5           lcdTextOut(17,1,"");
 233   5           lcdUIntOut( owbGetSearchIndex()+1, 3 );
 234   5          }
 235   4          osShowProcessing(2);
 236   4          if ( kbdGetKeyPress()==VKEY_CANCEL ) break;
 237   4         }
 238   3         owbUnpreSearchDevices();
 239   3         status = 1;
 240   3         break;
 241   3        default:
C51 COMPILER V8.02   OS                                                                    04/26/2008 21:37:30 PAGE 5   

 242   3         status = 0;
 243   3        }
 244   2       }
 245   1      
 246   1      // return UIGT_DESKTOP;
 247   1      }
 248          
 249          
 250          void osDesktop(void)
 251          {
 252   1       BYTE  rcv,rt,sec,i,bAlarmSearchCycle;
 253   1       TEMPE    tempe;
 254   1       DATETIME dtt;
 255   1       OWBROM   rom;
 256   1      
 257   1       lcdClearDisplay();
 258   1      
 259   1       rt = UIGT_LOOP;
 260   1       sec = 0;
 261   1       bAlarmSearchCycle = 0;
 262   1      
 263   1       while (rt == UIGT_LOOP)
 264   1       {
 265   2        rcv = kbdGetKeyPress();
 266   2        if (rcv >= 16)      // Wireless Control
 267   2        {
 268   3         rcv = ctrlGetInputABC();
 269   3         switch (rcv)
 270   3         {
 271   4         case 'A':
 272   4          rcv = VKEY_0;
 273   4          break;
 274   4         case 'B':
 275   4          rcv = VKEY_3;
 276   4          break;
 277   4         case 'C':
 278   4          rcv = VKEY_4;
 279   4          break;
 280   4         default:
 281   4          rcv = 0xff;
 282   4         }
 283   3        }
 284   2        switch (rcv)
 285   2        {
 286   3        case VKEY_0:
 287   3         vocTime();
 288   3         vocTempe( &tempe, os_TempeUnitInF );
 289   3         break;
 290   3        case VKEY_1:
 291   3         if (os_EnableVoice[3] & 0x01)
 292   3         {
 293   4          os_EnableVoice[3] = 0x00;
 294   4          lcdTextOut(0,3,"Alarm Disable       ");
 295   4         }
 296   3         else
 297   3         {
 298   4          os_EnableVoice[3] = 0xff;
 299   4          lcdTextOut(0,3,"Alarm Enable        ");
 300   4         }
 301   3         break;
 302   3        case VKEY_2:
 303   3         os_TempeUnitInF = ~os_TempeUnitInF;
C51 COMPILER V8.02   OS                                                                    04/26/2008 21:37:30 PAGE 6   

 304   3         if (os_TempeUnitInF) lcdTextOut(0,3,"Fahrenheit (F)      ");
 305   3         else     lcdTextOut(0,3,"Celsius (C)         ");
 306   3         break;
 307   3        case VKEY_3:  // quick search
 308   3         ;
 309   3         for (i=0;i<8;i++) rom.b[i] = owbGetCacheROM(i);
 310   3         owbIncRom(&rom,31);
 311   3         while ( kbdGetKeyPress() != VKEY_CANCEL )
 312   3         {
 313   4          if ( owbSearchPath(&rom,OWB_DEVICESEARCH) )
 314   4          {
 315   5           owbCacheSearch();
 316   5           vocSendUInt( owbGetCacheIndex() );
 317   5           break;
 318   5          }
 319   4          if ( owbIsSearchEnd(&rom) )
 320   4          {
 321   5           owbPreSearchDevices( &rom );
 322   5          }
 323   4          osShowProcessing(2);
 324   4         }
 325   3         break;
 326   3        case VKEY_4:  // voice current ROM index
 327   3         vocSendUInt( owbGetCacheIndex() );
 328   3         break;
 329   3        case VKEY_CANCEL:
 330   3         vocStopAll();
 331   3         os_EnableVoice[3] = 0x00;
 332   3         lcdTextOut(0,3,"                    ");
 333   3         break;
 334   3        case VKEY_ENTER:
 335   3         rt = UIGT_MENU;
 336   3         break;
 337   3        default:
 338   3         rcv = 0xff;
 339   3        }
 340   2      
 341   2        // 显示时间、温度
 342   2        dtt = dttGetCurDateTime();
 343   2        if (dtt.ss != sec)
 344   2        {
 345   3         if ((sec % SEC_PER_CONVERT) == 0)
 346   3         {
 347   4          owbReadMeasure( &tempe, FALSE );
 348   4          lcdTextOut(6,1,"");
 349   4          lcdTempeOut( &tempe, os_TempeUnitInF );
 350   4       
 351   4          lcdTextOut(0,2,"ROM:");
 352   4          for (i=0;i<8;i++) lcdHexOut( owbGetCacheROM(i) );
 353   4         }
 354   3      
 355   3         //yy-mm-dd
 356   3         lcdTextOut(0,0,"");
 357   3         lcdDateOut( &dtt );
 358   3         //hh:mm:ss 
 359   3         lcdTextAddOut(" ");
 360   3         lcdTimeOut( &dtt );
 361   3      
 362   3         sec = dtt.ss;
 363   3        }
 364   2      
 365   2        //整点播报
C51 COMPILER V8.02   OS                                                                    04/26/2008 21:37:30 PAGE 7   

 366   2        if (g_HourClock)
 367   2        {
 368   3         g_HourClock = FALSE;
 369   3         dtt = dttGetCurDateTime();
 370   3         if ( owbGetRomBit((OWBROM*)os_EnableVoice,dtt.hh%24) )
 371   3         {
 372   4          vocTime();
 373   4          vocTempe( &tempe, os_TempeUnitInF );
 374   4         }
 375   3        }
 376   2      
 377   2        //alarm search a path

⌨️ 快捷键说明

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