标题:
单片机编码电机测速程序-PROTEUS仿真+KEIL5工程
[打印本页]
作者:
Briana
时间:
2020-10-2 19:21
标题:
单片机编码电机测速程序-PROTEUS仿真+KEIL5工程
仿真.PNG
(103.16 KB, 下载次数: 36)
下载附件
2020-10-2 19:17 上传
单片机源程序如下:
#include "reg52.h"//此文件中定义了单片机的一些特殊功能寄存器
#include <intrins.h>
/***********数据类型声明***********/
typedef unsigned int u16;//对数据类型进行声明定义
typedef unsigned char u8;
/***********IO口相关定义***********/
sbit RS = P2^7;
sbit RW = P2^6;
sbit E = P2^5;
sbit CH_B = P3^3;
sbit PWM = P2^0;
/**********变量定义*************/
u8 flag = 1; //正反转标志位
u8 count = 0; //定时器溢出次数计数
unsigned char count1 = 0; //定时器溢出次数计数 0~255
u16 Pulse_A = 0; //脉冲数计数
float Speed_A = 0;//转数 r/min
void Timer0Init();//定时器0初始化
void Timer1Init();//定时器1初始化
void Int0Init(); //外部中断0初始化
void lcd_int(); //LCD初始化函数
void lcd_w_cmd(unsigned char com); //写命令字函数
void lcd_w_dat(unsigned char dat); //写数据函数
unsigned char lcd_r_start(); //读状态函数
void Delayus(unsigned int t); //延时函数
/*******************主函数*****************************************************/
void main()
{
u8 i = '0';
u16 pulse_a = 0;
u8 arr[5]={0};
lcd_int(); //LCD初始化
Timer0Init(); //定时器0初始化
Timer1Init();//定时器1初始化
Int0Init(); //外部中断0初始化
while(1)
{
lcd_w_cmd(0x80 + 0x00); //设置LCD显示位置,第1行
if( flag == 0) //正反转判断
{
lcd_w_dat('Z'); //正转
}
else
{
lcd_w_dat('F'); //反转
}
if( count >= 20) //20*50ms = 1s 计算转速
{
count = 0; //清0
pulse_a = Pulse_A;
Pulse_A = 0; //清0
Speed_A = pulse_a * 60.0 / 24 ; //计算转数 r/min
arr[0] = (u8)Speed_A/100 + '0'; //百位
arr[1] = (u8)Speed_A/10%10 + '0';//十位
arr[2] = (u8)Speed_A%10 + '0'; //个位
arr[3] = '.'; //小数点
arr[4] = (u8)(Speed_A*10)%10 + '0'; //十分位
lcd_w_cmd(0x80+0x40); //第二行显示位置
for(i=0;i<5;i++)
{
lcd_w_dat(arr[i]); //打印转数[/i][i]
}
}
if( count1 >= 100 ) //周期100*1ms = 100ms
{
count1 = 0 ;
}
if( count1 <= 80 ) //占空比
{
PWM = 1; //高电平 40ms
}
else
{
PWM = 0 ; //低电平 100-50 = 50ms
}
}
}
/*********外部中断0初始化**********************************/
void Int0Init() //设置INT0
{
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//INT0的中断允许
EA=1;//打开总中断
}
/*外部中断0的中断函数*/
void Int0() interrupt 0
{
Pulse_A++; //脉冲数++
if(CH_B == 1)
{
flag = 0;//正转
}
else
{
flag = 1;//反转
}
}
复制代码
全部资料51hei下载地址:
编码电机测速.rar
(70.66 KB, 下载次数: 117)
2020-10-2 19:20 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
Briana
时间:
2020-10-2 19:22
LCD显示字母‘z’表示电机正转
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1