單片機課程設計計算器_第1頁
單片機課程設計計算器_第2頁
單片機課程設計計算器_第3頁
單片機課程設計計算器_第4頁
單片機課程設計計算器_第5頁
免費預覽已結束,剩余28頁可下載查看

下載本文檔

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

文檔簡介

1、課程設計說明書課程設計名稱:單片機課程設計課程設計題目:四位數(shù)加法計算器的設計學院名稱:電氣信息學院專業(yè)班級:學生學號:學生姓名:學生成績:指導教師:課程設計時間:至格式說明(打印版格式,手寫版不做要求)(1)任務書三項的內(nèi)容用小四號宋體,倍行距。(2)目錄(黑體,四號,居中,中間空四格),內(nèi)容自動生成,宋體小四號。(3)章的標題用四號黑體加粗(居中排)。(4)章以下的標題用小四號宋體加粗(頂格排) 。(5)正文用小四號宋體,倍行距;段落兩端對齊,每個段落首行縮進兩個字。(6)圖和表中文字用五號宋體,圖名和表名分別置于圖的下方和表的上方,用五號宋體(居中排)(7)頁眉中的文字采用五號宋體,居中

2、排。頁眉統(tǒng)一為:武漢工程大學本科課程設計。(8)頁碼:封面、扉頁不占頁碼;目錄采用希臘字母I、II、出排列,正文采用阿拉伯數(shù)字1、2、3排列;頁碼位于頁腳,居中位置。(9)標題編號應統(tǒng)一,如:第一章,1,;論文中的表、圖和公式按章編號,如:表、表;圖、圖;公式()、公式()。課程設計任務書一、課程設計的任務和基本要求( 一 ) 設計任務 (從 “單片機課程設計題目” 匯總文檔中任選 1 題,根 據(jù)所選課題的具體設計要求來填寫此欄)1. 系統(tǒng)通過4x4 的矩陣鍵盤輸入數(shù)字及運算符。2. 可以進行4 位十進制數(shù)以內(nèi)的加法運算,如果計算結果超過4 位十進制數(shù),則屏幕顯示E。3. 可以進行加法以外的計

3、算( 乘、除、減) 。4. 創(chuàng)新部分:使用LCD1602夜晶顯示屏進行顯示,有開機歡迎界面, 計算數(shù)據(jù)與結果分兩行顯示,支持小數(shù)運算。5. 二 ) 基本要求1. 有硬件結構圖、電路圖及文字說明;2. 有程序設計的分析、思路說明;3. 有程序流程框圖、程序代碼及注釋說明;4. 完成系統(tǒng)調(diào)試(硬件系統(tǒng)可以借助實驗裝置實現(xiàn),也可在Proteus軟件中仿真模擬) ;5. 有程序運行結果的截屏圖片。二、進度安排第9周,1 )題目分析,文獻查閱2 )方案比較,確定設計方案3 )硬件電路設計4 )程序設計,程序調(diào)試,系統(tǒng)聯(lián)調(diào),系統(tǒng)改進5 )課程設計說明書撰寫三、參考資料或參考文獻1. 林立,張俊亮 . 單片

4、機原理及應用基于 Proteus 和 Keil C M. 北京:電子工業(yè)出版社,20132. 張毅剛,彭喜元 . 單片機原理與應用設計M. 北京:電子工業(yè)出版社,20083. 馬忠梅 . 單片機的 C 語言應用程序設計( 第 5 版 ) M. 北京:北京航空航天大學出版社,20134. 樓然苗、李光飛.51系列單片機設計實例M.北京:北京航空航天大學出版社,2003本科生課程設計成績評定表專業(yè)班級課程設計題目: 課程設計答辯記錄:(手寫)成績評定依據(jù):項目得分比例考勤記錄設計結果報告撰寫答辯成績備注:成績評定依據(jù)的項目內(nèi)容和項目分值比例可以由老師按指導的專業(yè)進行調(diào)整,但成績評定依據(jù)的項 目數(shù)不

