基于51单片机直流电机PWM调速液晶1602显示设计

一、系统方案
本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节,从而控制其输入信号波形等均作了详细的阐述。另外,本系统中使用了霍尔元件对直流电机的转速进行测量,经过处理后,将测量值送到液晶显示出来。
基于51单片机直流电机PWM调速液晶1602显示设计_第1张图片
二、硬件设计
原理图如下:
基于51单片机直流电机PWM调速液晶1602显示设计_第2张图片
三、单片机软件设计
1、首先是系统初始化
void init()//初始化
{
en=0;
rw=0;
write_com(0x01); //lcd初始化
write_com(0x38); //5X7显示
write_com(0x0c); //关闭光标
TMOD=0x01; //定时器方式1
TH0=0xdc;
TL0=0x00; //定时器初值
EA=1; //开中断
ET0=1; //定时器0开中断
TR0=1;
EX1=1;
IT1=1; //定时器启动
TH1=0xfc;
TL1=0x66;//定时100us
ET1=1; //定时器1开中断
TR1=1;
write_com(0x80);
write_data(‘V’);
write_data(‘:’);
write_com(0x87); //第一行显示转数
write_data(‘r’);
write_data(‘p’);
write_data(‘m’);
write_com(0xc0);
write_data(‘z’);
write_data(‘h’);
write_data(‘a’);
write_data(‘n’);
write_data(‘k’);
write_data(‘o’);
write_data(‘n’);
write_data(‘g’);
write_data(‘b’);
write_data(‘i’); //第二行显示占空比:
write_data(‘:’);
displaym();
}
2、液晶显示程序

void write_com(uchar com)//1602控制指令
{
rs=0;
P0=com;
delay(5);
en=0;
delay(10);
en=1;
}
void write_data(uchar date)//1602数据指令
{
rs=1;
P0=date;
delay(5);
en=0;
delay(5);
en=1;
}

3、按键检测程序
void keyscan() //键盘扫描函数
{
if(num10)
{
delay(5); //消除抖动
if(num1
0)
{
if(m<=199)
m++;
displaym(); //占空比加一
}
}
if(num20)
{
delay(5);
if(num2
0)
{
if(m>=1)
m–;
displaym(); //占空比技跻?

 }

}
if(num30)
{
delay(5);
if(num3
0)
{
zheng=1; //开始正转
fan=0; // 反转停止

 }

}
if(num40)
{
delay(5);
if(num4
0)
{
zheng=0; //正转停止
fan=1; // 反转开始

 }

}
if(num50)
{
delay(5);
if(num5
0)
{
while(num5==0) ;
kai=1-kai;
}
}
}
4、核心算法程序
void display()
{
write_com(0x82);
zhuansu=zhuansu*30; //每分钟转速

if(zhuansu/10000!=0)
write_data(zhuansu/10000+0x30);
else
write_data(’ ');

if(zhuansu/10000)
write_data(’ ');
else
write_data(zhuansu%10000/1000+0x30);
if(zhuansu/100
0)
write_data(’ ‘);
else
write_data(zhuansu%10000%1000/100+0x30);
if(zhuansu/10==0)
write_data(’ ');
else
write_data(zhuansu%10000%1000%100/10+0x30);

write_data(zhuansu%10000%1000%100%10+0x30);
write_com(0xd0);
}
void displaym()
{
write_com(0xcb);
if(m/200%10!=0)
write_data(m/200%10+0x30);
else
write_data(’ ');

if(m/200%100&&m/20%100)
write_data(’ ');
else
write_data(m/20%10+0x30);
write_data(m/2%10+0x30);
}
四、proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
基于51单片机直流电机PWM调速液晶1602显示设计_第3张图片

你可能感兴趣的:(51单片机,mongodb,嵌入式硬件)