按鍵控制數(shù)碼管和流水燈設(shè)計報告實驗報告_第1頁
按鍵控制數(shù)碼管和流水燈設(shè)計報告實驗報告_第2頁
按鍵控制數(shù)碼管和流水燈設(shè)計報告實驗報告_第3頁
按鍵控制數(shù)碼管和流水燈設(shè)計報告實驗報告_第4頁
按鍵控制數(shù)碼管和流水燈設(shè)計報告實驗報告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘要 單片機自20世紀70年代以來,以其極高的性價比,以及方便小巧受到人們極大的重視和關(guān)注。本設(shè)計選用msp430f249芯片作為控制芯片,來實現(xiàn)矩陣鍵盤對LED數(shù)碼管顯示的控制。通過單片機的內(nèi)部控制實現(xiàn)對硬件電路的設(shè)計,從而實現(xiàn)對4*4矩陣鍵盤的檢測識別。用單片機的P3口連接4×4矩陣鍵盤,并以單片機的P3.0P3.3口作鍵盤輸入的列線,以單片機的P3.4P3.7口作為鍵盤輸入的行線,然后用P0.0P0.7作輸出線,通過上拉電阻在顯示器上顯示不同的字符“0F”。在硬件電路的基礎(chǔ)上加上軟件程序的控制來實現(xiàn)本設(shè)計。其工作過程為:先判斷是否有鍵按下,如果沒有鍵按下,則繼續(xù)檢測整個程序,如

2、果有鍵按下,則識別是哪一個鍵按下,最后通過LED數(shù)碼管顯示該按鍵所對應(yīng)的序號。關(guān)鍵字:單片機、流水燈、數(shù)碼管、控制系統(tǒng) SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Throug

3、h the internal control single chip to realize the hardware design of the circuit, so as to realize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard i

4、nput, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pres

5、sed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system 鍵盤控制流水燈和數(shù)碼管實驗報告目錄一 設(shè)計的目的.2二 任務(wù)描述及方案設(shè)計 .3 1. 任務(wù)描述.3 2. 方案設(shè)計.3三 硬件設(shè)計方案 .3 1. Msp430f149單片機的功能說明.3 2. 顯示器功能.4 3. 復(fù)位電路.4 4. 按鍵的部分.4 5. 74HC573的特點.4 6. 流水燈和數(shù)碼管電路原理圖.4 7.

6、元器件清單.4四 程序設(shè)計方案.5 1. 用IAR Embedded Workbench軟件編程序.5 2. 仿真電路圖.6五 實物實驗.7 1. 實物圖.7 2. 測試結(jié)果與分析.7六 結(jié)論.11八 參考文獻.161、 設(shè)計目的 1、進一步鞏固和加深學(xué)生所學(xué)一門或幾門相關(guān)專業(yè)課理論知識,培養(yǎng)學(xué)生設(shè)計、計算、繪畫、計算機應(yīng)用、文獻查閱、報告撰寫等基本技能 ; 2、培養(yǎng)學(xué)生實踐動手能力及獨立分析和解決工程實踐問題能力; 3、培養(yǎng)學(xué)生的團隊協(xié)作精神、創(chuàng)新意思、嚴肅認真的治學(xué)態(tài)度和嚴謹求實的工作作風(fēng) 。2、 任務(wù)描述及設(shè)計方案 1. 任務(wù)描述 閉合按鍵1時,從P1.01.7逐個燈,并且P1.0亮一下

7、,P1.1亮兩下,P1.2亮三下,P1.3亮四下,P1.4亮五下,P1.5亮六下,P1.6亮七下,P1.7亮八下; 再是P1.0亮一下,P1.01.1亮兩下,P1.01.2亮三下,P1.01.3亮三下,P1.01.4亮五下,P1.01.5亮六下,P1.01.6亮七下,P1.01.7亮八下。閉合按鍵2時,先是從P1.01.7逐個燈亮,再是P1.0、P1.1P1.6、P1.7兩兩燈亮,接著是P1.0、P1.1、P1.2P1.6、P1.7每三個燈亮,最后是P1.0、P1.1、P1.2、P1.3P1.4、P1.5、P1.6、P1.7每四個燈亮。閉合按鍵3時,從P1.0P1.7逐個的亮,而且在P1.X燈

8、亮過后緊接著前面的燈兩兩燈亮。7ESG-MPX4-CC數(shù)碼管按a、b、c、d、e、f、g順序組成“8”字形。2、 設(shè)計方案 實驗此功能有兩種方案,一種是使用傳統(tǒng)的模擬電路,另一種是用單片機控制電路。我們選擇單片機控制系統(tǒng)。其中系統(tǒng)工作原理為: 我們利用循環(huán)移位指令,采用循環(huán)程序結(jié)構(gòu)進行編程。我們在程序一開始就給P1口送一個數(shù),這個數(shù)本身就讓P1.0先低,其他位為高,然后延時一段時間,再讓這個數(shù)據(jù)向高位移動,然后再輸出至P1口,這樣就實現(xiàn)了“流水”效果了。 以共陽極八段數(shù)碼管為例,當(dāng)控制某段發(fā)光二極管的信號為低電平時,對應(yīng)的發(fā)光二極管點亮,當(dāng)需要顯示某字符時,就將該字符對應(yīng)的所有二極管點亮;共陰

