|
void SegRefre()
{
Data_Buffer[0]=SpeedSet/1000; // SpeedSet的千位
Data_Buffer[1]=SpeedSet%1000/100;// SpeedSet的百位
Data_Buffer[2]=SpeedSet%100/10;// SpeedSet的十位
Data_Buffer[3]=SpeedSet%10;// SpeedSet的個(gè)位
Data_Buffer[4]=num/1000; // num的千位
Data_Buffer[5]=num%1000/100;// num的百位
Data_Buffer[6]=num%100/10;// num的十位
Data_Buffer[7]=num%10;// num的個(gè)位
}
void int0() interrupt 0 //外部中斷計(jì)數(shù)
{
Inpluse++; //計(jì)數(shù)累加
}
void t0() interrupt 1 //定時(shí)器中斷 周期2ms
{
static unsigned char Bit=0;//定義變量(這個(gè)變量應(yīng)該定義在函數(shù)外部)
static unsigned int time=0;//定義變量(這個(gè)變量應(yīng)該定義在函數(shù)外部)
TH0=(65536-2000)/256;//計(jì)數(shù)器初始值高位
TL0=(65536-2000)%256;//計(jì)數(shù)值初始值低位
time++; //變量自增
Bit++;//變量自增
if(Bit>7)
{ Bit=0;} //0-7循環(huán)
switch(Bit)
{
case 0:P0=0xff;P2=Duan[Data_Buffer[0]]; P0=0X7F;break;//第一個(gè)數(shù)碼管輸出SpeedSet的千位
case 1:P0=0xff;P2=Duan[Data_Buffer[1]]; P0=0XBF;break;//第二個(gè)數(shù)碼管輸出SpeedSet的百位
case 2:P0=0xff;P2=Duan[Data_Buffer[2]]; P0=0XDF;break;//第三個(gè)數(shù)碼管輸出SpeedSet的十位
case 3:P0=0xff;P2=Duan[Data_Buffer[3]]; P0=0XEF;break;//第四個(gè)數(shù)碼管輸出SpeedSet的個(gè)位
case 4:P0=0xff;P2=Duan[Data_Buffer[4]]; P0=0XF7;break;//第五個(gè)數(shù)碼管輸出num的千位
case 5:P0=0xff;P2=Duan[Data_Buffer[5]]; P0=0XFB;break;//第六個(gè)數(shù)碼管輸出num的百位
case 6:P0=0xff;P2=Duan[Data_Buffer[6]]; P0=0XFD;break;//第七個(gè)數(shù)碼管輸出num的十位
case 7:P0=0xff;P2=Duan[Data_Buffer[7]]; P0=0XFE;break; //第八個(gè)數(shù)碼管輸出num的個(gè)位
}
if(time==250) //500ms進(jìn)入一次
{
num=Inpluse*2; //計(jì)算轉(zhuǎn)速
PID(); //PID調(diào)節(jié)
Inpluse=0;//計(jì)數(shù)清零
time=0;//時(shí)間清零
}
}
void timer_1() interrupt 3
{
TH1=0xfc;
TL1=0x66;
cnt++;
if(ENA==1)
{
PWMOUT();
}
if(ENA==0)
{
PWM_FC=0;
}
}
|
|