直流電機調(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ù)碼管顯示
- }
- }
復制代碼
所有資料51hei提供下載:
直流電機調(diào)速.rar
(52.38 KB, 下載次數(shù): 69)
2018-6-6 13:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|