按鍵設(shè)置占空比,PWM控速_第1頁
按鍵設(shè)置占空比,PWM控速_第2頁
按鍵設(shè)置占空比,PWM控速_第3頁
按鍵設(shè)置占空比,PWM控速_第4頁
按鍵設(shè)置占空比,PWM控速_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、./*接法: P0 段選; P3 鍵盤功能 : 通過按鍵設(shè)置PWM占空比進而控制電機轉(zhuǎn)速*/原理圖:程序:#include<reg51.h>#include<math.h>#define uint unsigned int/ 下面用#define uchar unsigned char/ 下面用#define GPIO_DIGP0/ 下面用號uint 代替 unsigned int (無符號整數(shù)) uchar 代替 unsigned char(無符號字符型數(shù))GPIO_DIG代替 P0 口, P0 口送數(shù)碼管段選信#define keyport P3/keyport 代

2、替 P3,P3 口鍵盤掃描sbit shi = P25;/ 數(shù)碼管位選(十位),用 shi 代替 P25sbit ge = P26;/ 數(shù)碼管位選(個位)sbit LED = P27;/P27控制 LED閃爍sbit PWM = P10;/P10輸出 pwmunsigned char code table17 = /定義一個數(shù)組存放共陰極數(shù)碼管碼表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar temp=0,0;/臨時存放占空比的數(shù)組uchar duty=0,0;/存放占

3、空比的數(shù)組,duty0存十位duty1.存?zhèn)€位char flag = 0;/按鍵的一個標(biāo)志按一次鍵加1,uchar key = 0;/存放鍵值uchar t0;/存放占空比()uint timer1;uint count;uint period;uint t = 0;/*子函數(shù)聲明*/void delay10ms(void);/10ms延時軟件消抖的聲明void delayxms(uint x);/ 延時 xms的函數(shù)的聲明void matrixscan(void);/鍵盤檢測函數(shù)的聲明void Time1Config(void);/ 定時器設(shè)置函數(shù)的聲明void set(void);/ 設(shè)置

4、占空比的函數(shù)void display(void);/ 數(shù)碼管動態(tài)顯示函數(shù)聲明/*主函數(shù)*/void main()Time1Config();while(1)set();matrixscan();display();t0=duty0*10+duty1;/*子函數(shù)定義*/* 延時 10ms函數(shù)的定義(無入口參數(shù)無返回值)*/void delay10ms()uchar a,b,c;for(a=1;a>0;a-)for(b=38;b>0;b-)for(c=130;c>0;c-);./* 延時 xms函數(shù)的定義(入口參數(shù)是無符號整形數(shù)x 的值是多少延時幾毫秒, 無返回值) */void

5、 delayxms(uint x)/誤差 0usunsigned char a,b,c;for(;x>0;x-)for(c=1;c>0;c-)for(b=142;b>0;b-)for(a=2;a>0;a-);/* 數(shù)碼管動態(tài)顯示函數(shù)的定義(無入口參數(shù)無返回值)*/void display(void)P0=tableduty0;shi = 0;delayxms(10);shi = 1;P0=tableduty1;ge = 0;delayxms(10);ge = 1;/*3 × 5 鍵盤掃描函數(shù)的定義(無入口參數(shù)無返回值)*/void matrixscan()uc

6、har temp;keyport=0xfe;/第 1 行通低電平 (1111,1110)temp=keyport;/讀P3電平temp=temp>>3;/右移三位if(temp!=0x1f)/檢測不等說明高5 位中有低電平,有鍵按下delay10ms();/去抖延時temp=keyport;/讀P3電平temp=temp>>3;/右移三位if(temp!=0x1f)/檢測不等說明高5 位中有低電平,有鍵按下temp=keyport;/讀P3電平flag+;switch(temp)/根據(jù) temp 分類case 0xf6:/1111 0110key=0;break;cas

7、e 0xee:/1110 1110.key=1;break;case 0xde:/1101 1110key=2;break;case 0xbe:/1011 1110key=3;break;case 0x7e:/0111 1110key=4;break;default :break;temp=keyport;/ 讀 P3電平temp=temp>>3;while(temp != 0x1f)/ 松鍵檢測 ( 加了這一段松開才給key 賦值,不加這句按了就變 )temp = keyport;/ 讀 P3 電平temp=temp>>3;/ 右移三位keyport=0xfd;/第

