按鍵控制電機顯示速度,按鍵電機速度
程式流程圖
代碼
#include<reg52.h>
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit jia_key=P3^6;
sbit jian_key=P3^7;
sbit zf_key=P3^5;
bit flag=0;
uchar num = 0,show_num=2,maichong=4,table_begin=0;
uchar code table1[]={0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
dula=0;
P0=table[show_num];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[0];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
}
void key()
{
if(jia_key==0)
{
delay(5);
if(jia_key==0)
{
num++;
if(num==4)
num=3;
while(jia_key==0);
}
}
if(jian_key==0)
{
delay(5);
if(jian_key==0)
{
if(num!=0)
num--;
else
num=0;
while(jian_key==0);
}
}
if(zf_key==0)
{
delay(5);
if(zf_key==0)
{
flag=~flag;
while(zf_key==0);
}
}
}
void dispose()
{
switch(num)
{
case 0:
show_num=2;
maichong=5;
break;
case 1:
show_num=4;
maichong=4;
break;
case 2:
show_num=6;
maichong=6;
break;
case 3:
show_num=8;
maichong=2;
break;
}
if(flag==0)
{
table_begin=0;
}
else
table_begin=4;
}
void qudong()
{
uchar i,j;
for(j=0+table_begin;j<4+table_begin;j++)
{
P1=table1[j];
for(i=0;i<maichong;i++)
{
display();
}
}
}
void main()
{
while(1)
{
key();
dispose();
qudong();
}
}
通過一個按鍵控制電機的速度,該怎?
步進電機的驅動執行個體
要求:控制電路3所示,開機後,電機不轉,按下啟動鍵,電機旋轉,速度為25轉/分,按下加1鍵,速度增加,按下減1鍵,速度降低,最高速度為100轉/分,最低轉帶為25轉/分,按下停止鍵,電機停轉。速度值要求在數位管上顯示出來。
1.要求分析
按上面的分析,改變轉速,只要改變P1.0~P1.3輪流變低電平的時間即可達到要求,這個時間不應採用延時來實現,因為會影響到其他功能的實現。這裡以定時的方式來實現。下面首先計算一下定時時間。
按要求,最低轉速為25轉/分,而上述步進電機的步距角為7.5,即每48個脈衝為1周,即在最低轉速時,要求為1200脈衝/分,相當於50ms/脈衝。而在最高轉速時,要求為100轉/分,即48000脈衝/分,相當於12.5ms/脈衝。可以列出下表
表1 步進電機轉速與定時器定時常數關係
速度 單步時間(us) TH1 TL1 實際定時(us)
25 50000 76 0 49996.8
26 48077 82 236 48074.18
27 46296 89 86 46292.61
28 44643 95 73 44640.155
?? … … … …
100 12500 211 0 12499.2
表中不僅計算出了TH1和TL1,而且還計算出了在這個定時常數下,真實的定時時間,可以根據這個計算值來估算真實速度與理論速度的誤差值。
表中TH1和TL1是根據定時時間算出來的定時初值,這裡用到的晶振是11.0592M。有了上述表格,程式就不難實現了,使用定時/計數器T1為定時器,定時時間到後切換輸出腳即可。
2.程式實現
定義DSB-1A實驗板的S1為啟動鍵,S2為停止鍵,S3為加1鍵,S4為減1鍵,程式如下:
StartEnd bit 01H ;起動及停止標誌
MinSpd EQU 25 ;起始轉動速度
MaxSpd EQU 100 ;最高轉動速度
Speed DATA 23H ;流動速度計數
DjCount DATA 24H ;控制電機輸出的一個值,初始為11110 111
Hidden EQU 10H ;消隱碼
Counter DATA 57H ;顯示計數器
DISPBUF DATA 58H ;顯示緩衝區
ORG 0000H
AJMP MAIN
ORG 000BH
JMP DISP
ORG 001BH
JMP DJZD
ORG 30H
MAIN:
MOV SP,#5FH
MOV P1,#0FFH
MOV A,#Hidden
MOV DispBuf,A
MOV DispBuf+1,A
MOV DispBuf+2,A
MOV DjCount,#11110111B
MOV SPEED,#MinSpd;起始轉動速度送入計數器
CLR StartEnd;停轉狀態
MOV TMOD,#00010001B ;
MOV TH0,#HIGH(65536-3000)
MOV TL0,#LOW(65536-3000)
MOV TH1,#0FFH;
MOV TL1,#0FFH
SETB TR0
SETB EA
SETB ET0
SETB ET1
LOOP: ACALL KEY ;鍵盤程式
JNB F0,m_NEXT1 ;無鍵繼續
ACALL KEYPROC ;否則調用鍵盤控制碼
m_NEXT1:
MOV A,Speed
MOV B......餘下全文>>
從鍵盤輸入步進電機的速度值,將其顯示到數位管 組合語言
做課程設計?
彙編不是這麼學的 自己試著寫 拿5分來網上求 不如靠自己 不然什麼都沒學到