單片機控制電機正反轉(zhuǎn)及加減速控制
單片機源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula = P2^6;//數(shù)碼管段選
- sbit wela = P2^7;//數(shù)碼管位選
- sbit key1 = P3^4;//啟動
- sbit key2 = P3^5;//正轉(zhuǎn)/反轉(zhuǎn)
- sbit key3 = P3^6;//加速
- sbit key4 = P3^7;//減速
- sbit pul = P2^0;//脈沖
- sbit dir = P2^1;//方向
- sbit ena = P2^2;//使能
- int flag=0;//計數(shù)、正反轉(zhuǎn)標志
- int V = 0;//速度
- uint T,ge,shi;
- uchar temp,key;
- uchar code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管顯示0-9
- //........................延時函數(shù)...........................//
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- //........................定時器0/1初始化函數(shù)...........................//
- void T0_T1_init()
- {
- TMOD=0x01;//設(shè)置定時器為工作方式1
- TH0=(65536-30000)/256;//定時器0定時30ms
- TL0=(65536-30000)%256;
- TH1=(65536-T)/256;//定時器1定時30ms
- TL1=(65536-T)%256;
- EA=1; //開總中斷
- ET0=1; //開定時器0中斷
- ET1=1; //開定時器1中斷
- TR0=1; //啟動定時器0
- TR1=0; //啟動定時器1
-
- }
- //........................按鍵函數(shù)...........................//
- void keys()
- {
- if(key1 == 0)
- {
- delayms(5);
- if(key1 == 0)//消抖
- {
- TR1=~TR1;//開啟定時器1
-
- }
- while(!key1);
- }
- if(key2 == 0)
- {
- delayms(5);
- if(key2 == 0)
- {
- dir=~dir;//正轉(zhuǎn),反轉(zhuǎn)
- flag++;
- if(flag>1)flag=0;
- }
- while(!key2);
- }
- if(key3 == 0)
- {
- delayms(5);
- if(key3 == 0)//消抖
- {
- V=V+5;
- if(V>60)V=60;//加速
-
- }
- while(!key3);
- }
- if(key4 == 0)
- {
- delayms(5);
- if(key4 == 0)//消抖
- {
- V=V-5;
- if(V<0)V=0;//減速
-
- }
- while(!key4);
- }
- }
- void main()
- {
- T0_T1_init();
- while(1)
- {
- dula = 1;
- P0 = display[flag];//顯示正反轉(zhuǎn)
- dula = 0;
- P0 = 0xff;
- wela = 1;
- P0 = 0xfe;
- wela = 0;
- keys();
- T= 125000/V;
- }
- }
- void T0_time()interrupt 1
- {
- TH0=(65536-30000)/256;//定時器0定時30ms
- TL0=(65536-30000)%256;
- shi = V/10;
- ge = V%10;
- dula = 1;
- P0 = display[shi]; //顯示速度十位
- dula = 0;
- P0 = 0xff;
- wela = 1;
- P0 = 0xfb;
- wela = 0;
- delayms(10);
- dula = 1;
- P0 = display[ge];//顯示速度個位
- dula = 0;
- P0 = 0xff;
- wela = 1;
- P0 = 0xf7;
- wela = 0;
- delayms(10);
- }
- //........................定時器1函數(shù),控制電機頻率...........................//
- void T1_time()interrupt 3
- {
- TH1 = (uint)(65536-T)/256;
- TL1 = (uint)(65536-T)%256;
- pul=~pul;//脈沖反轉(zhuǎn)
- }
復制代碼
所有資料51hei提供下載:
伺服.rar
(18.2 KB, 下載次數(shù): 21)
2019-6-11 10:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|