久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1526|回復: 0
打印 上一主題 下一主題
收起左側

單片機電梯模擬程序 并聯控制步進電機Proteus仿真圖

[復制鏈接]
跳轉到指定樓層
樓主
MCU并聯控制步進電機(電梯模擬)stc89c51單片機主控
電機轉1圈為1樓層,電機運行:... 電機到站:up!  new1:第一個電機對于的樓層 new2:第二個電機對于的樓層
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include "main.h"
  2. #include "Motor.h"
  3. #include "stdio.h"
  4. uint Key_Scan(void);
  5. uint res=0;
  6. void Motor_Muen(void)//菜單界面
  7. {
  8.         LCD_Init();
  9.         LCD_ShowString(1,1,"new1:01");
  10.         LCD_ShowString(1,10,"new2:01");
  11.         LCD_ShowString(2,6,"00");
  12.         LCD_ShowString(2,10,"00");
  13.         LCD_ShowString(2,1,"up!");
  14.         LCD_ShowString(2,14,"up!");
  15. }

  16. //定時器初始化函數
  17. void Timer0Init(void)                //1毫秒@22.1184MHz
  18. {
  19.         TMOD = 0x01;                //設置定時器模式
  20.         TL0 = 0xCD;                //設置定時初始值
  21.         TH0 = 0xF8;                //設置定時初始值
  22.         TF0 = 0;                //清除TF0標志
  23.         ET0=1;
  24. //        TR0 = 1;                //定時器0開始計時
  25.         EA=1;
  26. }

  27. int main(void)        //主函數
  28. {
  29.         uint keynum=0, //按鍵值
  30.                  enter=0,  //確認
  31.                  Key_timer=0; //按鍵計時
  32.         buzz1=0;buzz2=0;
  33.         Motor_Muen();
  34.         Timer0Init();
  35.         while(1)
  36.         {
  37.                 LCD_ShowString(2,1,"up!");  
  38.                 LCD_ShowString(2,14,"up!");
  39.                 LCD_ShowNum(2,6,MotorKZ.Motor1_floor,2); //顯示選擇樓層
  40.                 LCD_ShowNum(2,10,MotorKZ.Motor2_floor,2);//顯示選擇樓層
  41.                 keynum=Key_Scan();
  42.                 switch(keynum)//按鍵標志位
  43.                 {
  44.                         case 1:MotorKZ.Motor1_floor++; //樓層加一
  45.                                 break;
  46.                         case 2:MotorKZ.Motor1_floor--;//樓層減一
  47.                                 break;
  48.                         case 3:enter=1;
  49.                                 break;
  50.                         case 4:buzz1=~buzz1;
  51.                                 break;
  52.                         case 5:MotorKZ.Motor2_floor++;//樓層加一
  53.                                 break;
  54.                         case 6:MotorKZ.Motor2_floor--;//樓層減一
  55.                                 break;
  56.                         case 7:enter=2;
  57.                                 break;
  58.                         case 8:buzz2=~buzz2;
  59.                                 break;
  60.                 }
  61.                 if(MotorKZ.Motor2_floor<0||MotorKZ.Motor1_floor<0){
  62.                         MotorKZ.Motor1_floor=0;MotorKZ.Motor2_floor=0;
  63.                 }
  64.                 if(enter==1)//電梯運行
  65.                 {
  66.                         enter=0;
  67.                         Motor1_circle();
  68.                         buzz1=1;Delay(200);buzz1=0;
  69.                 }else if(enter==2)//電梯運行
  70.                 {
  71.                         enter=0;
  72.                         Motor2_circle();
  73.                         buzz2=1;Delay(200);buzz2=0;
  74.                 }else if(enter==0);
  75.                
  76.                 if(keynum==0)
  77.                 {
  78.                         if(Key_timer++>100)//按鍵時間記錄
  79.                         {Key_timer=0;
  80.                                 TR0=1;
  81.                         }
  82.                 }else TR0=0;
  83.                 if(res==0x0f)
  84.                 {res=0;
  85.                         while(MotorKZ.Motor1_new--)//回到初始化樓層
  86.                         {
  87.                                 if(MotorKZ.Motor1_new<2)break;
  88.                                 Motor_REV(1);
  89.                                 LCD_ShowNum(1,6,MotorKZ.Motor1_new,2);
  90.                         }
  91.                         while(MotorKZ.Motor2_new--)//回到初始化樓層
  92.                         {
  93.                                 if(MotorKZ.Motor2_new<2)break;
  94.                                 Motor_REV(0);
  95.                                 LCD_ShowNum(1,15,MotorKZ.Motor2_new,2);
  96.                         }
  97. //                        MotorKZ.Motor2_new=1;  //初始化樓層
  98. //                        MotorKZ.Motor1_new=1;  //初始化樓層
  99.                         LCD_ShowNum(1,6,MotorKZ.Motor1_new,2);
  100.                         LCD_ShowNum(1,15,MotorKZ.Motor2_new,2);
  101.                 }
  102.         }
  103. }

  104. void Timer0(void) interrupt 1
  105. {
  106.         static uint t=0,time=0,min=0;
  107.         
  108.         TL0 = 0xCD;                //設置定時初始值
  109.         TH0 = 0xF8;                //設置定時初始值
  110.         if(t++==599)//毫秒
  111.         {
  112.                 t=0;
  113.                 if(time++==59) //秒
  114.                 {
  115.                         time=0;
  116.                         if(min==999)//分
  117.                         {
  118.                                 min=0;
  119.                         }
  120.                 }
  121.         }
  122.         if(time==10)//設置超時時間time是秒,min是分鐘這里設置的是30秒
  123.         {
  124.                 time=0;
  125.                 TR0=0;res=0x0f;
  126.                
  127.         }
  128. }

  129. uint Key_Scan(void)//按鍵掃描
  130. {
  131.         static uint keyflg=0;
  132.         if((P3&0XFF)!=0XFF)
  133.         {
  134.                 Delay(1);
  135.                 if((P3&0XFF)!=0XFF&&keyflg==0)
  136.                 {
  137.                         keyflg=1;
  138.                         switch(P3&0XFF)
  139.                         {
  140.                                 case 0xfe:return 1;//按鍵1
  141.                                 case 0xfd:return 2;//按鍵2
  142.                                 case 0xfb:return 3;//按鍵3
  143.                                 case 0xf7:return 4;//按鍵4
  144.                                 case 0xef:return 5;//按鍵5
  145.                                 case 0xdf:return 6;//按鍵6
  146.                                 case 0xbf:return 7;//按鍵7
  147.                                 case 0x7f:return 8;//按鍵8
  148.                         }
  149.                 }
  150.         }else keyflg=0;
  151.         return 0;
  152. }
