單片機課程設計--鍵盤輸入在led數(shù)碼管上的顯示_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  課 程 設 計</p><p><b>  年 月 日</b></p><p><b>  課程設計任務書</b></p><p>  課程 單片機的控制系統(tǒng)課程設計</p><p>  題目 鍵盤輸

2、入在LED數(shù)碼管上的顯示</p><p>  專業(yè) 姓名 學號 </p><p>  主要內容、基本要求、主要參考資料等</p><p><b>  主要內容:</b></p><p>  完成鍵盤輸入在LED數(shù)碼管上的顯示。</p><p&g

3、t;<b>  基本要求: </b></p><p>  1.了解 4×4 鍵盤的工作原理。</p><p>  2.熟悉 SPCE061A 單片機控制數(shù)碼管顯示的方法。</p><p>  3.掌握 4×4 鍵盤的使用方法。</p><p>  4.掌握 4×4 鍵盤控制數(shù)碼管顯示的方法。

4、</p><p><b>  參考資料:</b></p><p>  [1]肖洪兵.跟我學用單片機[J].北京:北京航空航天大學出版社,2002.8 </p><p>  [2]何立民.單片機高級教程第1版[M].北京:北京航空航天大學出版社,2001.6</p><p>  [3]趙曉安.MCS-51單片機原理及應用[

5、M].天津:天津大學出版社,2001.3 </p><p>  [4]李廣第.單片機基礎第1版[M].北京:北京航空航天大學出版社,1999.5</p><p>  [5]徐惠民.單片微型計算機原理與應用[M].北京:北京郵電大學出版社,1996.2</p><p>  [6] 袁勤勇.嵌入式系統(tǒng)構件[M].北京:北京機械工業(yè)出版社,2002.</p>

6、<p>  完成期限 </p><p>  指導教師 </p><p>  專業(yè)負責人 </p><p><b>  年 月 日</b></p><p><b>  目 錄</

7、b></p><p>  第1章 設計的研究背景及目的要求1</p><p>  1.1 研究背景1</p><p>  1.2 設計目的1</p><p>  1.3 硬件選擇1</p><p>  1.4 設計內容1</p><p>  第2章 設計的基本原理及硬件連接方案

8、2</p><p>  2.1 4X4鍵盤掃描原理圖2</p><p>  2.2 SPCE061A獲取4×4鍵盤鍵值原理2</p><p>  2.3 硬件連接3</p><p>  第3章 軟件設計方案5</p><p>  3.1 設計步驟5</p><p>  3.2

9、 設計程序6</p><p>  第4章 調試結果與分析7</p><p>  4.1 調試結果7</p><p>  4.2 結果分析7</p><p><b>  結論與體會8</b></p><p><b>  參考文獻9</b></p>&l

10、t;p><b>  附錄10</b></p><p>  第1章 設計的研究背景及目的要求</p><p><b>  1.1 研究背景</b></p><p>  用單片機驅動LED數(shù)碼管有很多方法,按顯示方式可分靜態(tài)顯示和動態(tài)(掃描)顯示;按譯碼方式可分硬件譯碼和軟件譯碼。靜態(tài)顯示數(shù)據穩(wěn)定,占用很少的CPU時間

11、。動態(tài)顯示需要CPU時刻對顯示器件進行數(shù)據刷新,顯示數(shù)據有閃爍感,占用的CPU時間多。LED數(shù)碼管的外圍電路一般需要一個限流電阻和加大驅動電流的晶體管。</p><p>  LED數(shù)碼管是由發(fā)光二級管顯示字段組成的顯示器,有“8”字段和“米”字段之分,這種顯示器有共陽極和共陰極兩種。實際上不用驅動電路即可達到正常亮度,為了可靠性設計可采用晶體管構成驅動電路。</p><p><b&g

12、t;  1.2 設計目的</b></p><p>  在單片機的產品設計中,人機界面是非常重要的部分,而且隨著系統(tǒng)的日益復雜,以及人們對產品的人機交互能力的要求不斷提升,常握單片機系統(tǒng)中的人機界面基礎設計能力成為了學習單片機的基礎課程,而4X4鍵盤的操作和LED數(shù)碼管的動態(tài)顯示是人機界面設計的基礎內容,掌握這些基礎設計能力,加深對人機界面的認識,同時提高人機界面系統(tǒng)設計能力。</p>&