8、2 行通低電平(1111 1101 )temp=keyport;/讀P3電平temp=temp>>3;/右移三位if(temp!=0x1f)/檢測不等說明高5 位中有低電平,有鍵按下delay10ms();/去抖延時temp=keyport;/讀P3電平temp=temp>>3;/右移三位if(temp!=0x1f)/檢測不等說明高5 位中有低電平,有鍵按下temp=keyport;/讀P3電平flag+;switch(temp)case 0xf5:/1111 0101key=5;break;case 0xed:/1110 1101key=6;.break;case 0

9、xdd:/1101 1101key=7;break;case 0xbd:/1011 1101key=8;break;case 0x7d:/0111 1101key=9;break;default :break;temp=keyport;/讀P3電平temp=temp>>3;/右移三位while(temp!=0x1f)/松鍵檢測 ( 加了這一段松開才給key 賦值,不加這句按了就變 )temp=keyport;/讀P3電平temp=temp>>3;/右移三位keyport=0xfb;/第 3 行通低電平(1111 1011 )temp=keyport;/讀P3電平temp

10、=temp>>3;/右移三位if(temp!=0x1f)/檢測不等說明高5 位中有低電平,有鍵按下delay10ms();/延時消抖,temp=keyport;/讀P3電平temp=temp>>3;/右移三位if(temp!=0x1f)/檢測不等temp=keyport;/讀P3電平flag+;switch(temp)temp=keyport;/讀P3電平case 0xf3:/1111 0011key=10;break;case 0xeb:/1110 1011key=11;break;.case 0xdb:/1101 1011key=12;break;case 0xbb

11、:/1011 1011key=13;break;case 0x7b:/0111 1011key=14;break;temp=keyport;/讀P3電平temp=temp>>3;/右移三位while(temp!=0x1f)/檢測不等temp=keyport;/讀P3電平temp=temp>>3;/右移三位/* 定時器設(shè)置函數(shù)的定義(無入口參數(shù)無返回值)*/void Time1Config()TMOD|= 0x10;/ 設(shè)置定時計數(shù)器工作方式1 為定時器/* 定時器賦初始值,12MHZ下定時 */TH1 = 0xFE;TL1 = 0x0C;ET1 = 1;/ 開啟定時器1

12、 中斷EA = 1;/ 開總中斷TR1 = 1;/ 開啟定時器void set(void)while(key=14)/Reset鍵按下flag=0;while(key=14)/ 當(dāng) Reset 鍵按下/*設(shè)置十位 */while(flag=0)/* 數(shù)碼管十位閃爍*/if(timer1<1200).P0=table0;shi=0;elseshi=1;/*/matrixscan();/鍵盤掃描if(key<=9)/如果是 09 數(shù)字鍵temp0=key; /保存十位if(key=10)/cancel鍵按下flag=0;break;/出設(shè)置界面if(key>=11)/如果是 su

13、re , delete , clear或 Resetflag=0;/*設(shè)置個位 */while(flag=1|flag>=8) /flag=1時第一次輸入個位,flag>=8第2,3,4.輸入個位shi=0;/十位的位選P0=tabletemp0;/十位的段選delayxms(10);/延時顯示shi=1;/關(guān)閉位選/*實現(xiàn)個位閃爍*/if(timer1<1200&&flag<8)P0=table0;ge=0;delayxms(10);ge=1;if(timer1>=1200&&flag<8)ge=1;/* 兩位都輸入后顯示十

14、位個位*/if(timer1<1200&&flag>=8).P0=tabletemp1;ge=0;delayxms(10);ge=1;if(timer1>=1200&&flag>=8)P0=tabletemp1;ge=0;delayxms(10);ge=1;/*/matrixscan();if(key<=9&&flag=2)/如果個位第一次按下數(shù)字鍵 09temp1=key;/保存?zhèn)€位flag=8;if(key=10)/取消操作鍵flag=0;break;if(key=11&&flag=2)/ 如果個

15、位第一次輸入的是確定鍵flag=1;if(key=11&&flag>=8)/如果設(shè)置完畢, 按下確定鍵duty0=temp0;duty1=temp1;flag=0;break;if(key = 12)/ 按下退格鍵if(flag=2)/ 如果清除十位key=14;flag=0;.if(flag>=8)/ 如果清除個位flag=1;if(key = 13)/ 按下清空鍵flag=0;key=14;if(flag=0)/ 返回到設(shè)置界面重新來過break;void Time1(void) interrupt 3/3為定時器1 的中斷號1定時器 0 的中斷號0外部中斷 1 2外部中斷2 4串口中斷TH1 = 0xFE;/ 重新賦初值TL1 = 0x0C;timer1+;count+;period+;/*產(chǎn)生 pwm*/if(per

溫馨提示

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

最新文檔

評論

0/150

提交評論