附录1
21
附录2
22
附录6
--步进电机:
------------------------------------------------------------------------------------------------ -- 工程名称: 基于STC12C5A60S2单片机的步进电机控制
-- 功能描述: 能实现步进电机的启动,制动,加减速,正反转切换,连续单--
步切换
-- 文件来源: 自主设计 -- 编译环境: KEILL
-- 硬件连接: 22脚 步进脉冲输出端
-- 21脚为步进电机正反转输出端 -- 20、19脚为步进电机励磁控制输出端 -- 6、8、9、39脚为按键检测输入端 -- 42、43脚为按键控制信号输出端 -- 23-26脚为数码管位控制输出端 -- 31-37脚为数码管段码控制输出端 -- 18脚为步进电机待机/工作控制输出端 -- 1、2、40、41脚为指示灯控制输出端
-- OUT1A、 OUT1B、 OUT2A、 OUT2B为步进电机 -- 输出端 -- 日期:2012、05、20
----------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------- --本设计采用双相励磁模式、2CH H 桥驱动
-----------------------------------------------------------------------------------------------------------------
#include
T0MS
sfr AUXR=0x8E; sfr P4=0xc0; sfr P4SW=0xBB;
(65536-FOSC/1000+14) sfr P0M0=0x94;
sfr P0M1=0x93; sfr P1M0=0x92;
23
//1ms计时初始值
sfr P1M1=0x91; sfr P2M0=0x96; sfr P2M1=0x95;
sfr WDT=0xC1; //声明看门狗
sbit led1=P1^6; sbit led2=P1^5; sbit led3=P1^1; sbit led4=P1^0;
sbit speaker=P1^4; sbit ajkongzhi1=P1^3; sbit ajkongzhi2=P1^2;
sbit w1=P4^4; sbit w2=P2^7; sbit w3=P2^6; sbit w4=P2^5;
sbit aj1=P3^3; sbit aj2=P4^2; sbit aj3=P3^2; sbit aj4=P4^3;
sbit ST=P2^0;
//待机与工作切
换
sbit MD1=P2^1;
//励磁模式选择
sbit MD2=P2^2; sbit FR=P2^3;
//正反转选择 sbit STEP=P2^4;
//步进信号
bit power;//电源状态标志, bit ajkongzhi;//按键控制标志位
bit bujin;//单步进标志,为0时连续转动,为1时单步进
unsigned
char
shuzi[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; //常用数字所对应的数值(0-9) 0x00为数码管不亮 unsigned
char
qianwei,baiwei,shiwei,gewei,weizhi;
//显
示数位千、百、十、个、数码管位选 unsigned
char
flag1,flag2,flag3,flag4; //加按键按下标志,减按键按下标志, 单步进按键锁定标志,正反转切换按键锁定标志
unsigned
int
jishi1,jishi2,jishi3,jishi4,jishi5,jishi6,jishi7,jishi8,jishi9,jishi10,jishi11,jishi12; // jishi1-4为按键消抖计时,jishi5为加速按键加速计时,jishi6为减速按键减速计时,jishi7和jishi8为关机按键计时 //jishi9为切换至连续转动模式计时,jishi10为脉冲发生计时,jishi11为蜂鸣器鸣响计时,jishi12为单步进时电机待机计时,
unsigned int zhuansu,bujinshu,jishu;//转速,记录总的步进数,记录单步进时脉冲的翻转次数
void inti()
2
{
TMOD=0x11; //T0工作在WDT=0x38; //喂狗
w2=0; w3=0; w4=0;
模式1-16位计数器 ST=1; TL0=T0MS; TH0=T0MS>>8;
TR0=1;
ET0=1; EA=1; ET1=1; PT1=1;
P4SW=0x70; P0M0=0xff; P0M1=0x00; P1M0=0xff; P1M1=0x00; P2M0=0xff; P2M1=0x00;
AUXR=0X81; 输出 led1=0;
led2=0; led3=0; led4=0;
speaker=0; ajkongzhi1=0; ajkongzhi2=0;
w1=0;
//ALE禁止//
MD1=0; MD2=0; FR=0; STEP=0;
power=0; 待机状态 ajkongzhi=0;
bujin=0; 连续转动 qianwei=0; baiwei=0; shiwei=0; gewei=0; weizhi=1;
flag1=0; flag2=0; flag3=1; flag4=1; jishi1=0; jishi2=0;
jishi3=0; jishi4=0;
jishi5=500;
jishi6=500;
//上电时处于
//开机时默认为
3