13、lt;p><b>  1.3 硬件選擇</b></p><p>  裝有Windows系統(tǒng)和μ’nSP? IDE仿真環(huán)境的PC機一臺,μ’nSP? 十六位單片機實驗箱一個。本設計用到的實驗箱硬件模塊為:SPCE061A核心及周邊電路模塊(包含32個I/O口)。半導體數(shù)碼管,4×4鍵盤。做此實驗用51板也可以,因為51板也提供了相應的LED模組,因為實驗室里面給我們提供了61板

14、,所以我決定選用SPCE061A單片機實驗箱。</p><p><b>  1.4 設計內容</b></p><p>  給 4×4 鍵盤的每個鍵定義一個功能,其中把定義為 0~9 的鍵盤稱為數(shù)字鍵,把定義成 DEL 的鍵稱為刪除鍵,把定義成 ENT 的鍵成為確認鍵,其他鍵稱為保留鍵。如果是數(shù)字鍵按下,把代表數(shù)字顯示在數(shù)碼管上:按鍵按下時,6 位數(shù)碼管靠右邊

15、顯示該鍵的代表數(shù)字;繼續(xù)按鍵時,已經顯示在數(shù)碼管上的數(shù)字左移一位,按鍵代表的數(shù)字顯示在最右邊的數(shù)碼管上。</p><p>  第2章 設計的基本原理及硬件連接方案</p><p>  2.1 4X4鍵盤掃描原理圖</p><p>  鍵盤按其接線方法有:直接式鍵盤、行列式鍵盤(又稱矩陣鍵盤)、串轉并鍵盤等;在本設計中,采用4X4的行列式鍵盤,即鍵盤排列為4行、4列,

16、共16個按鍵。4×4鍵盤的電路圖如圖 1-3所示,分別定義這16個按鍵盤為KEY1~16。</p><p>  圖 2-1 4×4鍵盤電路圖</p><p>  圖中C1~C4為4×4鍵盤的列掃描線,L1~L4為4×4鍵盤的行掃描線。先使行掃描線輸出高電平,然后讀取列掃描線的狀態(tài),得到與按鍵橫向位置對應的4位列碼;如果是有鍵被按下時,則對應的列掃描線

17、必然會被讀回高電平,如果是無鍵盤按下時,則讀取的列碼必定全是0(低電平)。這也就可以判斷有無按鍵的按下了。</p><p>  2.2 SPCE061A獲取4×4鍵盤鍵值原理</p><p>  單片機與該電路連接時,使用4個端口作為輸出口,接4條行掃描線;使用4個端口作為輸入口,接4條列掃描線。使用SPCE061A的IOA8~15八個端口作4×4鍵盤的掃描,IOA0~

18、3接行掃描線,IOA4~7接列掃描線。</p><p>  圖 2-2 SPCE061A和4×4鍵盤電路連接圖</p><p>  如上圖中,IOA12~IOA15設置為輸出口,接行掃描線;IOA8~IOA11設置為帶下拉電阻的輸入口,接列掃描線。按照4×4鍵盤的工作原理,先只把IOA12輸出高電平,其他都輸出低電平,掃描IOA8到IOA11四個輸入口的值,如果每個輸入

19、口的值還是0;再把IOA13輸出高電平,其他都輸出低電平,掃描IOA8到IOA11四個輸入口的值,如果每個輸入口還沒有檢測到高電平;從IOA14輸出高電平掃描,從IOA15輸出高電平掃描,直到檢測到高電平,保存掃描行值和列碼。</p><p><b>  2.3 硬件連接</b></p><p>  硬件連接圖如圖 2-3,IOA0~IOA7連接和6位數(shù)碼管的a~g、

20、dp,IOA口的高八位IOA15~IOA8連接4×4鍵盤的L1~L4、C1~C4,IOB15~IOB12連接數(shù)碼管的位信號1~4,IOB2~IOB1連接數(shù)碼管的位信號5~6,IOB0連接數(shù)碼管的分隔符信號DD。即把JP4、JP5的引腳全部用跳線短接起來,用一根排線連接J28和JP7,注意J27和JP7的連接順序(連接順序為:J27的第0號引腳連接JP7的C4引腳,J27的第7號引腳連接JP7的L1引腳)。</p>

