按键实现端口取反功能c语言程序,步进电机调速控制系统设计C语言程序及说明.doc...

步进电机调速控制系统设计

C语言程序及说明

使用元器件:

单片机8051、步进电机17H185H-04A、128细分/3.0A步进电机驱动器、LED显示器。

实现控制功能:

以8051单片机为控制器,系统设四个按键:“工作/停止按键”、“加速按键”、“减速按键”、“正反向控制按键”。系统上电后,按下“正反向控制按键”,控制电机正反转;每按一次“加速按键”后,步进电机由低向高加速一级,每按一次“减速按键”后,由高向低减速一级;按“工作/停止按键”后,电机停止转动,系统回到等待状态。同时需要显示运行状态和转速(以实际转速或等级表示)。

程序清单及说明

#includesbit EN=P2^0; //使能输出

sbit DIR=P2^1; //方向控制

sbit PWM=P2^2;//PWM输出

sbit zled=P2^6;//正转信号灯

sbit fled=P2^7;//反转信号灯

sbit sw1=P0^0;//启停按钮

sbit sw2=P0^1;//正反转按钮

sbit sw3=P0^2;//加速按钮

sbit sw4=P0^3;//减速按钮

unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

unsigned char i,j,k,temp=0,zkb=5,zkb1=0,speed=0;

void delay() //延时10ms

{

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

void InitTimer0(void) //T0定时器初始化

{

TMOD = 0x00; //设置定时器方式0

TH0 = 0xef; //高8位送初值

TL0 = 0xdd; //低8位送初值

EA = 1; //开中断总允许

ET0 = 1; //开T0中断允许

TR0 = 1; //启动T0开始定时

}

void main() //主程序

{

InitTimer0();

EN=1; //初始使能端输出0

DIR=1; //方向端输出1

zled=0; //正传信号灯端口输出0,灯亮

fled=1; //反转信号灯输出1,灯不亮

while(1)

{

P1=table[speed]; //启停

if(sw1==0) //判断启停键按下

{

delay(); //调用延时程序

if(sw1==0) //再判断,启停键按下

{

while(sw1==0); //启停键按下,使能端取反

EN=~EN;

}

}

//正反转子程序

if(sw2==0) //判断换向键是否按下

{

delay();

if(sw2==0)

{

while(sw2==0);

DIR=~DIR; //换向键按下,方向端口取反

fled=~fled; //正传指示灯控制端取反

zled=~zled; //反转传指示灯控制端取反

}

}

//加速子程序

if(sw3==0) //判断加速键是否按下

{

delay();

if(sw3==0)

{

while(sw3==0); //加速键按下

if(speed>=5) //判断转速是否大于5

speed=5; //大于5,保持5级转速

else

speed++; //小于5,加速一级

}

}

//减速子程序

if(sw4==0) //判断减速键是否按下

{

delay();

if(sw4==0)

{

while(sw4==0); //减速键按下

if(speed==1) //转速为1,保持1级转速

speed=1;

else

speed--; //转速不为1,减速1级

}

}

}

}

void Timer0Interrupt(void) interrupt 1

switch(speed) //加减速按键按下,对应选择T0初值,进入终端产生不同频率脉冲

{

case 1:TH0=0XDD;break;

case 2:TH0=0XE1;break;

case 3:TH0=0XE5;break;

case 4:TH0=0XEa;break;

case 5:TH0=0xf0;break;

}

TL0 = 0xdd;

if(zkb1>=10)

zkb1=0;

zkb1++;

if(zkb1<=5)

PWM=1;

else

PWM=0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值