標(biāo)題:
基于proteus的直流電機(jī)仿真 帶單片機(jī)源代碼
[打印本頁(yè)]
作者:
小輝0608
時(shí)間:
2017-4-15 21:59
標(biāo)題:
基于proteus的直流電機(jī)仿真 帶單片機(jī)源代碼
基于proteus的直流電機(jī)仿真
0.png
(38.86 KB, 下載次數(shù): 62)
下載附件
2017-4-16 03:00 上傳
單片機(jī)源代碼:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit open = P2^0; //啟動(dòng)電機(jī)按鍵
sbit close = P2^1; //關(guān)閉電機(jī)按鍵
sbit swap = P2^2; //正反轉(zhuǎn)按鍵
sbit sub_speed = P2^3; //減速按鍵
sbit add_speed = P2^4; //加速按鍵
sbit PWM1 = P3^0;
sbit PWM2 = P3^1;
/*液晶顯示*/
sbit E=P3^7;
sbit RW = P3^6;
sbit RS = P3^5;
sbit test = P3^4;
int time = 0;
int high = 20;
int period = 30;
int change = 0;
int flag = 0;
int num_medium = 0;
int num_display = 0;
int count_speed = 0;
uchar wword[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
/*延時(shí)t毫秒*/
void delay(uchar t)
{
uint i;
while(t)
{
/*對(duì)于11.0592MHz時(shí)鐘,延時(shí)1ms*/
for(i=0;i<125;i++);
t--;
}
}
//寫(xiě)命令函數(shù)LCD
void wc51r(uchar j)
{
//fbusy();
RS=0;
RW=0;
P1=j;
E=1;
E=0;
delay(3);
}
//寫(xiě)數(shù)據(jù)函數(shù)LCD
void wc51ddr(uchar j)
{
RS=1;
RW=0;
P1=j;
E=1;
E=0;
delay(2);
}
//初始化函數(shù)LCD
void init()
{
wc51r(0x01); //清屏
wc51r(0x38); //使用8位數(shù)據(jù),顯示兩行,使用5*7的字型
wc51r(0x0c); //顯示器件,光標(biāo)開(kāi),字符不閃爍
wc51r(0x06); //字符不動(dòng),光標(biāo)自動(dòng)右移一格
}
/***********T0中斷服務(wù)程序************PWM波的生成**********/
void time0_int(void) interrupt 1
{
time++;
TH0 = 0xec;
TL0 = 0x78; //60536
if(change == 0) //正轉(zhuǎn)
{
PWM2 = 1;
if(time == high) //high初始值20
PWM1=0;
else if(time == period) // period初始值30
{
PWM1 = 1;
time = 0;
}
}
else //反轉(zhuǎn)
{ PWM1 = 1;
if(time == high)
PWM2=0;
else if(time == period)
{
PWM2 = 1;
time = 0;
}
}
}
/*************************************************************/
/****T1中斷服務(wù)程序********單位時(shí)間(S)方波的個(gè)數(shù)*************/
void time1_int(void) interrupt 3
{
count_speed++; //count_speed初始為0
if(count_speed == 20)
{ count_speed = 0;
num_display = num_medium;
num_medium = 0;
}
}
/*************************************************************/
/************************速度顯示的數(shù)據(jù)處理********************/
void datamade()
{ uint data MM,NN;
wc51r(0xc2);
wc51ddr('S');
wc51ddr('p');
wc51ddr('e');
wc51ddr('e');
wc51ddr('d');
wc51ddr(0x3a);
NN = num_display%100;
MM = num_display/100;
wc51ddr(wword[MM]);
MM = NN/10;
NN = NN%10;
wc51ddr(wword[MM]);
wc51ddr(wword[NN]);
}
/*****************************************************************/
/**********通過(guò)按鍵實(shí)現(xiàn)對(duì)電機(jī)開(kāi)關(guān)、調(diào)速、轉(zhuǎn)向的控制***************/
void motor_control()
{
if(open == 1)
EA = 1;
if(close == 1)
EA = 0;
if(swap == 1)
{
change = ~change;
while(swap != 0)
{}
}
if(sub_speed == 1)
{
high++;
if(high == 30)
EA=0;
while(sub_speed != 0)
{}
}
if(add_speed == 1)
{
high--;
if(high == 5)
high = 5;
while(add_speed != 0)
{}
}
}
/******************************************************************/
/***************************主函數(shù)*********************************/
void main()
{
P2 = 0x00;
ET0 = 1;
ET1 = 1;
TMOD = 0x11;
TH0 = 0xec;
TL0 = 0x78;
TH1 = 0x3c;
TL1 = 0xb0; //15536
TR0 = 1;
TR1 = 1;
init(); //液晶顯示初始化程序
while(1)
{
wc51r(0x84);
wc51ddr('H');
wc51ddr('e');
wc51ddr('l');
wc51ddr('l');
wc51ddr('o');
if(test == 0)
num_medium++;
datamade();
motor_control();
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png
(54.25 KB, 下載次數(shù): 47)
下載附件
2017-4-16 03:00 上傳
下載:
電機(jī).zip
(75 KB, 下載次數(shù): 161)
2017-4-15 21:57 上傳
點(diǎn)擊文件名下載附件
直流電機(jī)仿真
下載積分: 黑幣 -5
作者:
fefen0
時(shí)間:
2017-4-15 22:32
感謝您的分享。
作者:
Mos.杏子
時(shí)間:
2018-12-19 15:28
謝謝~樓主的資料很急用
作者:
ghbwxt
時(shí)間:
2019-3-25 09:35
收獲良多,謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1