21、<p>  圖 2-3 硬件連接圖</p><p>  第3章 軟件設計方案</p><p><b>  3.1 設計步驟</b></p><p>  1.建立一個新工程cyd,在工程里新建C語言文件main.c。</p><p>  2.拷貝并添加頭文件SPCE061A.c和SPCE061A.inc到新建工

22、程cyd。</p><p>  3.按照程序流程圖編寫程序,如圖3-1所示。</p><p>  圖 3-1 主程序流程圖</p><p>  4. Rebuild All。</p><p>  5.根據硬件連接圖連接實驗箱電路。</p><p>  6.下載程序到實驗箱,運行。</p><p>

23、;  7.觀察實驗箱LED數(shù)碼管的狀態(tài),分析是否和設計要求相符。</p><p><b>  3.2 設計程序</b></p><p>  由于程序過多,如附錄所示。</p><p>  第4章 調試結果與分析</p><p><b>  4.1 調試結果</b></p><p&

24、gt;  給 4×4 鍵盤的每個鍵定義一個功能,其中把定義為 0~9 的鍵盤稱為數(shù)字鍵,把定義成DEL的鍵稱為刪除鍵,把定義成ENT的鍵成為確認鍵,其他鍵稱為保留鍵。如果是數(shù)字鍵按下,把代表數(shù)字顯示在數(shù)碼管上:按鍵按下時,6位數(shù)碼管靠右邊顯示該鍵的代表數(shù)字;繼續(xù)按鍵時,已經顯示在數(shù)碼管上的數(shù)字左移一位,按鍵代表的數(shù)字顯示在最右邊的數(shù)碼管上。如果是刪除鍵按下時,每按一次刪除鍵顯示在最右邊數(shù)字被刪除,其他數(shù)字右移一位,最右邊一位顯

25、示 0,比如在第 5 個數(shù)碼管上顯示“8”,在第 6 個數(shù)碼管上顯示“9”,當按一次刪除鍵時,在第 6 個數(shù)碼管上顯示“8”,第 5 個數(shù)碼管顯示按鍵前第四個數(shù)碼管顯示的內容(或者說刪除了9)。</p><p><b>  4.2 結果分析</b></p><p>  此設計驗證了鍵盤輸入在LED數(shù)碼管上的顯示的功能??赡軙霈F(xiàn)的問題就是在按鍵時候需要注意,當保留鍵按

26、下時,不做任何操作。當按確認鍵時,按任何鍵將不起作用。</p><p><b>  結論與體會</b></p><p><b>  設計結論:</b></p><p>  設計中我遇到了按鍵分辨的問題。</p><p>  我采用的解決方法是自己在紙上記下自己定義的功能。</p>&l

27、t;p>  此次設計的優(yōu)點是程序簡單,不過缺點是操作繁瑣。很難理清按鍵順序。</p><p>  我建議能夠簡化操作步驟,使電路圖連接更清晰。操作起來能夠得心應手。</p><p><b>  心得體會:</b></p><p>  單片機是一門非常重視實踐的技術,不能總是看書,但要學習它首先應看書,對單片機引腳、內部結構、寄存器和原理有

28、一定地了解和感官認識,它的是怎樣工作的,能干些什么?剛開始時,也許你看不明白,但這并不要緊,因為你還缺乏實踐經驗?,F(xiàn)在單片機應用廣泛,因此各個廠家分別推出了自己的單片機,按內部結構體系派系分:51系列、PIC系列、AVR系列、摩托羅拉等等……!因為他們的編程方法和調試過程以及內部指令結構有一定的相似,只要學精通一款就OK了!尤其是用C語言編程,就幾乎不用分什么派系,但是我們要選擇一款有代表性的知識范圍廣,并且入門容易,書籍多。一般來說,

29、MCS-51系列單片機已經得到廣泛的普及和應用,市場上它的資料也比較多,用的人也很多。</p><p><b>  參考文獻</b></p><p>  [1]肖洪兵.跟我學用單片機[J].北京:北京航空航天大學出版社,2002.8 </p><p>  [2]何立民.單片機高級教程第1版[M].北京:北京航空航天大學出版社,2001.6<

30、;/p><p>  [3]趙曉安.MCS-51單片機原理及應用[M].天津:天津大學出版社,2001.3 </p><p>  [4]李廣第.單片機基礎第1版[M].北京:北京航空航天大學出版社,1999.5</p><p>  [5]徐惠民.單片微型計算機原理與應用[M].北京:北京郵電大學出版社,1996.2 [6] 袁勤勇.嵌入式系統(tǒng)構件[M].北京:北京機械工

