




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、計算機接口技術(shù)課程設(shè)計設(shè)計目標:在Proteus上建立一個仿真系統(tǒng),系統(tǒng)硬件包括AT89C52單片機、4×4行列式鍵盤、LM016L LCD顯示器和虛擬示波器。根據(jù)鍵盤的輸入,可輸出相應的步進電機脈沖控制信號和直流電機PWM控制信號。輸出參數(shù)在LCD上顯示,輸出信號在虛擬示波器上顯示。設(shè)計要求:1. 4×4行列式鍵盤布局為:123Step456PWM789StartReset0EnterStop2. LCD分兩行顯示,第一行為步進電機信號顯示,第二行為PWM信號顯示,顯示格式為:Step = 50 %PWM = 50 %等號和百分號上下應對齊。其中的數(shù)字可通過鍵盤輸入改變(
2、數(shù)字為正整數(shù),最小為1,最大為100)。3. 當Step=100%時,輸出脈沖寬度為1ms的方波(方波的脈沖寬度=脈沖間隔);此后百分數(shù)每減1,輸出脈沖寬度加1ms。4. 當PWM=1%時,輸出脈沖寬度0.1ms,脈沖間隔9.9ms的矩形波;此后百分數(shù)每加1,脈沖寬度加0.1ms,脈沖間隔減0.1ms,即保持脈沖周期始終等于10ms。5. 系統(tǒng)開機(即仿真開始)后,開機初始顯示為:Step = 50 %PWM = 50 %6. Start鍵用于啟動輸出,按下Start鍵后,虛擬示波器上應可看到相應的輸出波形。7. Stop鍵用于停止輸出,按下Stop鍵后,虛擬示波器上看不到波形。8. Step
3、鍵用于改變步進電機信號。按下Step鍵后,LCD第一行處顯示為Step = % 即原有數(shù)字消失,有光標閃爍,提示輸入數(shù)字。無論Start鍵是否按下,Step鍵均可使用。9. PWM鍵用于改變步進電機信號。按下PWM鍵后,LCD第二行處顯示為PWM = % 即原有數(shù)字消失,有光標閃爍,提示輸入數(shù)字。無論Start鍵是否按下,PWM鍵均可使用。10. 09的數(shù)字鍵用于改變信號輸出方式及其LCD顯示。按下一個數(shù)字,LCD上顯示一個相應的數(shù)字,同時光標右移一位閃爍。數(shù)字鍵僅在Step或PWM鍵按下后才起作用,否則不改變?nèi)魏蜭CD顯示和任何波形輸出。11. 09的數(shù)字鍵最多僅可輸入3位數(shù)字,當超過3位數(shù)
4、字后則輸入無效,光標只在最后一位上閃爍。12. Enter鍵用于確認輸入的數(shù)字。當數(shù)字輸入完畢后,按下Enter鍵,光標消失,系統(tǒng)接受所輸入的數(shù)字并在LCD上顯示。如果此時Start鍵已按下,即正在輸出波形,則波形立即發(fā)生改變。13. 當Step(或PWM)數(shù)字輸入完畢后,按下PWM(或Step)鍵,則Enter鍵功能被自動執(zhí)行,即所輸入數(shù)字自動被系統(tǒng)接受,如果此時正在輸出波形,則波形立即發(fā)生改變。14. 當Step(或PWM)數(shù)字輸入完畢后,按下Start鍵,則Enter鍵功能被自動執(zhí)行,即所輸入數(shù)字自動被系統(tǒng)接受,如果此時正在輸出波形,則波形立即發(fā)生改變。15. 當按下Step(或PWM)
5、鍵后,沒有輸入任何數(shù)字,而緊接著按下PWM(或Step)、Start、Stop、Enter,則光標消失,原來在LCD上顯示的數(shù)字重新顯示,脈沖參數(shù)不發(fā)生任何改變。16. 當在進行數(shù)據(jù)輸入時輸進的第一個數(shù)字或前兩個數(shù)字是0時,LCD相應的顯示0,但當輸入完畢后,最高有效位之前的0應不再顯示。17. 當輸入的數(shù)字超過100,輸入完畢后,LCD上應顯示100,同時系統(tǒng)接受100%的參數(shù)值;當輸入數(shù)字小于1,輸入完畢后,LCD上應顯示1,同時系統(tǒng)接受1%的參數(shù)值。18. Reset為復位鍵,按下Reset后,系統(tǒng)參數(shù)恢復到50%和50%。19. fosc為24MHz。 #include<reg5
6、2.h>#include <stdlib.h>#include <stdio.h>#define uint unsigned int#define uchar unsigned charuchar code table=" Step = 50%"uchar code table1=" Pwm = 50%"uchar code table2="0123456789" uint qwer10=0,1;uint qwer110=0,1; uint w; uchar num; sbit E=P32; /液晶使能端
7、 sbit RW=P31; sbit RS=P30; /液晶數(shù)據(jù)命令選擇端選擇寫數(shù)據(jù)還是寫命令 sbit P00=P00; /定義示波器Step的接口 sbit P01=P01; /定義示波器KAI的接口 sbit P2_0=P20; /定義P2口 sbit P2_1=P21; sbit P2_2=P22; sbit P2_3=P23; sbit P2_4=P24; sbit P2_5=P25; sbit P2_6=P26; sbit P2_7=P27; uchar KAITH0=0xEB; /步進信號定時器0高8位 uchar KAITL0=0xCC; /步進信號定時器0低8位 uchar
8、KAITH01=0xeb; uchar KAITL01=0x6c; uchar StepTH1=0xEB; /直流信號定時器0高8位 uchar StepTL1=0xCC; /直流信號定時器0低8位 uchar asd=0; uint h=50; uint es; uint start_step=1; /步進電機是否已經(jīng)輸入數(shù)(1時,按初始值50輸出波形,0時,按輸入數(shù)值輸出波形) uint start_kai=1; /直流電機是否已經(jīng)輸入數(shù)(1時,按初始值50輸出波形,0時,按輸入數(shù)值輸出波形) uint start01=0; / start鍵是否已按下(1為已按下,0為未按下) uint
9、wwe=0; void delay_1ms(uint z)/延時(z*1)ms的程序uint i,j;for(i=z;i>0;i-)for(j=110;j>0;j-);static uint g=0;/*直流電機信號計算*/void KAITimerSet()h=qwer0+qwer1+qwer2;if(h>100) h=100;if(h<1) h=1;if(start_kai) h=50; KAITH0=(65536-200*h)/256; KAITL0=(65536-200*h)%256; KAITH01=(45536+200*h)/256; KAITL01=(45
10、536+200*h)%256; void timer0(void)interrupt 1 /定時器0中斷服務程序 P01=!P01; TR0=1; / 啟動定時器0 TF0=0; ET0=1;/ 開定時器0中斷 if(g%2)!=0) TH0=KAITH0; TL0=KAITL0;g=g+1; else TH0=KAITH01; TL0=KAITL01; g=g+1; /*步進電機信號計算*/void StepTimerSet()es=qwer10+qwer11+qwer12;if(es>100) es=100;if(es<1) es=1; if(start_step) es=50
11、;es=101-es;asd=es;wwe=es; StepTH1=248; StepTL1=48; void timer1(void) interrupt 3 /定時器1中斷服務程序 asd-;if(asd=0) P00=!P00; asd=wwe; TH1=StepTH1; TL1=StepTL1; TR1=1; / 啟動定時器1 TF1=0; ET1=1;/ 開定時器1中斷 void dingshiqi() P01=0; P00=0; KAITimerSet(); StepTimerSet(); if(w!=100) TMOD=0x11; /定時器0和1都為方式1 TH0=KAITH0;
12、 TL0=KAITL0; TH1=StepTH1; TL1=StepTL1; TR0=1; / 啟動定時器 TR1=1; TF0=0; TF1=0; EA=1; /開全局中斷 ET0=1;/ 開定時器0中斷 ET1=1; /* * 名稱: Keyscan() * 功能: P1外接4×4按鍵, 按照掃描法讀出鍵值* 輸出: 按鍵值015/如無鍵按下, 返回16*/ uint Keyscan(void) uchar i, j, temp, Buffer4 = 0xef, 0xdf, 0xbf, 0x7f; for(j = 0; j < 4; j+) /循環(huán)四次 P1 = Buffe
13、rj; /在P1高四位分別輸出一個低電平 temp = 0x01; /計劃先判斷P1.0位 for(i = 0; i < 4; i+) /循環(huán)四次 if(!(P1 & temp) /從P1低四位,截取1位 delay_1ms(10); return (i + j * 4); /返回取得的按鍵值 temp <<= 1; /判斷的位,左移一位 delay_1ms(10);return 16; /判斷結(jié)束,沒有鍵按下,返回16 void write_com(uchar com) /寫入LM016L的工作模式RS=0; /LCD 選擇輸入命令P2=com; /向P0 口輸入命
14、令delay_1ms(5); /延時E=1; /打開LCD 使能delay_1ms(5); /一個高脈沖E=0; /關(guān)閉LCD 使能void write_data(uchar date)RS=1; /設(shè)置為輸入數(shù)據(jù)P2=date; /將數(shù)據(jù)賦給P0 口delay_1ms(5); /延時E=1; /置高delay_1ms(5); /高脈沖E=0; /置低完成高脈沖/設(shè)定LCD工作模式void init()E=0;write_com(0x38); /設(shè)置16x2 顯示5x7 點陣,8 位數(shù)據(jù)接口write_com(0x0c); /0x0f為設(shè)置開始顯示顯示光標光標閃爍;0x0c為設(shè)置開始顯示不顯示
15、光標write_com(0x06); /寫一個字符后地址指針加1write_com(0x01); /顯示清零數(shù)據(jù)指針清零 /系統(tǒng)開機,顯示初始模式即要求5void DispInit(void) write_com(0x80); /將數(shù)據(jù)指針第一行第一個字處 for(num=0;num<13;num+) write_data(tablenum); delay_1ms(5); write_com(0x80+0x40); /定義指針位置 for(num=0;num<13;num+) write_data(table1num); delay_1ms(5); write_com(0x0c);
16、 /輸入鍵盤轉(zhuǎn)化成實際鍵盤uint Transform (n) switch(n) case 0: return 1;break; case 1: return 2;break; case 2: return 3;break; case 4:return 4;break; case 5:return 5;break; case 6: return 6;break; case 8: return 7;break; case 9: return 8;break; case 10: return 9;break; case 12: DispInit();break; case 13:return 0
17、;break; default: return 10;break; /輸入步進電機數(shù)值十位void Input1(void) uint a=20,d=1; while(d) a = Keyscan(); delay_1ms(10);if(a!=12) if(a < 16) a=Transform (a); if(a!=10) qwer11=10*a; write_data(table2a); d=0; delay_1ms(500); else d=0; write_com(0x0c); /輸入步進電機數(shù)值個位void Input2(void) uint a=20,d=1; while(d
18、) a = Keyscan(); delay_1ms(10);if(a!=12) if(a < 16) a=Transform (a); if(a!=10) qwer12=a; write_data(table2a);d=0; delay_1ms(500); else d=0; write_com(0x0c); /輸入步進電機數(shù)值百位void Input(void) uint a=20,d=1; while(d) a = Keyscan(); delay_1ms(10);if(a!=12)if(a < 16) a=Transform (a); if(a!=10) qwer10=10
19、0*a; write_data(table2a); delay_1ms(500); Input1(); Input2(); start_step=0; d=0; else d=0; write_com(0x0c); /輸入直流電機數(shù)值十位 void Input4(void) uint a=20,d=1; while(d) a = Keyscan(); delay_1ms(10);if(a!=12) if(a < 16) a=Transform (a); if(a!=10) qwer1=a*10;write_data(table2a); d=0; delay_1ms(500); else
20、d=0;write_com(0x0c); /輸入直流電機數(shù)值個位void Input5(void) uint a=20,d=1; while(d) a = Keyscan(); delay_1ms(10);if(a!=12) if(a < 16) a=Transform (a); if(a!=10)qwer2=a;write_data(table2a);d=0; delay_1ms(500); elsed=0;write_com(0x0c); /輸入直流電機數(shù)值百位void Input3(void) uint a=20,d=1; while(d) a = Keyscan(); delay
21、_1ms(10);if(a!=12)if(a < 16) a=Transform (a); if(a!=10) qwer0=100*a; write_data(table2a); delay_1ms(500);Input4();Input5(); start_kai=0; d=0; elsed=0;write_com(0x0c); /將步進電動機信號控制在1100之間void abcde1(void) es=qwer10+qwer11+qwer12; if(es>100) write_com(0x89); /將數(shù)據(jù)指針第一行第十個字處 write_data(table21); /
22、delay_1ms(500); write_data(table20);write_data(table20);es=100; if(es<1) write_com(0x89); /將數(shù)據(jù)指針第一行第十個字處write_data(table20); / delay_1ms(500); write_data(table20);write_data(table21);es=1; if(es<10) write_com(0x89); /將數(shù)據(jù)指針第一行第十個字處 write_data(table0); write_data(table0);if(es=100)write_com(0x89
23、); /將數(shù)據(jù)指針第一行第十個字處write_data(table0);/將直流電動機信號控制在1100之間void abcde(void) h=qwer0+qwer1+qwer2; if(h>100) write_com(0x89+0x40); /將數(shù)據(jù)指針第一行第十個字處 write_data(table21); / delay_1ms(500); write_data(table20);write_data(table20);h=100; if(h<1) write_com(0x89+0x40); /將數(shù)據(jù)指針第一行第十個字處write_data(table20); /del
24、ay_1ms(500); write_data(table20);write_data(table21);h=1; if(h<10) write_com(0x89+0x40); /將數(shù)據(jù)指針第二行第十個字處 write_data(table0); write_data(table0);if(h=10)write_com(0x89+0x40); /將數(shù)據(jù)指針第二行第十個字處write_data(table0);void Step() write_com(0x89); /將數(shù)據(jù)指針第一行第十個字處 write_data(table10); /將數(shù)字處清零 write_data(table10); /將數(shù)字處清零 write
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會所打包出售合同范例
- 一家大公司勞動合同范例
- 個人倉儲租賃合同范例
- 公司辭退合同范例
- 養(yǎng)老院聘用護理合同范例
- 借款合同范例見證人
- 企業(yè)轉(zhuǎn)讓租賃合同范例
- 代理合同范例規(guī)范
- 書畫合作合同范例
- 買賣設(shè)備拆除合同范本
- 統(tǒng)編版(2024)道德與法治七年級下冊第一單元 珍惜青春時光 單元測試卷(含答案)
- 蘇教版數(shù)學一年級下冊(2024)第七單元觀察物體(一)綜合素養(yǎng)測評 A 卷(含答案)
- 2025年甘肅省張掖市民樂縣招聘專業(yè)技術(shù)人員9人(第二期)歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年湖北武漢理工大學學生輔導員招聘18人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 金融科技概論-課件 第十五章 金融科技監(jiān)管與監(jiān)管科技
- 2025年烏蘭察布醫(yī)學高等專科學校高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024年09月寧夏寧夏黃河農(nóng)村商業(yè)銀行系統(tǒng)社會招考筆試歷年參考題庫附帶答案詳解
- 2024入團知識題庫(含答案)
- 義務教育英語課程標準(2022年版)
- DB37∕T 5197-2021 公共建筑節(jié)能監(jiān)測系統(tǒng)技術(shù)標準
- 門診特定病種待遇認定申請表
評論
0/150
提交評論