基于51单片机脉冲宽度调制(即PWM)直流电机转速快慢以及霍尔测速的项目

基于51单片机脉冲宽度调制(即PWM)直流电机转速快慢以及霍尔测速的项目

一、前言

1、基于51单片机脉冲宽度调制(即PWM)直流电机转速快慢以及霍尔测速的项目包括用Keil软件编写单片机C语言程序和用Proteus软件仿真单片机外围电路

2、基于51单片机脉冲宽度调制(即PWM)直流电机转速快慢以及霍尔测速的项目构思

(1)、实现什么功能:LCD1602字符型液晶显示器先显示时分秒,在点击移位按键后,停止计时,LCD1602字符型液晶显示器光标闪烁,每次按下移位键,LCD1602字符型液晶显示器光标随每次按下移位键移位到时分秒个位十位处闪烁,当LCD1602字符型液晶显示器的时分秒个位十位有闪烁后,可修改LCD1602字符型液晶显示器的时分秒个位十位闪烁位上的数值,再通过移位按键或启停按键启动或停止计时。

(2)、如何实现功能:如何让LCD1602字符型液晶显示器先显示时分秒:采用定时器0工作方式1计时,计时得到的数值赋给LCD1602字符型液晶显示器显示时间两位数分解函数进行分解,分解得到的个位数值与十位数值用变量代替分别由LCD1602字符型液晶显示器写指令函数和LCD1602字符型液晶显示器写数据函数写入LCD1602字符型液晶显示器,通过LCD1602字符型液晶显示器显示出来。如何让LCD1602字符型液晶显示器的时分秒个位十位闪烁:采用按键扫描函数扫描,每次按下移位键(此时定时器0停止计时),执行LCD1602字符型液晶显示器光标闪烁指令和LCD1602字符型液晶显示器光标随每次按下移位键移位到时分秒个位十位处闪烁的位置指令。如何修改LCD1602字符型液晶显示器的时分秒个位十位闪烁位数值并在原计时基础上实现计时:当移位键按下后,定时器0停止计时,计时得到的数值采用两位数分解公式(如:shi=num/10,ge=num%10。)进行分解,分解得到的个位数值与十位数值用变量代替写入按键扫描函数,此时也要采用两位数合成公式(如:miao=shi+ge=(num/10)*10+num%10)求出原先的计时数值,用变量代替原先的计时数值写入按键扫描函数(原因:时分秒的个位或十位显示位的数值是在原计时数值上分解得来,当时分秒的个位或十位显示位的数值发生变化后,原计时数值也要变化,否则启动定时器0计时后,LCD1602字符型液晶显示器显示的是原计时时间,而不是修改时分秒的个位或十位显示位的数值后的计时,因此要采用两位数合成公式(miao=shi+ge=(num/10)*10+num%10)求出原先的计时数值,用变量代替原先的计时数值写入按键扫描函数。)。

二、基于51单片机脉冲宽度调制(即PWM)直流电机转速快慢以及霍尔测速的项目的Keil软件编写的单片机C语言程序

#include<reg52.h>//单片机头文件
#define uchar unsigned char//宏定义,用uchar表示unsigned char,叫无符号字符型数据类型,取值范围为:0到255。
#define uint unsigned int//宏定义,用uint表示unsigned int,叫无符号整数型数据类型,取值范围为:0到65535。 
sbit RS=P2^5;//位定义LCD1602字符型液晶显示器的数据/命令选择引脚                 
sbit RW=P2^6;//位定义LCD1602字符型液晶显示器的读写引脚                        
sbit EN=P2^7;//位定义LCD1602字符型液晶显示器的使能引脚   			  			  	
sbit qitingjian=P1^0;//位定义启停键
sbit zhengzhuanjian=P1^1;//位定义正转键
sbit fanzhuanjian=P1^2;//位定义反转键
sbit jiasujian=P1^3;//位定义加速键
sbit jiansujian=P1^4;//位定义减速键
sbit zhengzhuan=P2^0;//正转端口
sbit fanzhuan=P2^1;//反转端口
sbit zhuansuled=P2^2;//位定义转速指示灯 
sbit qitingled=P3^0;//位定义启停指示灯
sbit zhengzhuangled=P3^1;//位定义正转指示灯
sbit waibuzhongduanling=P3^2;//位定义外部中断0端口
sbit fanzhuangled=P3^3;//位定义反转指示灯
uint qian,bai,shi,ge,zhuansu;//数码管千位变量、百位变量、十位变量、个位变量以及转速变量
uint pwmshi,pwmge;//脉冲宽度调制十位变量、个位变量		  			   
uchar pwm,Timer0count,Timer1count,maichongcount,qitingnum,zhengzhuanflag,fanzhuanflag;//脉冲宽度调制变量、定时器0定时计数变量、定时器1定时计数变量、脉冲计数变量、启停键按下数次变量、正转标志位变量、反转标志位变量
uchar code table0[]={
   'z','h','a','n','k','o','n','g','b','i',':'};//占空比字符串数组
uchar code table1[]={
   'z','h','u','a','n','s','u',':'};//转速字符串数组 
uchar code table2[]={
   'r','p','m'};//每分钟圈字符串数组   
  void Delay(uint z)//延时函数
{
   
   uint x,y;
   for(x=z;x>0;x--)
	for(y=110;y>0;y--);
 }
  void WriteCommand(uchar command)//LCD1602字符型液晶显示器写指令函数
{
   
   RS=0;//LCD1602字符型液晶显示器指令寄存器低电平
   RW=0;//LCD1602字符型液晶显示器写指令操作低电平
   P0=command;//LCD1602字符型液晶显示器写指令函数写指令到单片机P2组端口,再输送到LCD1602字符型液晶显示器指令寄存器中执行。
   Delay(5)
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值