直流電機測速并顯示_第1頁
直流電機測速并顯示_第2頁
直流電機測速并顯示_第3頁
直流電機測速并顯示_第4頁
直流電機測速并顯示_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.可實現功能:1 可控制左右旋轉2 可控制停止轉動3 有測速功能,即時顯示在液晶上4 有速度檔位選擇,分五個檔次,但不能精確控速5 檔位顯示在液晶上用到的知識:1 用外部中斷檢測電機送來的下降沿,在一定時間里統計脈沖個數,進行算出轉速。2 通過改變占空比可改變電機速度,占空比的改變可以通過改變定時器的重裝初值來實現。3 要想精確控制速度,還需要用自動控制理論里的PID 算法,但參數難以選定,故在此設計中沒有涉及!#include<reg52.h>#define uchar unsigned char#define uintunsigned intsbit PW1=P10 ;sbit

2、 PW2=P11;/控制電機的兩個輸入sbit accelerate=P02 ; /調速按鍵sbit stop=P03;/停止按鍵sbit left=P04 ;/左轉按鍵sbit right=P05 ;/ 右轉按鍵'.sbit detect=P32;/檢測脈沖sbit lcdrs=P00;sbit lcden=P01;#define Da P2uint temp;/保存檢測到的電平數據以便比較uint count; /用于計數uint aa,bb;/用于計數uint speed;/用來計算轉速uint a=25000;uint t0=25000,t1=25000;/初始時占空比為 50

3、%uchar flag=1;/此標志用于選擇不同的裝載初值uchar dflag;/左右轉標志uchar sflag=1;/用來標志速度檔位#define right_turn PW1=0;PW2=1/ 順時針轉動#define left_turnPW1=1;PW2=0/ 逆向轉動#define end_turnPW1=1;PW2=1/ 停轉void keyscan();/鍵盤掃描void delay(uchar z);void time_init();/定時器的初始化void write_com(uchar com);/液晶寫指令void write_data(uchar date); /液

4、晶寫數據void lcd_init();/液晶初始化void display(uint rate);/顯赫速度void int0_init();/定時器 0 初始化void keyscan();/鍵盤掃描程序void judge_derection();void main()time_init();/定時器的初始化lcd_init();/液晶初始化int0_init();/定時器 0 初始化while(1)void time_init()'.TMOD=0x11;/兩個定時器都設定為工作方式1十六位定時計數器EA=1;/ 開啟總中斷TH0=(65536-50000)/256;TL0=(6

5、5536-50000)%256;ET0=1;TR0=1;TH1=(65536-a)/256;TL1=(65536-a)%256;ET1=1;TR1=0;void int0_init()EX0=1;/外部中斷源可以申請中斷IT0=1;/外部中斷源下降沿觸發void timer0()interrupt 1 using 0TH0=(65536-50000)/256;TL0=(65536-50000)%256;/ 裝載初值keyscan();/ 鍵盤掃描程序aa+;if(aa=5)aa=0;temp=count*0.5*60*2*2*100/24; /計算轉速,每分轉多少圈count=0;/重新開始計

6、數脈沖數display(temp);/把計算得的結果顯示出來void timer1()interrupt 3 using 0if(flag)'.flag=0;end_turn;a=t0;/t0的大小決定著低電平延續時間TH1=(65536-a)/256;TL1=(65536-a)%256;/ 重裝載初值elseflag=1;/這個標志起到交替輸出高低電平的作用if(dflag=0)right_turn;/右轉elseleft_turn;/左轉a=t1;/t1的大小決定著高電平延續時間TH1=(65536-a)/256;TL1=(65536-a)%256;/ 重裝載初值/*外部中斷 */

7、void service_int0()interrupt0count+;/來一個下降沿沿就計一個脈沖數/*顯示函數 */void display(uint rate)uchar wan,qian, bai,shi,ge;wan=rate/10000;qian=rate/1000%10;bai=rate/100%10;shi=rate/10%10;'.ge=rate%10;write_com(0x80);write_data('0'+wan);write_data('0'+qian);write_data('0'+bai);write_da

8、ta('.');write_data('0'+shi);write_data('0'+ge);/*延時函數 */void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-) ;/*寫指令 */void write_com(uchar com)lcdrs=0;Da=com;delay(1);lcden=1;delay(1);lcden=0;/*寫數據 */void write_data(uchar date)lcdrs=1;Da=date;delay(1);lcden=1;del

9、ay(1);lcden=0;/*液晶初始化 */'.void lcd_init()lcden=0;write_com(0x38) ; /初始化write_com(0x0c) ;/ 打開光標0x0c不顯示光標0x0e光標不閃, 0x0f 光標閃write_com(0x01) ;/清顯示write_com(0x80+0x40);write_data('0');write_data(' ');write_data('G');write_data('e');write_data('a');write_data(&#

10、39;r');/*鍵盤掃描程序*/void keyscan()if(stop=0)TR1=0;/關閉定時器0即可停止轉動end_turn;/停止供電write_com(0x80+0x40);write_data('0');if(left=0)TR1=1;dflag=1;/ 轉向標志置位則左轉write_com(0x80+0x40);write_data('0'+sflag);if(right=0)TR1=1;dflag=0;/ 轉向標志復位則右轉write_com(0x80+0x40);write_data('0'+sflag);if(a

11、ccelerate=0)'.delay(10) ;/ 延時消抖if(accelerate=0)while(accelerate=0) ;/等待松手sflag+;if(sflag=2)t0=20000;t1=30000;/ 占空比為百分之60write_com(0x80+0x40);write_data('2');if(sflag=3)t0=15000;t1=35000;/ 占空比為百分之70write_com(0x80+0x40);write_data('3');if(sflag=4)t0=10000;t1=40000;/ 占空比為百分之80write_com(0x80+0x40);write_data('4');if(sfl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論