资源简介
该程序实现键盘对四相步进电机的控制,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嵌入版帮助系统
相关资源
- 51单片机多机通信PROTEUS仿真
- 51单片机—4路舵机控制
- 51单片机—计时器程序
- 自己写的51单片机基本程序,适合初学
- C51单片机抢答器程序
- YL-51单片机开发板原理图
- 51单片机点阵模拟电梯
- 基于PMM8713脉冲分配器的步进电机控制
- 51单片机控制GSM发送短信
- Modbus通信协议(内附RTU+51单片机程序
- 用51单片机实现小车循迹和LCD显示
- 基于51单片机和OV7670摄像头的颜色跟踪
- 基于51单片机的4路智能抢答器
- 在51单片机上实现的完整功能的计算器
- 利用51单片机产生可调PWM波
- 51单片机延时算法
- 基于51单片机的智能窗帘系统全套资料
- 51单片机频率精确测量C程序
- 肺活量监测,程序部分,STC89C51单片机
- 肺活量监测,STC89C51单片机和AD0832AD转
- 51单片机的计算器.rar
- 51智能小车避障和循迹程序
- 基于PICPIC18F452的步进电机控制系统
- 4相5线步进电机控制程序
- L297和L298联合驱动步进电机
- 51单片机+12864实现的万年历程序
- 51单片机pwm波,lcd1602,l298n带prtues仿真
- 三相步进电机驱动电路设计
- 51单片机8位数码管动态扫描显示
- 基于51单片机和8279的光电计数器
评论
共有 条评论