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

📄 main.lst

📁 uC_OS-II在C51下的一个完整的LCD项目源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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.02   MAIN                                                                  09/21/2008 12:29:52 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 {unsigned int add;
 346   1              struct {unsigned char addhi;unsigned char addlo;}addhalf;
 347   1              }curadd;
 348   1          curadd.add=SAD3;
 349   1          LCDORDER=0X46;                       /*设置光标地址*/
 350   1          LCDDATA=curadd.addhalf.addlo;
 351   1          LCDDATA=curadd.addhalf.addhi;
 352   1              LCDORDER=0X4C;
 353   1              LCDORDER=0X42;
 354   1              curadd.add=0;
 355   1              while(curadd.add<sizeof(Bmp015))
 356   1              {
 357   2                      if(Bmp015[curadd.add]==0)
 358   2                      {
 359   3                              curadd.add++;
 360   3                              lcncount=Bmp015[curadd.add];
 361   3                              while(lcncount)
 362   3                              {
 363   4                                      LCDDATA=0;
 364   4                                      lcncount--;
 365   4                              }
C51 COMPILER V8.02   MAIN                                                                  09/21/2008 12:29:52 PAGE 7   

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

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

 490   1              {
 491   2                      OSTimeDly(OS_TICKS_PER_SEC/10);
 492   2                      if(COM8279 & 0x0f)
 493   2                      {
 494   3                              if(newkey)
 495   3                              {
 496   4                                      if(COM8279 & 0x0f)
 497   4                                      {
 498   5                                              COM8279=0x50;   //读FIFO命令自动地址增量
 499   5                                              k=DAT8279;
 500   5                                              k=k&0x1f;               //取键盘数据低5位(32位键盘模式)
 501   5                                              if(keytype == 0)
 502   5                                              {
 503   6                                                      key=keytab18[k+keystaut];
 504   6                                              }
 505   5                                              else
 506   5                                              {
 507   6                                                      key=keytab20[k+keystaut];
 508   6                                              }
 509   5                                              keyinterrupt = 0;
 510   5                                              OSSemPost(KeySem);
 511   5                                              newkey = 0;
 512   5                                      }
 513   4                              }

⌨️ 快捷键说明

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