标题:
基于单片机的直流电机调速程序 带按钮
[打印本页]
作者:
protues学习ing
时间:
2017-7-6 15:29
标题:
基于单片机的直流电机调速程序 带按钮
这是一个直流电机调速的程序,大家可以学习
单片机源程序如下:
/********************************************************************
* 名称 : 电机调速.c
* 功能 : 通过P1.0口来控制直流电机的旋转的快慢
在数码管的最后一位显示档位,按S19按键,会调一个档位,并且直流电机的转速会发生变化。
/***********************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY1 = P3^2; //定义调速的按键
sbit PWM = P1^0; //定义直流电机的控制端口
uchar CYCLE; //定义周期
uchar PWM_ON ; //定义低电平时间
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void Time0(void)
{
TMOD |=0x01; //定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256; //定时1mS
IE= 0x82; //打开中断
TR0=1; //定时器打开
}
main()
{
uchar PWM_Num; //定义档位
Time0();
CYCLE = 10; //时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步
PWM = 0;
while(1)
{
if(!KEY1)
{
Delay(15);
if(!KEY1)
{
PWM_Num++; //按一下P3.2口,就给直流电机换一个档位
if(PWM_Num==4)
{
PWM_Num=0;
}
switch(PWM_Num)
{
case 0:P0=0x06; PWM_ON=0;break; //低电平时长 //给P0口赋值,是让P0口显示:1,2,3,4 这四个档位
case 1:P0=0x5B; PWM_ON=1;break;
case 2:P0=0x4F; PWM_ON=2;break;
case 3:P0=0x66; PWM_ON=3;break;
default:break;
}
Delay(500);
}
}
}
}
/********************************/
/* 定时中断 */
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if(count==PWM_ON)
{
PWM = 1; //直流电机转
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
【实验76】直流电机调速.zip
(13.04 KB, 下载次数: 75)
2017-7-6 15:28 上传
点击文件名下载附件
程序
下载积分: 黑币 -5
作者:
13563601531
时间:
2017-7-12 21:38
好想下载啊
作者:
xymiss
时间:
2017-7-21 00:34
多回复 。多看分享文,谢谢楼主分享
作者:
ztj123321
时间:
2020-12-8 11:12
。。。。。。多谢老铁
作者:
此人已归西
时间:
2020-12-17 13:52
谢谢老哥分析
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1