復制代碼

Keil代碼與Proteus8.13仿真下載:
并聯控制步進電機(電梯模擬).zip (318.2 KB, 下載次數: 50)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 又爽又黄axxx片免费观看 | 亚洲黄色一级 | 久久69精品久久久久久国产越南 | 国产一级片 | 成人黄色av | 日日爱视频 | 最新日韩av| 国产精品色| 久久手机在线视频 | 国产日产精品一区二区三区四区 | av网站在线看| 国产精品高潮呻吟 | 日韩中文字幕在线观看 | 国产资源一区二区三区 | 日韩资源 | 盗摄精品av一区二区三区 | 日韩中文一区 | 日韩精品一区在线 | 99精品久久久久 | 手机av免费在线 | 青草视频在线 | 国产精品99久久久久久久久久久久 | 精品国产久 | 欧美a区 | 欧一区二区 | 人人擦人人 | 91免费看片| 久精品久久 | 丝袜美腿一区 | 国产日韩精品一区二区三区 | 在线成人av | 天天干天天草 | 九九久久精品视频 | 91久久精品一区二区二区 | 91偷拍精品一区二区三区 | 国产欧美精品区一区二区三区 | 精品成人在线观看 | 涩爱av一区二区三区 | 国产精品自产拍 | 亚洲国产免费 | 国产精品美女久久久久aⅴ国产馆 |