標題:
直流電機調(diào)速仿真與單片機源碼
[打印本頁]
作者:
SkyCheunghut
時間:
2018-6-6 13:49
標題:
直流電機調(diào)速仿真與單片機源碼
直流電機調(diào)速仿真文件和程序在文件夾
0.png
(19.25 KB, 下載次數(shù): 37)
下載附件
2018-6-7 02:33 上傳
0.png
(49.73 KB, 下載次數(shù): 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周期數(shù)
uchar pwmH=1; //定義高電平脈沖個數(shù)計數(shù)器
uchar counter=0; //定義脈沖個數(shù)計數(shù)器
uchar Ledplay[6]; //
uchar bn=0; //
uchar M=1; //
bit SW=0; //
bit LR=0; //
//**********定義端口********************************************
sbit KSW=P1^0; //定義啟?刂埔_
sbit KLR=P1^1; //定義左、右轉(zhuǎn)控制引腳
sbit KSPU=P1^2; //定義加速控制引腳
sbit KSPD=P1^3; //定義減速控制引腳
sbit M1=P3^0; //定義電機驅(qū)動控制引腳
sbit M2=P3^1; //定義電機驅(qū)動控制引腳
sbit M3=P3^7;
//**********定義函數(shù)********************************************
uchar code no[]= //-----------數(shù)碼代碼
{
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) //字符載入函數(shù)-將字符裝入顯示寄存器
{
Ledplay[bn]=no[u];
bn++; //換下一個顯示緩沖環(huán)節(jié)
}
//*****************************************************************
void clearRAM (void) //寄存器清空函數(shù)-6個寄存器清空(0x00)
{
uchar a; //定義變量用于清空數(shù)據(jù)指針
for(a=0;a<6;a++) //指向2個寄存器
{
Ledplay[a]=0; //將指向的寄存器清空
}
}
void ledxs(void) //數(shù)碼管顯示子程序
{
uchar i;
uchar Date=0;
uchar wx=0;
for(i=0;i<6;i++) //掃描數(shù)碼管1~6位
{
Date=wex[i];
Date=Date & 0x3f; //取低6位數(shù)據(jù)
wx=Led_wx & 0xc0 | Date; //屏蔽高2位端口
Led_wx=wx; //送數(shù)據(jù)
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 //定時服務(wù)程序
{
M3=1;
counter++;
if (counter>=pwmH)
{
M=0;
}
if (counter==pwm)
{
counter=0;
M=1;
}
}
//**********主函數(shù)*******************************************
main()
{
Time0_int();
while(1)
{
//**********按鍵處理*****************************************
if(KSW==0) //檢測開始、停止
{
DelayM(20); //延時去抖
if(KSW==0)
{
SW=~SW;
}
while(KSW==0); //等待鍵釋放
}
if(KLR==0) //檢測左轉(zhuǎn)、右轉(zhuǎn)
{
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); //顯示左轉(zhuǎn)L
}
if(LR==1)
{
M1=M;
M2=0;
putin(10); //顯示右轉(zhuǎn)R
}
}
ledxs(); //數(shù)碼管顯示
}
}
復(fù)制代碼
所有資料51hei提供下載:
直流電機調(diào)速.rar
(52.38 KB, 下載次數(shù): 69)
2018-6-6 13:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1