标题:
直流电机调速仿真与单片机源码
[打印本页]
作者:
SkyCheunghut
时间:
2018-6-6 13:49
标题:
直流电机调速仿真与单片机源码
直流电机调速仿真文件和程序在文件夹
0.png
(19.25 KB, 下载次数: 37)
下载附件
2018-6-7 02:33 上传
0.png
(49.73 KB, 下载次数: 30)
下载附件
2018-6-7 02:33 上传
单片机源程序如下:
//**********cx.c************************************************
#include <REG51.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define Led_wx P2
#define Led_dx P0
//**********定义变量********************************************
uchar pwm=20; //定义pwm周期数
uchar pwmH=1; //定义高电平脉冲个数计数器
uchar counter=0; //定义脉冲个数计数器
uchar Ledplay[6]; //
uchar bn=0; //
uchar M=1; //
bit SW=0; //
bit LR=0; //
//**********定义端口********************************************
sbit KSW=P1^0; //定义启停控制引脚
sbit KLR=P1^1; //定义左、右转控制引脚
sbit KSPU=P1^2; //定义加速控制引脚
sbit KSPD=P1^3; //定义减速控制引脚
sbit M1=P3^0; //定义电机驱动控制引脚
sbit M2=P3^1; //定义电机驱动控制引脚
sbit M3=P3^7;
//**********定义函数********************************************
uchar code no[]= //-----------数码代码
{
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f, //9
0x38, //L 10
0x77, //R 11
0x40 //- 12
};
uchar code wex[]= //-----------显示位码
{
0xfe, //选中第一位
0xfd, //选中第二位
0xfb, //选中第三位
0xf7, //选中第四位
0xef, //选中第五位
0xdf //选中第六位
};
//****************************************************************
void Delay(unsigned int i) //延时单次6us
{
while(i--);
}
void DelayM(unsigned int t) //延时单次1ms
{
unsigned char i;
while(--t!=0)
{
for(i=0;i<120;i++);
}
}
//*****************************************************************
void putin (int u) //字符载入函数-将字符装入显示寄存器
{
Ledplay[bn]=no[u];
bn++; //换下一个显示缓冲环节
}
//*****************************************************************
void clearRAM (void) //寄存器清空函数-6个寄存器清空(0x00)
{
uchar a; //定义变量用于清空数据指针
for(a=0;a<6;a++) //指向2个寄存器
{
Ledplay[a]=0; //将指向的寄存器清空
}
}
void ledxs(void) //数码管显示子程序
{
uchar i;
uchar Date=0;
uchar wx=0;
for(i=0;i<6;i++) //扫描数码管1~6位
{
Date=wex[i];
Date=Date & 0x3f; //取低6位数据
wx=Led_wx & 0xc0 | Date; //屏蔽高2位端口
Led_wx=wx; //送数据
Led_dx=Ledplay[i];
DelayM(2);
}
}
void Time0_int(void) //定时器T0初始化
{
TMOD=0X02;
TH0=56;
TL0=56;
ET0=1;
EA=1;
TR0=1;
}
void Time0() interrupt 1 using 1 //定时服务程序
{
M3=1;
counter++;
if (counter>=pwmH)
{
M=0;
}
if (counter==pwm)
{
counter=0;
M=1;
}
}
//**********主函数*******************************************
main()
{
Time0_int();
while(1)
{
//**********按键处理*****************************************
if(KSW==0) //检测开始、停止
{
DelayM(20); //延时去抖
if(KSW==0)
{
SW=~SW;
}
while(KSW==0); //等待键释放
}
if(KLR==0) //检测左转、右转
{
DelayM(20); //延时去抖
if(KLR==0)
{
LR=~LR;
}
while(KLR==0); //等待键释放
}
if(KSPU==0) //检测加速
{
DelayM(20); //延时去抖
if(KSPU==0)
{
pwmH++;
if(pwmH==pwm)
{
pwmH=pwm-1;
}
}
while(KSPU==0);
}
if(KSPD==0) //检测减速
{
DelayM(20); //延时去抖
if(KSPD==0)
{
pwmH--;
if(pwmH==0)
{
pwmH=1;
}
}
while(KSPD==0);
}
//****************************************************************
if(SW==0)
{
M1=0;
M2=0;
bn=0;
clearRAM();
}
if(SW==1)
{
bn=0;
clearRAM();
putin(pwm%10); //显示PWM个位
putin(pwm/10); //显示PWM十位
putin(12); //显示-
putin(pwmH%10); //显示PWMH个位
putin(pwmH/10); //显示PWMH十位
if(LR==0)
{
M1=0;
M2=M;
putin(11); //显示左转L
}
if(LR==1)
{
M1=M;
M2=0;
putin(10); //显示右转R
}
}
ledxs(); //数码管显示
}
}
复制代码
所有资料51hei提供下载:
直流电机调速.rar
(52.38 KB, 下载次数: 69)
2018-6-6 13:49 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1