51單片機控制直流電機轉速仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (12.34 KB, 下載次數(shù): 61)
下載附件
2018-11-4 15:29 上傳
0.png (56.37 KB, 下載次數(shù): 57)
下載附件
2018-11-4 15:28 上傳
單片機源程序如下:
- #include <reg52.h>
- sbit P20=P2^0;
- sbit P21=P2^1;
- sbit P22=P2^2;
- sbit P23=P2^3;
- sbit P24=P2^4;
- sbit P25=P2^5;
- sbit P26=P2^6;
- sbit P27=P2^7;
- sbit P30=P3^0;
- unsigned int ge,shi,bai,qian,g,s,b;
- unsigned int j=0,getdata=0,t;
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void delay(unsigned int z) //延時
- {
- unsigned char x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void display() //顯示
- {
- P0=table[ge];
- P20=1;
- P21=1;
- P22=1;
- P23=1;
- P24=1;
- P25=1;
- P26=1;
- P27=0;
- delay(5);
- P0=0x00;
- P0=table[shi];
- P20=1;
- P21=1;
- P22=1;
- P23=1;
- P24=1;
- P25=1;
- P26=0;
- P27=1;
- delay(5);
- P0=0x00;
- P0=table[bai];
- P20=1;
- P21=1;
- P22=1;
- P23=1;
- P24=1;
- P25=0;
- P26=1;
- P27=1;
- delay(5);
- P0=0x00;
- P0=table[qian];
- P20=1;
- P21=1;
- P22=1;
- P23=1;
- P24=0;
- P25=1;
- P26=1;
- P27=1;
- delay(5);
- P0=0x00;
- //P0=able[b];
- //P20=1;
- //P21=1;
- //P22=1;
- //P23=1;
- //P24=1;
- //P25=0;
- //P26=1;
- //P27=1;
- //delay(5);
- //P0=0x00;
- //
- //P0=table[s];
- //P20=1;
- //P21=1;
- //P22=1;
- //P23=1;
- //P24=1;
- //P25=1;
- //P26=0;
- //P27=1;
- //delay(5);
- //P0=0x00;
- //P0=table[g];
- //P20=1;
- //P21=1;
- //P22=1;
- //P23=1;
- //P24=1;
- //P25=1;
- //P26=1;
- //P27=0;
- //delay(5);
- //P0=0x00;
- if(P30==0)
- P0=0x40;
- P20=0;
- P21=1;
- P22=1;
- P23=1;
- P24=1;
- P25=1;
- P26=1;
- P27=1;
- delay(50);
- P0=0x00;
- }
- void init()//初始化
- {
- TMOD=0X11;//定時器0和1開啟16位定時/計數(shù)模式(方式二)
- EX0=1;//允許開啟外部中斷0
- IT0=1;//設置中斷0下降沿觸發(fā)
- EA=1;//總開關開啟
- ET0=1;//定時/計數(shù)器0溢出中斷允許
- TR0=1;//啟動定時器0
- TH0=(65536-1000)/256; //定時1ms
- TL0=(65536-1000)%256;
- }
- void main() //主程序
- {
- init();
- while(1)
- {
- ge=getdata%10;
- shi=getdata/10%10;
- bai=getdata/100%10;
- qian=getdata/1000%10;
- // g=n%10;
- // s=n/10%10;
- // b=n/100%10;
-
- display();
- }
- }
- //M
- void int0(void) interrupt 0 //外部中斷0
- {
- j++; //每有一個脈沖觸發(fā)就加1
-
- }
-
- void Timer0() interrupt 1 //定時器中斷0
- {
- TR0=0;//關閉定時器0 暫停計時
- TH0=(65536-3000)/256;
- TL0=(65536-3000)%256;
- t++;
- if(t==1000)//設定1s判斷一次轉速
- {
- t=0;
- getdata=j*60.0/(24*3.0);//此電動機轉一圈編碼器產(chǎn)生24個脈沖
- j=0;
- }
- TR0=1;//開啟定時器0 重新計時
- }
復制代碼
全部資料51hei下載地址:
First.zip
(83.62 KB, 下載次數(shù): 81)
2018-11-4 15:20 上傳
點擊文件名下載附件
仿真圖+51工程 下載積分: 黑幣 -5
|