9、極二極管則相反,控制信號為高電平時點亮。電平信號按照dp,g,e.a的順序組合形成的數(shù)據(jù)字稱為該字符對應(yīng)的段碼。7SEG-MPX4-CC是四個共陰二極管顯示器,它的1234是陰極公共端。 3、 硬件設(shè)計方案 1、單片機功能說明 1 CPU :MSP430系列單片機的CPU和通用微處理器基本相同,只是在設(shè)計上采用了面向控的結(jié)構(gòu)和指令系統(tǒng)。MSP430的內(nèi)核CPU結(jié)構(gòu)是按照精簡指令集和高透明的宗旨而設(shè)計的,使用的指令有硬件執(zhí)行的內(nèi)核指令和基于現(xiàn)有硬件結(jié)構(gòu)的仿真指令。這樣可以提高指令速度和效率,增強了MSP的實時處理能力。2 存儲器 :存儲程序、數(shù)據(jù)以及外圍模塊的運行控制信息。有程序存儲器和數(shù)據(jù)存儲

10、器。對程序存儲器訪問總是以字形式取得代碼,而對數(shù)據(jù)可以用字或字節(jié)方式訪問。其中MSP430各系列單片機的程序存儲器有ROM、OTP、EPROM和FLASH型。3 外圍模塊 :經(jīng)過MAB、MDB、中斷服務(wù)及請求線與CPU相連。MSP430不同系列產(chǎn)品所包含外圍模塊的種類及數(shù)目可能不同。它們分別是以下一些外圍模塊的組合:時鐘模塊、看門狗、定時器A、定時器B、比較器A、串口0、1、硬件乘法器、液晶驅(qū)動器、模數(shù)轉(zhuǎn)換、數(shù)模轉(zhuǎn)換、端口、基本定時器、DMA控制器等。2、 顯示器的功能顯示器通常也稱為監(jiān)視器。顯示器是屬于電腦的I/O的設(shè)備,即輸入輸出設(shè)備。它可以分為CRT、LCD等多種。它是一種將一定的電文件

11、通過特定的傳輸設(shè)備顯示到屏幕上再到反射到人眼的顯示工具。3、 復(fù)位電路 電阻給電容充電,電容的電壓緩慢上升直到vcc,沒到vcc時芯片復(fù)位腳近似低電平,于是芯片復(fù)位,接近vcc時芯片復(fù)位腳近高電平,于是芯片停止復(fù)位,復(fù)位完成。 復(fù)位原理圖4、按鍵部分 4.1 鍵盤的結(jié)構(gòu)形式一般有獨立式鍵盤和矩陣式鍵盤兩種。獨立式鍵盤就是各個按鍵相互獨立,每個按鍵各接一個I/O接口線,而不會影響其他I/O接口線,所以我們在控制流水燈的三種閃法時用的是獨立式鍵盤。矩陣式鍵盤又叫行列式鍵盤,在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通

12、,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有

13、鍵按下了。4 ·鍵 盤,的檢測,首先要解決的問題是鍵盤抖動現(xiàn)象。消抖的方法有兩種,軟件消抖和硬件消抖。由于硬件消抖結(jié)構(gòu)比軟件復(fù)雜,所以本設(shè)計采用的是軟件消抖的方法,既在程序中加入5毫秒的延時,延時后再次返回P3的值二次判斷是否有鍵盤按下。5、 74HC573的特性74HC573的八個鎖存器都是透明的D型鎖存器,當(dāng)使能(G)為高時,Q輸出將隨數(shù)據(jù)(D)輸入而變。當(dāng)使能為低時,輸出將鎖存在已建立的數(shù)據(jù)電平上。輸出控制不是影響鎖存器的內(nèi)部工作,即老數(shù)據(jù)可以保持,甚至當(dāng)輸出被關(guān)閉時,新的數(shù)據(jù)也可以置入。這種電路可以驅(qū)動大電容或低阻抗負載,可與直接與系統(tǒng)總線接口并驅(qū)動總線,而不需要外接口。 7

14、4HC573引腳圖 Z=高阻抗 數(shù)碼管引腳圖6、流水燈和數(shù)碼管電路原理圖 如果要讓接在P1.0口的LED1亮起來,那么只要把P1.0口的電平變?yōu)榈碗娖骄涂梢粤? 如果要接在P1.0口的LED1熄滅,就要把P1.0口的電平變?yōu)楦唠娖? 同理,接在P1.1P1.7口的其他7個LED的點亮和熄滅的方法同LED1。要實現(xiàn)流水燈功能,我們只要將發(fā)光二極管LED1LED8依次點亮、熄滅,8只LED燈便會一亮一暗的做流水燈了。在此我們應(yīng)該注意一點,由于人眼的視覺暫留效應(yīng)以及單片機執(zhí)行每條指令的時間很短,我們在控制二極管亮滅的時候應(yīng)該延時一段時間,否則我們就看不到“流水”效果了。 7SEG-MPX4-CC數(shù)碼

