|
部分單片機(jī)源碼:
#define uchar unsigned char#define uint unsigned int
void delay(uint x) //延時(shí)函數(shù)
{
uint i,j;
for(i=x;i>0;i--)
for(j=0;j<110;j++); //執(zhí)行110次約為1ms
}
void SystemInt() //系統(tǒng)初始化
{
TMOD = 0x51; //T0定時(shí)器 T1計(jì)數(shù)器 均采用方式1
TH0 = (65536-250)/256;
TL0 = (65536-250)%256; //定時(shí)250us
ET0 = 1; TR0 = 1; //打開T0
ET1 = 1;TR1 = 1; //打開T1
TH1 = 0;
TL1 = 0; //計(jì)數(shù)器初值為0
EA = 1; //開啟總中斷
IN1 = 1;
IN2 = 0; //初始正轉(zhuǎn)
}
void PWMOUT() //PWM輸出控制
{
if(cnt<PWMTime) //小于計(jì)數(shù)變量,輸出高電平
{
PWM=1;
}
else
{
PWM=0; //大于計(jì)數(shù)變量,低電平
}
if(cnt>100)
cnt=0;
}
void SetSpeed() //速度設(shè)定
{
if(Add==0) //速度加
{
delay(100); //按鍵消抖
if(Add==0)
{
PWMTime+=10; //PWM波占空比增加10%
dw += 1; //檔位加1
if(dw>9)
{
dw = 9;
}
while(Add==0); //松手檢測
}
}
if(Sub==0) //如果速度減
{
delay(100); // 按鍵消抖
if(Sub==0)
{
PWMTime-=10; //PWM波占空比減少10%
dw -= 1; //檔位減1
if(dw<0)
{
dw = 0;
}
while(Sub==0);
}
}
if(zhen==0) //正轉(zhuǎn)
{
delay(100);
if(zhen==0)
{
IN1 = 1;
IN2 = 0;
while(zhen==0);
}
}
if(fan==0) //反轉(zhuǎn)
{
delay(100);
if(fan==0)
{
IN1 = 0;
IN2 = 1;
while(fan==0);
}
}
if(Stop==0) //停止
{
delay(100);
if(Stop==0)
{
IN1 = 1;
IN2 = 1;
while(Stop==0);
}
}
}
void xianshi() //數(shù)碼管顯示速度和檔位
{
uint shi,ge;
shi=speed/10;
ge=speed%10;
WE1 = 0;
P0 = table[ge]; //速度個(gè)位顯示
delay(1);
WE1 = 1;
WE2 = 0;
P0 = table[shi]; //速度十位顯示
delay(1);
WE2 = 1;
WE3 = 1;
WE4 = 0;
P0 = table[dw]; //檔位顯示
delay(1);
WE4 = 1;
}
void timer0() interrupt 1 //定時(shí)器
{
TH0 = (65536-250)/256;
TL0 = (65536-250)%256; //250us一次脈沖
cnt++;
time++;
if(time==4000) //1s時(shí)間內(nèi)T1的脈沖次數(shù) 1除以250us
{
time = 0; //計(jì)數(shù)置0
TR0 = 0;TR1 = 0; //先關(guān)閉定時(shí)器
speed = TH1;
speed = speed << 8; //左移8位
speed += TL1; //賦值
speed = speed*2.2; //電機(jī)轉(zhuǎn)一圈產(chǎn)生24個(gè)脈沖,轉(zhuǎn)速為speed/24*60 r/min
TH1 = 0;TL1 = 0; //清0重新計(jì)數(shù)
TR0 = 1;TR1 = 1; //重新啟動(dòng)定時(shí)器
}
}
|
|