31、業(yè)出版社,2002.</p><p><b>  附錄</b></p><p>  #include "SPCE061A.h"</p><p>  #include "Dig.h"#include "Key.h"</p><p>  int main(void)

32、int Ent_Flag = 0;</p><p>  unsigned int uiKey;</p><p>  unsigned int uiData[6] = {1,0,0,0,0,1};</p><p>  uiData[0] = 0;uiData[5] = 0;</p><p>  Key_Init();DIG_Init();<

33、;/p><p>  while(1)uiKey = Key_Get();</p><p>  switch(uiKey)Case KEY_0:</p><p>  if(Ent_Flag == 0){</p><p>  uiData[0] = uiData[1]; </p><p

34、>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  uiData[3] = uiData[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 7; }break;case KEY_1:&

35、lt;/p><p>  if(Ent_Flag == 0) {</p><p>  uiData[0] = uiData[1];</p><p>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  uiData[3] = uiData[4]

36、;</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 8; }break; case KEY_2: </p><p>  if(Ent_Flag == 0) {</p><p>  uiData[0]

37、 = uiData[1];</p><p>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  uiData[3] = uiData[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiDa

38、ta[5] = 9; }break;case KEY_3: </p><p>  break;case KEY_4:</p><p>  if(Ent_Flag == 0)</p><p>  uiData[0] = uiData[1]; </p><p>  uiData[1] = uiData[

39、2];</p><p>  uiData[2] = uiData[3];</p><p>  uiData[3] = uiData[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 4; }</p><p>  break;case KEY_5:

40、 </p><p>  if(Ent_Flag == 0) {</p><p>  uiData[0] = uiData[1];</p><p>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  uiData[3] = uiData

41、[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 5; </p><p>  break;case KEY_6: </p><p>

42、;  if(Ent_Flag == 0) </p><p>  uiData[0] = uiData[1]; </p><p>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p&g

43、t;<p>  uiData[3] = uiData[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 6;</p><p>  break;case KEY_7: </p><p>  break;case KEY_8: </p><

44、p>  if(Ent_Flag == 0) {</p><p>  uiData[0] = uiData[1];</p><p>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  uiData[3] = uiData[4];</p>&l

45、t;p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 1;</p><p>  break;case KEY_9: </p><p>  if(Ent_Flag == 0) {</p><p>  uiData[0] = uiData[1]; </p><p>  

46、uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  uiData[3] = uiData[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 2;}</p><p>  br

47、eak;case KEY_A: </p><p>  if(Ent_Flag == 0) {</p><p>  uiData[0] = uiData[1];</p><p>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  uiDa

48、ta[3] = uiData[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 3;}</p><p>  break;case KEY_B:</p><p>  break;case KEY_C: </p><p>  if(Ent_Flag ==

49、0) </p><p>  uiData[5] = uiData[4]; </p><p>  uiData[4] = uiData[3];</p><p>  uiData[3] = uiData[2];</p><p>  uiData[2] = uiData[1];</p>&

50、lt;p>  uiData[1] = uiData[0];</p><p>  uiData[0] = 0; </p><p>  break;case KEY_D: </p><p>  if(Ent_Flag =

51、= 0) </p><p>  uiData[0] = uiData[1]; </p><p>  uiData[1] = uiData[2];</p><p>  uiData[2] = uiData[3];</p><p>  u

52、iData[3] = uiData[4];</p><p>  uiData[4] = uiData[5];</p><p>  uiData[5] = 0; </p><p>  break;case KEY_E: &l

53、t;/p><p>  break;case KEY_F: </p><p>  Ent_Flag = 1;break;</p><p>  default:break;</p><p>  DIG_Set(1,g_Data[uiData[0]]);

54、 </p><p>  DIG_Set(2,g_Data[uiData[1]]); </p><p>  DIG_Set(3,g_Data[uiData[2]]); </p><p>  DIG_Set(4,g

55、_Data[uiData[3]]); </p><p>  DIG_Set(5,g_Data[uiData[4]]); </p><p>  DIG_Set(6,g_Data[uiData[5]]); </p&g

56、t;<p>  *P_Watchdog_Clear = 0x0001; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  課程設計成績評價表</b></p>

溫馨提示

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

評論

0/150

提交評論