版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版小額貸款抵押合同財務(wù)報告披露要求3篇
- 買賣合同糾紛代理詞3篇
- 二零二五版薦知識產(chǎn)權(quán)擔(dān)保交易合同集3篇
- 二零二五年度城市通勤車輛出租合作協(xié)議4篇
- 二零二五年度員工借款爭議調(diào)解及勞動法執(zhí)行合同
- 二零二五年度農(nóng)業(yè)OEM產(chǎn)品種植與加工合同范本3篇
- 二零二五年度工業(yè)廠房租賃市場拓展合同范本3篇
- 二零二五年度光伏充電樁場地共享租賃合同3篇
- 2025年度倉儲物流零星維修施工合同協(xié)議書3篇
- 2025年度美容院品牌授權(quán)及區(qū)域保護合同
- 湖北省黃石市陽新縣2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報告
- 央視網(wǎng)2025亞冬會營銷方案
- 《00541語言學(xué)概論》自考復(fù)習(xí)題庫(含答案)
- 《無砟軌道施工與組織》 課件 第十講雙塊式無砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學(xué)年高三上學(xué)期期末調(diào)研測試+英語+ 含答案
- 2024新版《藥品管理法》培訓(xùn)課件
- 《阻燃材料與技術(shù)》課件 第7講 阻燃橡膠材料
- 爆炸物運輸安全保障方案
- 江蘇省南京市2025屆高三學(xué)業(yè)水平調(diào)研考試數(shù)學(xué)試卷(解析版)
- 2024年黑龍江省哈爾濱市中考數(shù)學(xué)試卷(附答案)
評論
0/150
提交評論