5、得少于3項。最終評定成績:指導教師簽名:年 月 日錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。錯誤! 未定義書簽。第一章設計論證設計分析 設計方案 第二章硬件設計硬件結構與工作原理單元電路設計第三章 軟件設計 系統(tǒng)軟件結構主要功能子程序設計第四章 系統(tǒng)調(diào)試與分析 調(diào)試過程與結果結果分析 第五章 設計小結 附錄 第一章 設計論證設計分析在方案設計過程中,我列出了兩種不同的設計方案,分

6、別對應于顯示模塊和單片機內(nèi)部運算。顯示模塊在我的設計中有兩種不同的顯示方式,分別為數(shù)碼管顯示以及液晶屏顯示。對于數(shù)碼管顯示來說,優(yōu)點是使用簡單,反應速度更快,由于LCD有眾多的接口,以及指令,因此在軟件上要比數(shù)碼管復雜。數(shù)碼管顯示的缺點也比較明顯,就是需要占用過多的單片機輸出接口,同時,LCD的顯示功能更多,也更直觀,對于現(xiàn)實生活中的 使用也更加舒適。在綜合了以上幾點的考慮后,我最終選擇了LCD1602夜晶顯示芯片作為顯示模塊。在單片機內(nèi)部運算方面, 我的設想也有兩種, 即支持浮點數(shù)運算或只支持整數(shù)運算,若只支持整數(shù)運算,程序設計勢必更加簡單易懂,但是出于實用性的考慮,我最終決定了使計算器支持

7、浮點數(shù)運算功能。同時,這也能更好地鍛煉我的編程思維能力。設計方案按照系統(tǒng)設計的功能的要求,初步確定設計系統(tǒng)由主控模塊、顯示模塊、鍵盤掃描接口電路共四個模塊組成。主控芯片使用 8051系列的AT89C52單片機,其中帶有非易 失性Flash程序存儲器,它是一種高性能、低功耗的 8位CMO微處理芯片,市場應用 最多。顯示模塊采用LCD1602夜晶顯示器為主體構成。鍵盤電路采用 4x4 矩陣鍵盤電路。整個單片機的接口電路:P0用于顯示輸出或LCD1602言號輸入,P1 口用于鍵盤掃 描輸入,P2 口用于LCD1602勺控制信號輸出。為了驅(qū)動系統(tǒng)的各個模塊正常協(xié)調(diào)工作,在軟件方面我設計了四大模塊,分別

