標(biāo)題:
單片機電梯模擬程序 并聯(lián)控制步進電機Proteus仿真圖
[打印本頁]
作者:
人生哲紙
時間:
2023-4-18 00:49
標(biāo)題:
單片機電梯模擬程序 并聯(lián)控制步進電機Proteus仿真圖
MCU并聯(lián)控制步進電機(電梯模擬)stc89c51單片機主控
電機轉(zhuǎn)1圈為1樓層,電機運行:... 電機到站:up! new1:第一個電機對于的樓層 new2:第二個電機對于的樓層
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(127.16 KB, 下載次數(shù): 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!");
}
//定時器初始化函數(shù)
void Timer0Init(void) //1毫秒@22.1184MHz
{
TMOD = 0x01; //設(shè)置定時器模式
TL0 = 0xCD; //設(shè)置定時初始值
TH0 = 0xF8; //設(shè)置定時初始值
TF0 = 0; //清除TF0標(biāo)志
ET0=1;
// TR0 = 1; //定時器0開始計時
EA=1;
}
int main(void) //主函數(shù)
{
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)//按鍵標(biāo)志位
{
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; //設(shè)置定時初始值
TH0 = 0xF8; //設(shè)置定時初始值
if(t++==599)//毫秒
{
t=0;
if(time++==59) //秒
{
time=0;
if(min==999)//分
{
min=0;
}
}
}
if(time==10)//設(shè)置超時時間time是秒,min是分鐘這里設(shè)置的是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;
}
復(fù)制代碼
Keil代碼與Proteus8.13仿真下載:
并聯(lián)控制步進電機(電梯模擬).zip
(318.2 KB, 下載次數(shù): 50)
2023-4-18 00:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1