資源簡介
該程序實現鍵盤對四相步進電機的控制,12864顯示,利用ST188傳感器測量步進電機轉速。

代碼片段和文件信息
#include
#include“12864.h“
#include“KeyScan.h“
//-----------------------------------------
#define?Max_Frequency?135 ??//?最大轉速
#define?Step??????????0.5 ??//?步進轉速
#define?Pulses_Per_R??1
#define?SYSCLK????????1000000
#define?START_TMR2??T2CON? |=?0x04
#define?STOP_TMR2???T2CON? &=~?0x04
#define?SINGLEFOUR ??0
#define?DOUBLEFOUR????2
#define?SDEIGHT???????4
//-----------------------------------------
sfr16? RCAP2????=?0xca;????//==定時器2捕捉/重載寄存器???
sfr16? TMR2?????=?0xcc;????//==定時器2寄存器??
unsigned?char??TH0regTL0regT0FullTH0LastTL0Last;
bit?OverFlow=0;
float?fFrequency=50fFrequencyBack=0.0;
unsigned?char?Mode=SINGLEFOUR;
unsigned?char?code?SingleFour[8]={0x1e0x2e0x4e0x8e0x1e0x2e0x4e0x8e}; //?A-B-C-D ???A-B-C-D
unsigned?char?code?DoubleFour[8]={0x3e0x6e0xce0x9e0x3e0x6e0xce0x9e}; ? //?AB-BC-CD-DA? AB-BC-CD-DA?
unsigned?char?code?SDEight[8]???={0x1e0x3e0x2e0x6e0x4e0xce0x8e0x9e}; //?A-AB-B-BC-C-CD-D-DA
unsigned?char?code?rSingleFour[8]={0x8e0x4e0x2e0x1e0x8e0x4e0x2e0x1e};
unsigned?char?code?rDoubleFour[8]={0x9e0xce0x6e0x3e0x9e0xce0x6e0x3e};
unsigned?char?code?rSDEight[8]???={0x9e0x8e0xce0x4e0x6e0x2e0x3e0x1e};
unsigned?char?code*?code?Pointers[]={SingleFourrSingleFourDoubleFourrDoubleFourSDEightrSDEight};
unsigned?char?index=0;
unsigned?char?code*?pData=SingleFour;
unsigned?char?code*?Modes[]={“????單四拍????“
?“??反轉單四拍??“
?“????雙四拍????“
?“??反轉雙四拍??“
?“????單雙八拍??“
?“??反轉單雙八拍“};
unsigned?int??T2_Capture_lastT2_Capture_new??;
bit?T2_flag=0;
unsigned?int?T2_Full=0;
//-----------------------------------------
void?Init_Device();
void?Set_Stepper();
bit??KeyScan_Act();
void?Measure();
//-----------------------------------------
void?main(void){
//?變量
unsigned?int?i=0;
//?初始化
Init_Device();
while(1){
//?設置電機
Set_Stepper();
//?等待鍵盤
while(!KeyScan_Act()){
if(?fFrequency>=20?&&?ET0??&&?(i++)%1000==0?)
Measure();
}
}
}
//-----------------------------------------
void?Init_Device(){
InitLCD();
//?初始化定時器和中斷
T2CON=0x0D; //?外部使能,捕獲方式
ET2=1;
EA=1;
TMOD=0x01;
ET0=1;
//?顯示界面
LCD_Printn_Ch(“步進電機“114);
LCD_Printn_Ch(“模式0?“163);
LCD_Printn_Ch(“轉速:?“313);
LCD_Printn_En(“?R/M“374);
LCD_Printn_Float(fFrequency3416);
LCD_Printn_Ch(Modes[Mode]217);
LCD_Printn_Ch(“測量:?“413);
LCD_Printn_En(“?R/M“474);
LCD_Printn_Float(fFrequencyBack4426);
}
//-----------------------------------------
void?Set_Stepper(){
unsigned?char?Num=0;
unsigned?long?Count=0;
if?(Mode<4)
Num=4;
else
Num=8;
TR0=0;
Count=SYSCLK*60/fFrequency/Num/12;
if(Count<=65536){
OverFlow=0;
Count=Count-20; //補償
TH0=TH0reg=(65536-Count)/256;
TL0=TL0reg=65536-Count;
}
else{
OverFlow=1;
T0Full=Count/65536;
Count=Count-16*T0Full-35; ?//補償
TH0Last=(65536-Count%65536)/256;
TL0Last=65536-Count%65536;
TH0=TH0reg
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2221??2011-07-13?15:15??12864.h
?????文件???????25127??2011-07-14?14:01??BuJin
?????文件???????15444??2011-07-14?14:01??BuJin.hex
?????文件??????????57??2011-07-14?14:01??BuJin.lnp
?????文件???????30949??2011-07-14?14:01??BuJin.M51
?????文件????????1950??2011-07-14?14:38??BuJin.plg
?????文件???????59085??2011-07-14?14:38??BuJin.uvopt
?????文件???????13392??2011-07-12?19:46??BuJin.uvproj
?????文件???????59091??2011-07-14?12:18??BuJin_uvopt.bak
?????文件???????13393??2011-07-11?17:43??BuJin_uvproj.bak
?????文件????????1034??2011-07-13?20:17??KeyScan.h
?????文件????????5708??2011-07-14?14:01??main.c
?????文件???????12786??2011-07-14?14:01??main.LST
?????文件???????27425??2011-07-14?14:01??main.OBJ
?????文件????????6376??2009-05-07?14:37??STARTUP.A51
?????文件???????14062??2011-07-14?14:01??STARTUP.LST
?????文件?????????749??2011-07-14?14:01??STARTUP.OBJ
- 上一篇:O型圈密封槽設計計算工具
- 下一篇:MCGS嵌入版幫助系統
評論
共有 條評論