8、為顯示、鍵盤、運算、綜合模塊,通過綜合模塊的協(xié)調(diào)來使其它三大模塊正常運行,使計算器能正確運算得出正確結果。第二章硬件設計硬件結構與工作原理圖硬件結構框圖系統(tǒng)的主體部分由輸入、運算、輸出模塊所組成,對應于圖中有,輸入模塊為鍵盤 掃描輸入,輸出模塊為LCD1602a示,運算模塊為單片機。在系統(tǒng)上電后,單片機初始 化,開始運行內(nèi)部程序,在程序運行過程中,通過軟件功能來實現(xiàn)按下鍵盤上特定按鍵 后,執(zhí)行不同的功能,例如加減乘除,并將數(shù)據(jù)輸出至顯示模塊(LCD1602顯示。在運算過程中顯示運算數(shù)據(jù)及符號,運算完成后顯示運算結果。單元電路設計單片機最小系統(tǒng)單片機最小系統(tǒng)就是支持主芯片正常工作的最小電路部分,

9、包括主控芯片、復位電 路和晶振電路。主控芯片選取AT89C52E片,因其具有良好的性能及穩(wěn)定性,價格便宜應用方便。晶振選取,晶振旁電容選取20pF。采用按鍵復位電路,電阻分別選取 100。和10K,電容選取10仙F。以下為單片機最小系統(tǒng)硬件電路原理圖(圖),仿真接線圖(圖)圖 單片機最小系統(tǒng)硬件電路原理圖RP2RESPACK-8+5VC2Tl 22pFC1HI22pFX1CRYST ALC310uFU11918P00293031R1100R210k,XTAL1XTAL2RSTPSEN ALEEAP012P023P034P045P056P067P0781P0.0/AD0P0.1/AD1P0.2/

10、AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A1P2.4/A12P2.5/A13P2.6/A14P2.7/A1538D1 37D2 .36D3 35D434D5 I33D632D7 D039212223242527RW 28EP1.2P3.2/INT0-P1.3P3.3/INT1P1.4P3.4/T0P1.5P3.5/T1P1.6P3.6/WRP1.7P3.7/RDAT89C52P3.0/RXDP3.1/TXDP1.0/T2P1.1/T2EX1011121314151617圖單片機最小系統(tǒng)仿真接線圖

11、鍵盤接口電路計算器所需按鍵有:數(shù)字鍵:1' , ' 2' , ' 3' , ' 4' , ' 5' , ' 6' , ' 7'8' , ' 9' , ' 0'。功能鍵:'+','-','*','/',' = ',' C(清零、小數(shù)點)共 計16個按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連, 四行和四列的8 個公共端分別接,這樣掃描P1 口就可以完成對矩

12、陣鍵盤的掃描,通過對 16個按鍵進 行編碼,從而得到鍵盤的口地址,對比 P1 口的掃描結果和各按鍵的地址,我們就可以 得到是哪個鍵按下,從而完成鍵盤的功能。在Proteus仿真中,我直接使用元件庫所有的 KEYPAD-SMALLCAL,這種鍵盤 直接實現(xiàn)了 4*4鍵盤的功能,方便使用。如下圖所示。在按下其中一個鍵時,其對應的行與列將都會變成低電平, 此時,即可通過判斷P1 口的值來確定輸入的是哪一個按鍵,然后將所取得的按鍵通過軟件來進行接下來的處 理、運算等工作。3PO2PO1POOPO4OP5OP6OP7OP圖4*4矩陣鍵盤LCD1602顯示電路LCD160漪介:如圖所示,1602液晶也叫1

13、602字符型液晶,它是一種專門用來顯示 字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個 5X7或者5X11等點陣字符位組成, 每個點陣字符位都可以顯示一個字符, 每位之間有一個點距的間隔, 每行之間也有間隔, 起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形(用自定義CGRAM顯示效果也不好)。1602LCD®指顯示白內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示 字符和數(shù)字)。1602 采用標準的 16 腳接口,其中:第1引腳:GN師電源地第2引腳:VCCg 5V電源正極第 3 引腳: V0 為液晶顯示器對比度調(diào)整端, 接正電源時對比度最弱, 接地電源

