這是一個直流電機調速的程序,大家可以學習
單片機源程序如下:
- /********************************************************************
- * 名稱 : 電機調速.c
- * 功能 : 通過P1.0口來控制直流電機的旋轉的快慢
- 在數碼管的最后一位顯示檔位,按S19按鍵,會調一個檔位,并且直流電機的轉速會發生變化。
- /***********************************************************************/
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit KEY1 = P3^2; //定義調速的按鍵
- sbit PWM = P1^0; //定義直流電機的控制端口
- uchar CYCLE; //定義周期
- uchar PWM_ON ; //定義低電平時間
- /********************************************************************
- * 名稱 : Delay_1ms()
- * 功能 : 延時子程序,延時時間為 1ms * x
- * 輸入 : x (延時一毫秒的個數)
- * 輸出 : 無
- ***********************************************************************/
- void Delay(uint i)
- {
- uint x,j;
- for(j=0;j<i;j++)
- for(x=0;x<=148;x++);
- }
- void Time0(void)
- {
- TMOD |=0x01; //定時器設置 1ms in 12M crystal
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256; //定時1mS
- IE= 0x82; //打開中斷
- TR0=1; //定時器打開
- }
- main()
- {
- uchar PWM_Num; //定義檔位
- Time0();
- CYCLE = 10; //時間可以調整 這個是10步調整 周期10ms 8位PWM就是256步
- PWM = 0;
- while(1)
- {
- if(!KEY1)
- {
- Delay(15);
- if(!KEY1)
- {
- PWM_Num++; //按一下P3.2口,就給直流電機換一個檔位
- if(PWM_Num==4)
- {
- PWM_Num=0;
- }
- switch(PWM_Num)
- {
- case 0:P0=0x06; PWM_ON=0;break; //低電平時長 //給P0口賦值,是讓P0口顯示:1,2,3,4 這四個檔位
- case 1:P0=0x5B; PWM_ON=1;break;
- case 2:P0=0x4F; PWM_ON=2;break;
- case 3:P0=0x66; PWM_ON=3;break;
- default:break;
- }
- Delay(500);
- }
- }
- }
- }
- /********************************/
- /* 定時中斷 */
- /********************************/
- void tim(void) interrupt 1 using 1
- {
- static unsigned char count;
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;//定時1mS
- if(count==PWM_ON)
- {
- PWM = 1; //直流電機轉
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
【實驗76】直流電機調速.zip
(13.04 KB, 下載次數: 75)
2017-7-6 15:28 上傳
點擊文件名下載附件
程序 下載積分: 黑幣 -5
|