51单片机+L293D控制直流电机起保停+数码管PWM调速显示

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机+L293D控制直流电机起保停+数码管PWM调速显示相关的知识,希望对你有一定的参考价值。

51单片机+L293D控制直流电机起保停+数码管PWM调速显示
  • PWM速度10级可调

  • 采用L293D驱动

  • 数码管显示PWM当前占空比

  • 可优化的地方是数码管可以采用其他驱动芯片来驱动,提高驱动能力和减少单片机的IO口占用,例如74LS138译码器来驱动,前面几篇文章有写到采用数码管驱动芯片来做示例的可以参照。

  • 仿真演示
    在这里插入图片描述

  • 程序代码

#include <STC89C5xRC.H>
typedef unsigned char u8;
typedef unsigned int u16;
#define EN1 P22
#define D1 P20
#define D2 P21
#define button_Z P10
#define buttun_R P11
#define button_T P12
#define PWM_add P13
//#define PWM_sub P14
u8 flag=0;
u8 flag1=0;
static u8 b =5;
u8 code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

void init();
void zhengzhuan();
void fanzhuang();
void ting();
void buttonscan();
void delayms(u8 rms);
void display(u16 num);

void main (){

	init();
	EA=1;
	while(1)
	{
		 buttonscan();	
			
	}
}

void zhengzhuan(){
	//EN1=1;
	ET0=1;
	D1=1;
	D2=0;
}
void fanzhuang(){
	//EN1=1;
	ET0=1;
	D1=0;
	D2=1;
}
void ting(){
//	EN1=0;
	ET0=0;
	D1=1;
	D2=1;
}
void buttonscan(){
	if(button_T==0){
		ting();	
	}
	if(button_Z==0){
		zhengzhuan();
	}
	if(buttun_R==0){
		fanzhuang();
	}	
		if(PWM_add==0&&flag==0){
			flag=1;
		}
		if(PWM_add==1&&flag==1)
		{
			b++;
			if(b>10)b=0;
		flag=0;
		}
	display(b);		

}
void init()
{  	
	TMOD=0X01;
	TH0 = (65536-1000)/256;
	TL0 = (65536-1000)%256;
	TR0 =1;
	ET0=1;
	EA=1;
	ET0=1;
}
void time0 ()interrupt 1
{//中断处理函数
	static u16 a;
	TH0 = (65536-1000)/256;
	TL0 = (65536-1000)%256;
a++;
if(a>9) //1khz 
a=0;
if(a<b) //占空比可改 
EN1=1; 
else EN1=0;
 
}
void display(u16 num)
{
P27=0;
P0=table[(num/1000)];
delayms(2);
P0=0X00;//消隐
P27=1;

P26=0;
P0=table[(num/1000)];
delayms(2);
P0=0X00;
P26=1;

P25=0;
P0=table[(num/10)];
delayms(2);
P0=0X00;
P25=1;

P24=0;
P0=table[(num%10)];
delayms(2);
P0=0X00;

P24=1;
 }

void delayms(u8 rms)
{
	u8 i,j;
	for(i=0;i<rms;i++)
		for(j=0;j<110;j++);
}

以上是关于51单片机+L293D控制直流电机起保停+数码管PWM调速显示的主要内容,如果未能解决你的问题,请参考以下文章

51单片机+L293D控制直流电机起保停正反转

blinker控制步进电机起保停,正反转,加减速(Arduino uno+esp8266+TB6600驱动器)

外部按键中断精准控制步进电机起保停,正反转,加减速Arduino+TB6600驱动器)

VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制

VSM Studio uln2003驱动步进电机+单按键启保停正反转四拍控制

基于51单片机PID算法控制直流电机转速且数码管显示实际转速与设定速度的项目工程