14、時對 比度最高(對比度過高時會 產(chǎn)生“鬼影”,使用時可以通過一個10K 的電位器調(diào)整對比度)。第4引腳:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄 存器。第5弓I腳:RW的讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。第6引腳:E(或EN調(diào)為使能(enable)端,高電平(1)時讀取信息,負跳變時執(zhí)行 指令。第714引腳:D0- D7為8位雙向數(shù)據(jù)端。第1516腳:空腳或背燈電源。第15 引腳背光正極,第 16 引腳背光負極。特性或 5V 工作電壓,對比度可調(diào)內(nèi)含復位電路提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能有80字節(jié)顯示數(shù)據(jù)

15、存儲器DDRAM內(nèi)建有192個5X7點陣的字型的字符發(fā)生器CGROM8個可由用戶自定義的5X7的字符發(fā)生器CGRAM特征應用微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應用系統(tǒng)操作控制注:關于E=H脈沖一一開始時初始化E為0,然后置E為1圖LCD1602硬件原理圖采用LCD1602M示器對計算過程、結果以及提示信息進行顯示,在仿真電路中,由于Proteus中并沒有LCD1602顯示芯片,故采用功能相似的 LM016L進行替代,其中 LM016L的D0D7三個輸入輸出端口接至單片機的口,用來對顯示屏輸出顯示、輸出控 制指令以及獲取狀態(tài)信息。單片機的分別與LM016L的RS R

16、W E端口相連,用來對顯示芯片進行控制。以下 為LCD顯示電路的仿真接線圖(圖)LCD1LM016L圖LCD1602 (LM016D仿真接線圖第三章軟件設計系統(tǒng)軟件結構如圖所示,系統(tǒng)啟動后,執(zhí)行LCM始化程序,然后調(diào)用LCD顯示程序,在屏幕上輸出歡迎信息。接下來調(diào)用鍵盤掃描處理程序,等待按鍵按下,按下任意鍵后執(zhí)行LCD清屏程序,并再次調(diào)用鍵盤掃描處理程序,等待用戶輸入數(shù)據(jù),若用戶按下數(shù)字鍵(09),Y圖 程序流程圖本次設計采用模塊化設計思想,包括主程序和初始化子程序、延時子程序、輸出數(shù)據(jù)子程序、 檢測是否有按鍵按下子程序、 確定按鍵子程序、 清第一行屏與顯示“Welcome”子程序、換算第一個

17、數(shù)子程序、運算子程序、顯示結果子程序等子程序。運行程序后,首先調(diào)用子程序清屏第一行并顯示“Welcome,清屏第二行并顯示“ZCY s Caculator! ”,然后檢測是否有按鍵按下,如果沒有,繼續(xù)檢測,如果按下,則判斷是否是加減乘除鍵被按下,如果是加減乘除被按下,則顯示相應的字符并換算出字符前輸入的數(shù)據(jù)和字符后輸入的數(shù)字, 然后檢測是否有等號按下, 如果有則完成相應的運算并顯示相應的結果,然后檢測是否有清屏鍵按下,如果有則清屏,相應的流程圖如圖所示。對于數(shù)字鍵的程序段進行相應的設計,如果運算鍵(、, * , / )相應標志不為一,則將輸入的數(shù)字送入第一個操作數(shù)緩存區(qū),并且清空所有響應位。否

18、則送入第二個操作數(shù)緩存區(qū)。其次對功能鍵的程序段進行相應的設計。如果功能鍵(、,*, /)第一次被按下,則置相應的標志位為一,并且將運算鍵響應標志位置一,清空第二個操 作數(shù)的緩存區(qū),為輸入操作數(shù)做準備,如果是第二次按下則先調(diào)用運算操作子程序,執(zhí) 行上次按下的運算鍵的運算,置相應的標志位為一,并且將運算鍵響應標志位置一,清 空第二個操作數(shù)的緩存區(qū),為輸入操作數(shù)做準備。程序上的具體實現(xiàn):在單片機上 電后,執(zhí)行兩個函數(shù) LCD_dsp_string(4,0,"Welcome!") 以及 LCD_dsp_string(1,1,"ZCY's Caculator&quo

19、t;)輸出歡迎信息初始化 LCD 然后執(zhí)行 keyscan() 函數(shù)判斷是否有按鍵輸入,若有則讀取按鍵,否則循環(huán)掃描,直到有按鍵按下。在獲取 按鍵后,判斷按鍵是否為數(shù)字,若是,則執(zhí)行 cacul(a)函數(shù),將獲取的數(shù)字保存為數(shù), 然后執(zhí)行LCM個字符顯示函數(shù)LCD_dsp_char(x,y,dat)。若按鍵不是數(shù)字,則判斷是 否為操作符,若是,則執(zhí)行LCD_dsp_char(x,y,dat)顯示操作符,然后將flag標志位置 1,代表第一個操作數(shù)輸入結束。若不是操作符,則判斷是否為'=',若是,則執(zhí)行函數(shù) Caculator(x,y) 函數(shù),計算結果,然后執(zhí)行 LCD_dsp_

20、string(x,y,string) 函數(shù),將 計算結果顯示在屏幕上,然后執(zhí)行 keyscan()函數(shù),等待按下任意鍵,按下任意鍵后, 再次執(zhí)行LCM始化程序。若不是'=',則判斷是否是第一次按下清零鍵,若是,則顯 示小數(shù)點,并再次調(diào)用keyscan()函數(shù),獲取下一個按鍵,若不是第一次按下,則再次 執(zhí)行LCM始化程序。主要功能子程序設計LCD顯示子程序設置LCD顯示位置圖LCD顯示子程序流程圖如圖所示,當主程序調(diào)用了 LCD顯示程序后,首先判斷LCD否處于忙碌狀態(tài),若 是,則等待,若不是,則開始設置顯示位置,然后判斷顯示的是單個字符還是字符串,分別實現(xiàn)對單個字符的輸出以及對字

21、符串的輸出。之所以對單字符和字符串設置不同的 顯示函數(shù),是為了實現(xiàn)程序?qū)纹瑱C資源的最優(yōu)利用,因為單字符只占據(jù)一個字節(jié)的存儲區(qū),而字符串則至少占用兩個字節(jié)。在顯示完成后,返回主程序,繼續(xù)執(zhí)行下一步LCD的顯示程序中主要的部份為LCD顯示位置的設置以及LCD顯示數(shù)據(jù)的輸出。為 此,我編寫了 LCD顯示位置設置函數(shù),以及LCD顯示函數(shù),如下。LCD顯示位置設置函數(shù):1. voidLCD_set_xy(小信息Y 輸出Y誤提iarYP_ unsigned » a+ba=acharW返回按鍵值S Rf h商 9+/*'''LCD!掃H由1卬016L鍵S D ES DV是

22、否檢測到按elcone!Hs CaculatorW0 1 2 3 4 5 6 7REDDDDDDDDLCD1LM016L7D6D5D4D3d2d1DODFEV DDVSSVLCD1LM016LLCD1LM016LLCD1LM016L1.25*352.7=449.875ES w01234567VrReddddddddP03P02A 789 口bVVVP01123P00ONd0l=1+1234RP2RESPACK-8+5VAo D1 2D D3 4 D D5 6D D7D#include<>#include<>#include<>unsigned char n;

23、float idata a,b;xsd=1;/讀寫控制輸入端/讀寫控制端/指令、數(shù)據(jù)選擇端/LCD內(nèi)部忙標志/延時函數(shù)#include<>sbit lcden=P2A7;sbit rw=P2A6;sbit rs=P2A5;sbit busy=P0A7;void delay(unsigned int m)unsigned int n;for(n=0;n<=m;n+);void check()/ 判斷 LCDl!否忙碌doP0=0xff;rs=0;rw=1;lcden=0;delay(100);lcden=1;while(busy=1);/ 當 busy=1,即 LCD忙時,等待

24、void write_com(unsigned char com) / 寫顯示命令P0=com;rs=0;rw=0;lcden=0;check();lcden=1;void write_data(unsigned char date) /P0=date;rs=1;rw=0;lcden=0;check();lcden=1;void init()write_com(0x38);write_com(0x0c);write_com(0x06);寫顯示數(shù)據(jù)write_com(0x80);write_com(0x01);void LCD_set_xy( unsigned char x, unsigned

25、char y )/ 初始化 LCD/16x2 行顯示, 5x7 點陣, 8 位數(shù)據(jù)接口/ 開顯示,光標不顯示、不閃爍/ 光標自增,畫面不動/ 選擇第一行/ 清屏設置LCD顯示的位置unsigned char address;if (y = 0)/y=0 為第一行address = 0x80 + x;/x=0 為一行的第一個else/ 第二行address =0xc0+ x;write_com(address);/ 設置數(shù)據(jù)指針位置void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat)/ 單個字符顯示函數(shù)LCD_set_x

26、y( x, y );/ 設置顯示位置write_data(dat);/ 寫入待顯示數(shù)據(jù)void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s)/ 字符串顯示函數(shù)LCD_set_xy( X, Y );while (*s)/ 當字符串未到達結尾( '0' ) 時, 循環(huán)輸出單個字符write_data(*s);s +;/指向下一個字符3#include<>/ 外部延時函數(shù)聲明/ 外部變量聲明extern void delay(int ms);extern unsigned char n;void key_s

溫馨提示

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

評論

0/150

提交評論