MCU并聯控制步進電機(電梯模擬)stc89c51單片機主控
電機轉1圈為1樓層,電機運行:... 電機到站:up! new1:第一個電機對于的樓層 new2:第二個電機對于的樓層
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (127.16 KB, 下載次數: 22)
下載附件
2023-4-18 04:53 上傳
單片機源程序如下:
- #include "main.h"
- #include "Motor.h"
- #include "stdio.h"
- uint Key_Scan(void);
- uint res=0;
- void Motor_Muen(void)//菜單界面
- {
- LCD_Init();
- LCD_ShowString(1,1,"new1:01");
- LCD_ShowString(1,10,"new2:01");
- LCD_ShowString(2,6,"00");
- LCD_ShowString(2,10,"00");
- LCD_ShowString(2,1,"up!");
- LCD_ShowString(2,14,"up!");
- }
- //定時器初始化函數
- void Timer0Init(void) //1毫秒@22.1184MHz
- {
- TMOD = 0x01; //設置定時器模式
- TL0 = 0xCD; //設置定時初始值
- TH0 = 0xF8; //設置定時初始值
- TF0 = 0; //清除TF0標志
- ET0=1;
- // TR0 = 1; //定時器0開始計時
- EA=1;
- }
- int main(void) //主函數
- {
- uint keynum=0, //按鍵值
- enter=0, //確認
- Key_timer=0; //按鍵計時
- buzz1=0;buzz2=0;
- Motor_Muen();
- Timer0Init();
- while(1)
- {
- LCD_ShowString(2,1,"up!");
- LCD_ShowString(2,14,"up!");
- LCD_ShowNum(2,6,MotorKZ.Motor1_floor,2); //顯示選擇樓層
- LCD_ShowNum(2,10,MotorKZ.Motor2_floor,2);//顯示選擇樓層
- keynum=Key_Scan();
- switch(keynum)//按鍵標志位
- {
- case 1:MotorKZ.Motor1_floor++; //樓層加一
- break;
- case 2:MotorKZ.Motor1_floor--;//樓層減一
- break;
- case 3:enter=1;
- break;
- case 4:buzz1=~buzz1;
- break;
- case 5:MotorKZ.Motor2_floor++;//樓層加一
- break;
- case 6:MotorKZ.Motor2_floor--;//樓層減一
- break;
- case 7:enter=2;
- break;
- case 8:buzz2=~buzz2;
- break;
- }
- if(MotorKZ.Motor2_floor<0||MotorKZ.Motor1_floor<0){
- MotorKZ.Motor1_floor=0;MotorKZ.Motor2_floor=0;
- }
- if(enter==1)//電梯運行
- {
- enter=0;
- Motor1_circle();
- buzz1=1;Delay(200);buzz1=0;
- }else if(enter==2)//電梯運行
- {
- enter=0;
- Motor2_circle();
- buzz2=1;Delay(200);buzz2=0;
- }else if(enter==0);
-
- if(keynum==0)
- {
- if(Key_timer++>100)//按鍵時間記錄
- {Key_timer=0;
- TR0=1;
- }
- }else TR0=0;
- if(res==0x0f)
- {res=0;
- while(MotorKZ.Motor1_new--)//回到初始化樓層
- {
- if(MotorKZ.Motor1_new<2)break;
- Motor_REV(1);
- LCD_ShowNum(1,6,MotorKZ.Motor1_new,2);
- }
- while(MotorKZ.Motor2_new--)//回到初始化樓層
- {
- if(MotorKZ.Motor2_new<2)break;
- Motor_REV(0);
- LCD_ShowNum(1,15,MotorKZ.Motor2_new,2);
- }
- // MotorKZ.Motor2_new=1; //初始化樓層
- // MotorKZ.Motor1_new=1; //初始化樓層
- LCD_ShowNum(1,6,MotorKZ.Motor1_new,2);
- LCD_ShowNum(1,15,MotorKZ.Motor2_new,2);
- }
- }
- }
- void Timer0(void) interrupt 1
- {
- static uint t=0,time=0,min=0;
-
- TL0 = 0xCD; //設置定時初始值
- TH0 = 0xF8; //設置定時初始值
- if(t++==599)//毫秒
- {
- t=0;
- if(time++==59) //秒
- {
- time=0;
- if(min==999)//分
- {
- min=0;
- }
- }
- }
- if(time==10)//設置超時時間time是秒,min是分鐘這里設置的是30秒
- {
- time=0;
- TR0=0;res=0x0f;
-
- }
- }
- uint Key_Scan(void)//按鍵掃描
- {
- static uint keyflg=0;
- if((P3&0XFF)!=0XFF)
- {
- Delay(1);
- if((P3&0XFF)!=0XFF&&keyflg==0)
- {
- keyflg=1;
- switch(P3&0XFF)
- {
- case 0xfe:return 1;//按鍵1
- case 0xfd:return 2;//按鍵2
- case 0xfb:return 3;//按鍵3
- case 0xf7:return 4;//按鍵4
- case 0xef:return 5;//按鍵5
- case 0xdf:return 6;//按鍵6
- case 0xbf:return 7;//按鍵7
- case 0x7f:return 8;//按鍵8
- }
- }
- }else keyflg=0;
- return 0;
- }
復制代碼
Keil代碼與Proteus8.13仿真下載:
并聯控制步進電機(電梯模擬).zip
(318.2 KB, 下載次數: 50)
2023-4-18 00:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|