|
做的仿真
全部資料下載包括仿真文件和源碼:
仿真.rar
(67.86 KB, 下載次數(shù): 488)
2015-5-8 20:05 上傳
點(diǎn)擊文件名下載附件
電機(jī)pwm調(diào)速程序(部分預(yù)覽完整版本請(qǐng)下載附件)
- /****************************************************
- ========= 直流電機(jī)控制+速度顯示 ==========
- ****************************************************/
- #include<reg52.h> //頭文件
- #define uchar unsigned char //宏定義
- #define uint unsigned int
- #define CYCLE 10 //定義PWM的周期T為10ms
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xff,0xc6,0x88};//0-9 R 共陽(yáng)數(shù)碼管段選數(shù)據(jù)
- /***************************************************
- 端口定義
- ***************************************************/
- sbit PWM1=P1^4; //PWM輸出口1(電機(jī)正轉(zhuǎn))
- sbit PWM2=P1^5; //PWM輸出口2(電機(jī)反轉(zhuǎn))
- sbit K1=P1^1; //加速
- sbit K2=P1^2; //減速
- sbit K3=P1^3; //正反轉(zhuǎn)
- sbit K4=P1^0; //啟動(dòng)停止
- /***************************************************/
- uchar PWM_ON=0; //PWM高電平時(shí)間
- uchar count=0; //中斷計(jì)時(shí)
- uchar num=0;
- uchar num1=0; //中斷時(shí)間計(jì)數(shù)
- uint num2=0; //外部中斷次數(shù)
- uchar flat=0; //正反轉(zhuǎn)標(biāo)示位
- uchar flag=0; //刷新數(shù)據(jù)標(biāo)示位
- sbit w0=P2^0;
- sbit w1=P2^1;
- sbit w2=P2^2;
- sbit w3=P2^3;
- /***************************************************
- 函數(shù)名稱:延時(shí)子函數(shù)
- 函數(shù)功能:按鍵消抖
- ***************************************************/
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- /***************************************************
- 函數(shù)名稱:按鍵子函數(shù)
- 函數(shù)功能:
- ***************************************************/
- void key()
- {
- if(K4==0) //啟動(dòng) 停止
- {
- delayms(5);
- if(K4==0)
- {
- while(!K4);
- num=!num;
- }
- }
- if(K1==0) //加速鍵
- {
- delayms(5);
- if(K1==0)
- {
- while(!K1);
- if(num<3)
- num++;
- }
- }
- if(K2==0) //減速鍵
- {
- delayms(5);
- if(K2==0)
- {
- while(!K2);
- if(num>0)
- num--;
- }
- }
- if(K3==0) //電機(jī)正反轉(zhuǎn)按鍵
- {
- delayms(5);
- if(K3==0)
- {
- while(!K3);
- flat++;
- if(flat==2)
- flat=0;
- }
- }
- switch(num)
- {
- case 0: PWM_ON=0; break; //占空比為00%
- case 1: PWM_ON=4; break; //占空比為40%
- case 2: PWM_ON=7; break; //占空比為70%
- case 3: PWM_ON=10; break; //占空比為100%
- default:
- break;
- }
- }
- /*******速度數(shù)據(jù)采集*****************************************/
- void sudu()
- {
- uint shuju;
- if(flag==1)
- {
- flag=0;
- shuju=num2*2; //電機(jī)一秒轉(zhuǎn)的圈數(shù)
- num2=0;
- }
- if(flat==0)
- P0=table[11]; //"C"
- else
- P0=table[12]; //"A"
- w0=1;
- delayms(10);
- w0=0;
- // delayms(3);
- // P2=0xfd;
- P0=table[shuju/100];
- w1=1;
- delayms(10);
- w1=0;
- // delayms(3);
- // P2=0xfb;
- P0=table[shuju%100/10];
- w2=1;
- delayms(10);
- w2=0;
- // delayms(3);
- // P2=0xf7;
- P0=table[shuju%10];
- // delayms(3);
- w3=1;
- delayms(10);
- w3=0;
- P2=0xff;
- }
- void init()
- {
- PWM1=1; //初始化
- PWM2=1;
- TMOD=0x11; //打開定時(shí)器
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ET0=1;
- TR0=1;
- EX0=1;
- IT0=1;
- TH1=(65536-1000)/256;
- TL1=(65536-1000)%256;
- EA=1;
- ET1=1;
- TR1=1;
- }
- /**************************************************
- 函數(shù)名稱:主函數(shù)
- 函數(shù)功能:
- **************************************************/
- void main()
- {
- init();
- while(1)
- {
- key();
- sudu();
- }
- }
- /**************************************************
- 函數(shù)名稱:定時(shí)器/計(jì)數(shù)器0中斷子函數(shù)
- 函數(shù)功能:
- **************************************************/
- void T1_time() interrupt 3
- {
- TH1=(65536-1000)/256;
- TL1=(65536-1000)%256;
- count++;
- if(count>CYCLE)
- count=0;
- if(count<PWM_ON) //如果計(jì)時(shí)時(shí)間在不大于高電平時(shí)時(shí)間,電機(jī)轉(zhuǎn)
- {
- if(flat==0)
- {
- PWM1=0;
- PWM2=1;
- }
- if(flat==1)
- {
- PWM1=1;
- PWM2=0;
- }
- }
- else //如果計(jì)時(shí)時(shí)間大于高電平時(shí)時(shí)間,電機(jī)停
- {
- PWM1=1;
- PWM2=1;
- }
- }
- void T0_time() interrupt 1 //定時(shí)器0
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- num1++;
- if(num1==10) //每0.5s刷新一次數(shù)據(jù)
- {
- num1=0;
- flag=1;
- }
- }
- void timer() interrupt 0 //外部中斷1
- {
- num2++;
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|