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

📄 main.lst

📁 51上面的UCOS编程 基本实现了液晶 LED 和按键 AD等外设功能 适合学习
💻 LST
📖 第 1 页 / 共 4 页
字号:
 252   2                              OSSemPend(KeySem,0,&lcnerr);
 253   2              }
 254   1              rectangle(SAD2,x-1,y,x+nu*8+8,y+16,0);
 255   1              myprintf(SAD1,TA_LEFT,x+nu*8,y," ");
 256   1              keystaut=0;
 257   1              return(1);
 258   1      }
 259          
 260          //输入系统时间及网络信息
 261          void setsysini() reentrant
 262          {
 263   1              unsigned char tem;
 264   1      
 265   1              clssed(SAD1);
 266   1              clssed(SAD2);
 267   1              linex(SAD1,60,70,250);
 268   1              linex(SAD1,80,70,250);
 269   1              linex(SAD1,122,70,250);
 270   1      
 271   1              liney(SAD1,70,60,122);
 272   1              liney(SAD1,250,60,122);
 273   1              
 274   1              myprintf(SAD1,TA_CENTER,160,62,"系统时钟设定");
 275   1              myprintf(SAD1,TA_LEFT,90,85,"当前日期:");
 276   1              myprintf(SAD1,TA_LEFT,90,104,"当前时间:");
 277   1      
 278   1              readtimer(disstr,1);
 279   1              myprintf(SAD1,TA_LEFT,165,85,disstr);
 280   1              readtimer(disstr,0);
 281   1              myprintf(SAD1,TA_LEFT,165,104,disstr);
 282   1      
 283   1              rectangle(SAD2,90,83,160,101,1);
 284   1              tem=0;
 285   1              while(1)
 286   1              {
 287   2                      OSSemPend(KeySem,0,&lcnerr);
 288   2                      if(key==INPUT)//输入键
 289   2                      {
 290   3                              switch(tem)
 291   3                              {
 292   4                              case 0:
 293   4                                      if(gettimestr(165,84+tem*19,8,1))
 294   4                                              settimer(disstr,1);
 295   4                                      break;
 296   4                              case 1:
 297   4                                      if(gettimestr(165,84+tem*19,8,0))
 298   4                                              settimer(disstr,0);                             
 299   4                                      break;
 300   4                              default:
 301   4                                      break;
 302   4                              }
 303   3                      }
C51 COMPILER V8.08   MAIN                                                                  03/18/2008 13:49:06 PAGE 6   

 304   2                      else
 305   2                      {
 306   3                              if(key==UP||key==DOWN)//上下方向键
 307   3                              {
 308   4                                      if(key==DOWN)
 309   4                                      {
 310   5                                              rectangle(SAD2,90,83+tem*19,160,101+tem*19,0);
 311   5                                              if(tem<1)
 312   5                                                      tem++;
 313   5                                              else
 314   5                                                      tem=0;
 315   5                                              rectangle(SAD2,90,83+tem*19,160,101+tem*19,1);
 316   5                                      }
 317   4                                      else
 318   4                                      {
 319   5                                              rectangle(SAD2,90,83+tem*19,160,101+tem*19,0);
 320   5                                              if(tem>0)
 321   5                                                      tem--;
 322   5                                              else
 323   5                                                      tem=1;
 324   5                                              rectangle(SAD2,90,83+tem*19,160,101+tem*19,1);
 325   5                                      }
 326   4                              }
 327   3                              else
 328   3                              {
 329   4                                      if(key==ENTER)
 330   4                                      {
 331   5                                              return;
 332   5                                      }
 333   4                                      else
 334   4                                      {
 335   5                                              if(key==ESC)
 336   5                                                      return;
 337   5                                      }
 338   4                              }
 339   3                      }
 340   2              }
 341   1      }
 342          void showlogo() reentrant
 343          {
 344   1              unsigned char lcncount;
 345   1              xdata union
 346   1              {unsigned int add;
 347   1                 struct
 348   1                 {
 349   1                   unsigned char addhi;
 350   1                   unsigned char addlo;
 351   1                 }addhalf;
 352   1              }curadd;
 353   1          curadd.add=SAD3;   aaa
 354   1          LCDORDER=0X46;                       /*设置光标地址*/
*** WARNING C206 IN LINE 354 OF MAIN.C: 'aaa': missing function-prototype
*** ERROR C267 IN LINE 354 OF MAIN.C: 'aaa': requires ANSI-style prototype
 355   1          LCDDATA=curadd.addhalf.addlo;
 356   1          LCDDATA=curadd.addhalf.addhi;
 357   1              LCDORDER=0X4C;
 358   1              LCDORDER=0X42;
 359   1              curadd.add=0;
 360   1              while(curadd.add<sizeof(Bmp015))
 361   1              {
 362   2                      if(Bmp015[curadd.add]==0)
 363   2                      {
C51 COMPILER V8.08   MAIN                                                                  03/18/2008 13:49:06 PAGE 7   

 364   3                              curadd.add++;
 365   3                              lcncount=Bmp015[curadd.add];
 366   3                              while(lcncount)
 367   3                              {
 368   4                                      LCDDATA=0;
 369   4                                      lcncount--;
 370   4                              }
 371   3                              curadd.add++;
 372   3                      }
 373   2                      else
 374   2                      {
 375   3                              LCDDATA=Bmp015[curadd.add];
 376   3                              curadd.add++;
 377   3                      }
 378   2              }
 379   1      }
 380          //系统初始化
 381          void sys_init(void *lcnpdata) reentrant
 382          {
 383   1              unsigned char tem,tem1;
 384   1      
 385   1              lcnpdata = lcnpdata;
 386   1              ADNUMBER1 = 1;
 387   1              ADNUMBER2 = 1;
 388   1              ADNUMBER3 = 1;
 389   1              //8279和SED1330初始化
 390   1              COM8279=0xd1;                   //总清除命令160us
 391   1          initlcd();
 392   1              showlogo();
 393   1              clssed(SAD1);
 394   1              clssed(SAD2);
 395   1              COM8279=0x08;
 396   1              COM8279=0x32;          //键盘,显示方式,时钟分频
 397   1              initcount();
 398   1              if(onpower!=0x55)
 399   1              {
 400   2                      keytype=0;
 401   2                      onpower=0x55;
 402   2              }
 403   1              
 404   1      
 405   1              tem = 0x55;
 406   1              for(tem1=0;tem1<10;tem1++)
 407   1              {
 408   2                      Writei2c(&tem,tem1+160,1);
 409   2              }
 410   1              for(tem1=0;tem1<10;tem1++)
 411   1              {
 412   2                      Readi2c(&tem,tem1+160,1);
 413   2                      if(tem != 0x55)
 414   2                              ok24c02 = 0;
 415   2              }
 416   1              //创建键盘信号量
 417   1              KeySem=OSSemCreate(0);
 418   1      
 419   1              tem=0x81;//1024
 420   1              Writei2ctime(&tem,0x0D,0x01);
 421   1      
 422   1      #if OS_TASK_STAT_EN     
                      OSStatInit();
              #endif
 425   1              OSTaskCreate(mysecondtask, (void *)0, &mysecondtask_Stk[0],3);
C51 COMPILER V8.08   MAIN                                                                  03/18/2008 13:49:06 PAGE 8   

 426   1              OSTaskCreate(lcngetkey, (void *)0, &lcngetkey_Stk[0],4);
 427   1              OSTaskCreate(gettesttype, (void *)0, &gettesttype_Stk[0],5);    
 428   1              init_serial();
 429   1              //消除警告
 430   1              OSVersion();
 431   1              OSTaskDelReq(OS_PRIO_SELF);
 432   1              //消除警告
 433   1              OSTaskDel(OS_PRIO_SELF);
 434   1      }
 435          
 436          void gettesttype(void *lcnpdata) KCREETRANT
 437          {
 438   1              unsigned char lastselect = 0;
 439   1              unsigned char tem = 0;
 440   1      
 441   1              lcnpdata = lcnpdata;
 442   1              clssed(SAD1);
 443   1              clssed(SAD2);
 444   1              linex(SAD1,39,48,270);
 445   1              myprintf(SAD1,TA_CENTER,160,20,"通用板系统调试程序");
 446   1              myprintf(SAD1,TA_CENTER,160,90, "用18键通用键盘");
 447   1              myprintf(SAD1,TA_CENTER,160,120,"用20键通用键盘");      
 448   1              myprintf(SAD1,TA_CENTER,160,200,"唐山百川智能机器有限公司");    
 449   1              rectangle(SAD2,0,222,319,239,1);
 450   1              readtimer(disstr,1);
 451   1              myprintf(SAD1,TA_LEFT,186,223,disstr);  
 452   1              myprintf(SAD1,TA_LEFT,2,223,"按键选择键盘");
 453   1              lastselect = keytype;
 454   1              rectangle(SAD2,103,88+lastselect*30,217,108+lastselect*30,1);
 455   1              LCDORDER=0X59;
 456   1              LCDDATA=0X14;   
 457   1              while(1)
 458   1              {
 459   2                      OSSemPend(KeySem,2,&lcnerr);
 460   2                      if(lcnerr==OS_NO_ERR)
 461   2                      {
 462   3                              rectangle(SAD2,103,88+lastselect*30,217,108+lastselect*30,0);
 463   3                              if(lastselect > 0)
 464   3                              {
 465   4                                      keytype = 0;
 466   4                                      lastselect = 0;
 467   4                              }
 468   3                              else
 469   3                              {
 470   4                                      keytype = 1;
 471   4                                      lastselect = 1;
 472   4                              }
 473   3                              rectangle(SAD2,103,88+lastselect*30,217,108+lastselect*30,1);
 474   3                      }
 475   2                      if(bSecond)
 476   2                      {
 477   3                              tem++;
 478   3                              if(tem > 4)
 479   3                              {
 480   4                                      OSTaskCreate(main1test, (void *)0, &main1test_Stk[0],6);
 481   4                                      OSTaskDel(OS_PRIO_SELF);
 482   4                              }
 483   3                              bSecond=0;                                      
 484   3                              readtimer(disstr,0);
 485   3                              myprintf(SAD1,TA_LEFT,254,223,disstr);
 486   3                      }
 487   2              }
C51 COMPILER V8.08   MAIN                                                                  03/18/2008 13:49:06 PAGE 9   

 488   1      }
 489          
 490          void lcngetkey(void *lcnpdata) reentrant
 491          {
 492   1              unsigned char k;
 493   1              unsigned char newkey = 1;
 494   1              lcnpdata=lcnpdata;
 495   1              while(1)
 496   1              {
 497   2                      OSTimeDly(OS_TICKS_PER_SEC/10);
 498   2                      if(COM8279 & 0x0f)
 499   2                      {
 500   3                              if(newkey)
 501   3                              {
 502   4                                      if(COM8279 & 0x0f)
 503   4                                      {
 504   5                                              COM8279=0x50;   //读FIFO命令自动地址增量
 505   5                                              k=DAT8279;
 506   5                                              k=k&0x1f;               //取键盘数据低5位(32位键盘模式)
 507   5                                              if(keytype == 0)
 508   5                                              {
 509   6                                                      key=keytab18[k+keystaut];

⌨️ 快捷键说明

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