资源简介

该程序实现键盘对四相步进电机的控制,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

评论

共有 条评论