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

📄 programe.lst

📁 步进电机和lcd显示的程序~基于pwm控制和虚拟的显示 上位机通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
 237          void wdata(uc dat)                                         //写显示数据
 238          {
 239   1        chkbusy();                                                            //写等待 
 240   1        P2=0xff;                                                                           //使能LCD
 241   1        RW=0;                                                                            //读禁止 
C51 COMPILER V8.08   PROGRAME                                                              06/01/2008 22:40:39 PAGE 5   

 242   1        RS=1;                                                                          //输出 设置 
 243   1        P2=dat;                                                                       //写数据代码 
 244   1        E=1;                                                                           //以下两句产生下降沿 
 245   1        E=0;                                                         // 
 246   1       }
 247           //***********************************************
 248           //****************显示LCD程序********************
 249           //*****************可以更改程序中的64变为32就可以输出数字了**********
 250           //****************************************************************
 251           //*************还可以换成生成图片的形式,具体****************
 252           ///****************************************************
 253          void  disrow(uc page,uc col,uc *temp)
 254           { 
 255   1        uc i;
 256   1        if(col<64)                                            // 左半平面
 257   1        { 
 258   2          L=1;R=0;
 259   2              wcode(LCDPAGE+page);                               // 写指令 页 
 260   2              wcode(LCDLINE+col);                                    //写指令行 
 261   2              if((col+16)<64)                                       //如果字在左半平面显示不了,转到右半平面去 
 262   2              { 
 263   3               for(i=0;i<16;i++)                                    //写字 
 264   3               wdata(*(temp+i));
 265   3               }
 266   2               else                                                         //右半平面 
 267   2               {
 268   3               for(i=0;i<64-col;i++)                           //减去左边数,从右半平面第一位开始显示 
 269   3               wdata(*(temp+i));                                       //写字 显示 
 270   3               L=0;R=1;                                                        //右半平面 
 271   3           wcode(LCDPAGE+page);                            // 写指令 页 
 272   3           wcode(LCDLINE);                                   //写指令行 
 273   3               for(i=64-col;i<16;i++)                          //写字 右半平面 
 274   3               wdata(*(temp+i));
 275   3           }
 276   2         }
 277   1         else
 278   1         {  
 279   2           L=0;R=1;
 280   2           wcode(LCDPAGE+page);                          // 写指令 页 
 281   2           wcode(LCDLINE+col-64);                           //写指令行 
 282   2               for(i=0;i<16;i++)                                    //写字 
 283   2               wdata(*(temp+i)); 
 284   2              }
 285   1      }
 286          //*********************供调用 ****子程序 *************
 287          //****************************************
 288          void  display( uc page,uc col,uc *temp)
 289          { 
 290   1              disrow( page, col, temp);                       //显示上半字 
 291   1                      disrow( page+1, col, temp+16);               //显示下半字 
 292   1      } 
 293          //***********************主***控****程********序********************
 294          //******************************************************************
 295          //***************程序完成于2008年6月 1日,儿童节********************
 296          //***************程序员:韩福伟************************************
 297          //**********江西理工大学应用科学学院机电学部自动化******************
 298          //******************************************************************
 299          //*********
 300          void main(void) 
 301          {  
 302   1         P2=0xff;
 303   1         iniLCD();                                      //初始化 LCD
C51 COMPILER V8.08   PROGRAME                                                              06/01/2008 22:40:39 PAGE 6   

 304   1         display(0,0x00,&JIANG);                         //    江 
 305   1         display(0,0x10,&XI);                            //    西 
 306   1         display(0,0x20,&LI);                            //   理 
 307   1         display(0,0x30,&GONG);                         //   工 
 308   1         display(0,0x40,&DA);                            //  大 
 309   1         display(0,0x50,&XUE);                            //  学 
 310   1         step2=0;
 311   1         step1=0;
 312   1         P1=0xff;
 313   1         P0=0;
 314   1         EX1=1;
 315   1         EA=1;                                               //开中断 
 316   1         speed=2010;
 317   1         while(1)
 318   1        {  
 319   2           if((scan_key1==1)&(scan_key2==0))             // 正转 
 320   2               {  
 321   3                  display(6,0x00,&ZHENG);                     //  LCD显示 
 322   3              display(6,0x10,&ZHUAN);
 323   3                  ground(step_index);
 324   3                  delay(speed);
 325   3                  step_index++;                                                  //大于7,从头再来 
 326   3                  if(step_index>7)
 327   3                      step_index=0; 
 328   3                }
 329   2               if((scan_key1==0)&(scan_key2==1))                 //反转 
 330   2               {                                                                  
 331   3                 ground(step_index);
 332   3                 display(6,0x00,&FAN);                      //         LCD显示 
 333   3             display(6,0x10,&ZHUAN);
 334   3                 delay(speed);
 335   3                 step_index--;
 336   3                 if(step_index<0)                                                     //小于0,从头再来。 
 337   3                      step_index=7;
 338   3                }
 339   2               if(scan_key1==0&scan_key2==0)
 340   2                { 
 341   3                 display(6,0x00,&TING);                     //        停止 
 342   3             display(6,0x10,&ZHI);
 343   3                 display(6,0x20,&BAI);
 344   3                 display(6,0x30,&BAI);
 345   3                 P0=0xff;
 346   3                }
 347   2               if(step1==1&step2==0)
 348   2                { 
 349   3                  speed=speed-100;
 350   3                      if(speed<200|speed==200)                                   //小于话,说明电机的速度不能再提高了。
 351   3                      { speed=200;                                                       //speed参数自己设定,以下遇到也是一样的。我只是一个乱写的值
 352   4                        display(6,0x20,&ZHENG);                                //正常运行 
 353   4                        display(6,0x30,&CHANG);
 354   4                        display(6,0x40,&YUN);
 355   4                        display(6,0x50,&XING);
 356   4                       }
 357   3                       else                                           //加速 
 358   3                      {
 359   4                       display(6,0x20,&JIA);
 360   4                       display(6,0x30,&SU);
 361   4                      }
 362   3                }
 363   2                if(step1==0&step2==1)
 364   2                { 
 365   3                  speed=speed+100;                           //这里面的参数,论实际情况更改 
C51 COMPILER V8.08   PROGRAME                                                              06/01/2008 22:40:39 PAGE 7   

 366   3                      if(speed>2500|speed==2500)                        //如果 小于了,就说明到饿低速,可以用停止按键停止。
 367   3                      { speed=2500;                                              //低速运行 
 368   4                        display(6,0x20,&DI);
 369   4                        display(6,0x30,&SU);
 370   4                        display(6,0x40,&YUN);
 371   4                        display(6,0x50,&XING);
 372   4                       }
 373   3                        else
 374   3                        {
 375   4                        display(6,0x20,&JIAN);                    //减速 
 376   4                        display(6,0x30,&SU);
 377   4                        }
 378   3                }
 379   2       }
 380   1      }
 381          //***************************************************
 382          //*************************     延时子程序**************
 383          //**************************************************
 384          void delay(ui time)                                 ///延时程序 
 385          { for (count1=0;count1<time;count1++ )                  //此处可以用中断进行准确定时。我只是瞎定了几个参数 
 386   1        for(count2=0;count2<3;count2++);
 387   1      }
 388          //*********************************************************
 389          //******************按键处理程序****************************
 390          //************************************************************
 391          void key(void) interrupt 2
 392          { 
 393   1        uc i;
 394   1        for(i=0;i<200;i++);                                              //延时防抖 
 395   1        if(P3_3==0)                                                   
 396   1         { 
 397   2          butter=~P1;
 398   2          switch(butter)
 399   2               {case 0x01:    scan_key1=1;scan_key2=0; break;        //正常运行 ,用两个数字进行选择,是不错的办法
 400   3                case 0x02:    scan_key1=0;scan_key2=0;break;        //停止 
 401   3                case 0x04:    scan_key1=0 ;scan_key2=1; break;      //加速 
 402   3                case 0x08:    step1=1;step2=0;break;               //减速 
 403   3                case 0x10:    step1=0;step2=1;break;              //正转 
 404   3                default :                ;                             //其它值返回 
 405   3               }
 406   2         }
 407   1         P1=0XFF;
 408   1      }
 409          //**************************************************
 410          //**********************转步************************
 411          //**************************************************
 412          void ground(step_index)  //转步 
 413          { 
 414   1       switch(step_index)
 415   1         {
 416   2           case 0://0            // 这里就说明了同步电机是怎么转的。我本来是用了代码的,
 417   2            P0_0 = 1;            //但是后来考虑了一些初学者不懂同步电机到底怎么转的
 418   2            P0_1 = 0;            //我就换成这个了, 知道怎么转的人,就换成代码把,一样的
 419   2            P0_2 = 0;
 420   2            P0_3 = 0;
 421   2            break;
 422   2                case 1://0,1  
 423   2            P0_0 = 1;
 424   2            P0_1 = 1;
 425   2            P0_2 = 0;
 426   2            P0_3 = 0;
 427   2            break;
C51 COMPILER V8.08   PROGRAME                                                              06/01/2008 22:40:39 PAGE 8   

 428   2                case 2://1
 429   2            P0_0 = 0;
 430   2            P0_1 = 1;
 431   2            P0_2 = 0;
 432   2            P0_3 = 0;
 433   2            break;
 434   2                case 3://1,2 
 435   2            P0_0 = 0;
 436   2            P0_1 = 1;
 437   2            P0_2 = 1;
 438   2            P0_3 = 0;
 439   2            break;
 440   2                case 4://2 
 441   2            P0_0 = 0;
 442   2            P0_1 = 0;
 443   2            P0_2 = 1;
 444   2            P0_3 = 0;
 445   2            break;
 446   2                case 5://2,3 
 447   2            P0_0 = 0;
 448   2            P0_1 = 0;
 449   2            P0_2 = 1;
 450   2            P0_3 = 1;
 451   2            break;
 452   2                case 6://3 
 453   2            P0_0 = 0;
 454   2            P0_1 = 0;
 455   2            P0_2 = 0;
 456   2            P0_3 = 1;
 457   2            break;
 458   2                case 7://3,0 
 459   2            P0_0 = 0;
 460   2            P0_1 = 0;
 461   2            P0_2 = 0;
 462   2            P0_3 = 1;
 463   2        }     
 464   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1164    ----
   CONSTANT SIZE    =    640    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     78       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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