15、管就是陰極為數(shù)碼管的公共端,按照發(fā)光管二極管的原理,當(dāng)陽極接電源正極,陰極接電源負極,發(fā)光二極管點亮。換句話說,共陰極的數(shù)碼管,當(dāng)a,b,c,d,e,f,g腳分別接到電源的正極,而COM腳接的電源負極,此時相當(dāng)于7個發(fā)光二極管同時點亮,并且顯示數(shù)字“8”所以某些類型的數(shù)碼管稱為7端數(shù)碼管別漏了“dp”,是小數(shù)點共陽極的取反就是了 P4.7P4.6P4.5P4.4 6.1 流水燈和數(shù)碼管電路原理圖 6.2 獨立按鍵控制流水燈部分 6.3 單片機復(fù)位部分 7、元器件清單元器件型號數(shù)目單片機MSP430f2491電阻1005發(fā)光二極管LED-BIBY8開關(guān)BUTTON18數(shù)碼管7SEG-MPX4-C

16、C1電容CAP1芯片74HC57314、 程序設(shè)計方案 1、用IAR Embedded Workbench軟件編程序 #include<msp430F249.h>#define ROW P4OUT /矩陣鍵盤的行宏定義#define COL P4IN /矩陣鍵盤的列宏定義#define DPYOUT P1OUT /數(shù)碼管輸出口宏定義#define uchar unsigned char#define uint unsigned intuchar keyval;uchar m=0;uchar remain = 0xff;uchar table1=0x01,0x02,0x04,0x08

17、,0x10,0x20,0x40,0x80;uchar table2=0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff;uchar table3=0x03,0x06,0x0c,0x18,0x30,0x60,0xc0;uchar seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39, 0x5e,0x79,0x71;void delay(uint n) uint i,j; for(i=0;i<n;i+) for(j=0;j<225;j+);uchar keyscan() i

18、nt i=0; uchar key=0; ROW=0x0f; if(COL&0x0f)!=0x0f) do i+; while(i<3000); ROW=0x7f; if(COL & 0x0f)= 0x0f) ROW=0xbf; if(COL & 0x0f)= 0x0f) ROW=0xdf; if(COL & 0x0f)= 0x0f) ROW=0xef; if(COL & 0x0f)= 0x0f) key=17; else key=(ROW&0xf0)|(COL&0x0f); else key=(ROW&0xf0)|(COL

19、&0x0f); else key=(ROW&0xf0)|(COL&0x0f); else key=(ROW&0xf0)|(COL&0x0f); return key; void fun1() uint i,j; for(i=0;i<8;i+) for(j=0;j<=i;j+) P3OUT=table1i;delay(50); P3OUT=0X00;delay(50); for(i=0;i<8;i+) for(j=0;j<=i;j+) P3OUT=table2i;delay(50); P3OUT=0X00;delay(50); vo

20、id fun2() uint i; P3OUT=0X01;delay(100); for(i=1;i<8;i+) P3OUT<<=1;delay(100); P3OUT=0X03;delay(100); for(i=1;i<=4;i+) P3OUT<<=2;delay(100); P3OUT=0X07;delay(100); for(i=1;i<=3;i+) P3OUT<<=3;delay(100); P3OUT=0X0f;delay(100); P3OUT=0X0f;delay(100);void fun3() uint i,j; for

21、(i=0;i<8;i+) P3OUT=table1i;delay(100); P3OUT=0X00;delay(100); for(j=0;j<i;j+) P3OUT=table3j;delay(100); P3OUT=0X00;delay(100); void main(void) WDTCTL = WDTPW + WDTHOLD; /keyval=17; P4DIR|=0Xf0; P1DIR|=0Xff; P1OUT|=0Xff; P3SEL=0X00; P3DIR|=0XFF; P3OUT&=0xff; P2DIR|=0X00; P2IE=0X07;P2IES=0X0

22、7; _EINT(); while(1) delay(100); switch(keyscan() case 0xd7:DPYOUT=seg0;remain=seg0;break; case 0x77:DPYOUT=seg13;remain=seg13;break; case 0x7b:DPYOUT=seg12;remain=seg12;break; case 0x7d:DPYOUT=seg11;remain=seg11;break; case 0xb7:DPYOUT=seg15;remain=seg15;break; case 0xbb:DPYOUT=seg9;remain=seg9;bre

23、ak; case 0xbd:DPYOUT=seg6;remain=seg6;break; case 0xbe:DPYOUT=seg3;remain=seg3;break; case 0xdb:DPYOUT=seg8;remain=seg8;break; case 0xdd:DPYOUT=seg5;remain=seg5;break; case 0xde:DPYOUT=seg2;remain=seg2;break; case 0xe7:DPYOUT=seg14;remain=seg14;break; case 0xeb:DPYOUT=seg7;remain=seg7;break; case 0xed:DPYOUT=seg4;remain=seg4;break; case 0xee:DPYOUT=seg1;remain=seg1;break; case 0x7e:DPYOUT=seg10;remain=seg10;break; default:DPYOUT = remain;break; switch(m) case 1: fun1();break; case 2: fun2(); break; case 3: f

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論