




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、東北大學課程設計報告基于單片機實現的四則運算計算器姓 名學 號:班 級:專 業 名 稱:測控技術與儀器 指 導 教 師: 東 北 大 學2016年1月課程設計(論文)任務書課程設計(論文)題目:基于單片機實現的四則運算計算器基本內容和設計要求:1、主機的矩陣鍵盤輸入數和運算符號,從機顯示運算結果。2、主從單片機串行通信系統,并在LCD上顯示運算內容及結果。3、計算結果超過十位數字則顯示錯誤。4、運算除法時,結果只取整數,不是四舍五入。5、有清零功能。3東北大學課程設計報告目錄目錄課程設計(論文)任務書ii摘要1第1章 緒論21.1計算器簡介21.2設計主要內容2第2章 系統硬件設計42.1硬件
2、組成42.2輸入模塊42.3輸出模塊52.4運算模塊5第3章 系統軟件設計73.1 主程序73.1.1主程序框圖及初始化73.1.2LCD程序框圖及初始化83.1.3鍵盤程序框圖及初始化93.1.4運算程序框圖10第4章 調試測試與實驗分析114.1 計算器調試11參考文獻12心得體會13附錄 硬件原理圖及PCB圖14附錄 程序清單15附錄 實物照片28 東北大學課程設計報告第1章 緒論摘要單片機的出現是計算機制造技術高速發展的產物,它是嵌入式控制系統的核心,如今,它已廣泛的應用到我們生活的各個領域,電子、科技、通信、汽車、工業等。本設計是基于89C52RC單片機來進行的四則運算計算器系統設計
3、,可以完成計算器的鍵盤輸入,進行加、減、乘、除的基本四則運算,并在LCD1602液晶顯示屏上顯示相應的結果。本電路采用89C52RC單片機為主要控制電路,利用4*4矩陣鍵盤作為計算器以及運算符的輸入。顯示采用字符LCD靜態顯示。軟件用C語言編程,并用開發板進行演示。關鍵詞:計算器,89C52RC單片機,LCD,矩陣鍵盤第1章 緒論1.1計算器簡介計算器是現代人們發明的可以進行數字運算的電子機器。現代的電子計算器能進行數學運算的手持電子機器,除顯示計算結果外,還常有溢出指示、錯誤指示等,擁有集成電路芯片,但結構比電腦簡單得多,可以說是第一代的電子計算機(電腦),且功能也較弱,但較為方便與廉價,可
4、廣泛運用于商業交易和學習計算中,是必備的學習和辦公用品之一1。1.2設計主要內容1.2.1設計概述 本系統使用89C52RC單片機作為主控芯片,通過矩陣鍵盤輸入,進行運算,并在LCD上顯示相應的數字和結果,主要功能如下:(1) LCD第一行顯示運算符號之前的數字,第二行顯示運算符號和運算符號之后的數字,按下等號鍵得到結果。(2) 在任何時候按下清零鍵則清零。(3) 當運算完第一次完整的計算之后,可以在不按任何鍵的情況下,進行新的一輪計算。1.2.2設計思路 本系統采用MCS-52系列單片機作為主控機,通過拓展必要的外圍電路,實現對計算器的設計,具體設計如下:(1) 因為想顯示運算符號,用數碼管
5、不能很好的顯示出來,所以采用LCD1602液晶顯示器作為顯示模塊。(2) 計算器一般包含數字鍵(09),符號鍵(+,*,/),等號鍵,清零鍵。故采用4*4矩陣鍵盤結合鍵盤掃描技術來達到要求。(3) 開機后1602顯示0,等待按鍵輸入,當鍵入數字,在LCD上顯示出來,計算器內部把數據儲存起來,并等待下一按鍵輸入,當鍵入運算符號時,計算器內部步數加1,然后等待再次輸入數值,按等于號就在LCD上顯示結果。(4) 清零功能:在運算的任何時候鍵入清零鍵,則把數據清零,等待下一次運算。1.2.3電路圖設計 根據給的開發板的原理圖在protel中設計并連接電路圖,分析電路圖的正確性,輸出PCB圖。1.2.4
6、軟件的編程利用C語言編程,分模塊測試板子的好壞,然后編寫程序,在keil中進行調試。-31-東北大學課程設計報告第2章 系統硬件設計第2章 系統硬件設計2.1硬件組成硬件以89C52單片機為核心,外部擴展用LCD實現顯示功能,用4*4矩陣鍵盤實現輸入功能。基本硬件結構圖如圖2.1所示。圖2.1 四則運算計算器基本硬件結構圖2.2輸入模塊 計算器輸入數字和其他功能按鍵要用到很多按鍵,如果采用獨立按鍵的方式,在這種情況下,編程會簡單,但I/0口不夠用,所以采用矩陣鍵盤形式,本次采用4*4矩陣鍵盤的形式,采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤。在行線和列線的每個交叉點上設置一個按
7、鍵,這樣鍵盤上按鍵的個數就為4×4個。圖2-2輸入模塊電路圖矩陣鍵盤功能:預設16個鍵位,分別是09數字鍵,加減乘除,等于和清零功能。單片機不停掃描鍵盤當發現有按鍵按下時,若為數字鍵則在lcd上顯示,功能鍵則實現對應的功能。例如,按下5時,lcd上顯示數字5,按下加號,即實現加法功能也在lcd上顯示加號。2.3輸出模塊采用LCD1602來顯示字符和數字,1602能夠同事顯示16*02即32個字符。1602液晶模塊內部的字符發生儲存器已經儲存了160個不同的點陣字符圖形,這些字符有:阿拉伯數字,英文字母大小寫,常用的符號等,每一個字符有一個固定的代碼。在對液晶模塊的初始化中要先設置其顯
8、示模式,在液晶模塊顯示字符時光標是自動右移的。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態。圖2-3輸出模塊電路圖lcd1602能夠同時顯示16*2個字符,用它接收單片機送來的信號,然后在上邊顯示相應的數字或符號,實現顯示功能。2.4運算模塊單片機是靠程序運行的,并且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能,通過上網查找運算代碼作參考,然后對單片機進行程序編寫,從而實現運算功能。東北大學課程設計報告第3章 系統軟件設計第3章 系統軟件設計3.1 主程序3.1.1主程序框圖及初始化主程序框圖如圖3.1所示圖3.1 主程序框圖主程序說明:接通電源后,先讓lcd顯示屏初始
9、化顯示0,然后通過鍵盤掃描看是否有鍵按下,若有鍵按下,則分析按下鍵的性能,若為數字鍵或清零鍵則通過lcd顯示,若為功能鍵,實現功能然后lcd顯示。3.1.2LCD程序框圖及初始化圖3.2 LCD程序框圖Lcd初始化顯示0,開始后判斷是否有鍵按下,有鍵按下判斷是否是數字鍵,若為數字鍵則顯示鍵值,若不是,則為功能鍵,再判斷功能鍵是否是等號,若為等號,則顯示計算結果,若不是實現功能,等待輸入。3.1.3鍵盤程序框圖及初始化圖3.3 鍵盤程序框圖開始后,掃描鍵盤,若沒有鍵按下則繼續掃描,有鍵按下,若為等號鍵則顯示結果然后結束,若不是看是否是計算符,不是計算符則讀入內存然后lcd顯示,若是計算符讀進內存
10、,等待輸入。3.1.4運算程序框圖圖3.4 運算程序框圖運算程序:先判斷運算符,若為加或乘則要判斷運算結果是否溢出,若溢出,則lcd顯示-1表示運算錯誤,若為除號,判斷除數是否為0,若為0,則lcd顯示-1表示運算錯誤,其他情況則可直接送至lcd顯示。東北大學課程設計報告第4章調試測試與實驗分析第4章 調試測試與實驗分析4.1 計算器調試(1)問題:將已編好的程序用燒錄進開發板后,發現開發板上LCD顯示屏只發光但是沒有任何數字。(2)分析:這種現象可能存在兩個問題:1)LCD顯示屏有問題2)程序存在錯誤(3)解決方案:重新檢查開發板元器件,將開發版資料已給的1602液晶顯示程序燒錄開發板中,發
11、現LCD仍然只發光不顯示任何東西,初步判定是LCD未調節好或者故障,經檢測是LCD顯示字符的亮度未調節合適,拿螺絲刀調節,LCD就能顯示字符。(4)再次檢測:再次將已編好的程序燒錄進開發板,打開開發板電源,LCD上先顯示0字符。矩陣鍵盤輸入3*4進行計算,發現顯示屏上第一行顯示3,第二行顯示4和*,然后在鍵盤上輸入=,顯示屏上得出結果12。東北大學課程設計報告參考文獻參考文獻1 李小堅 郝曉麗.protel DXP電路設計與制版實用教程J.人民郵電出版社, 2015,10.2 張秋菊 劉繼超. 單片機應用實訓教程J. 化學工業出版社, 2015,10.東北大學課程設計報告心得體會心得體會周二早
12、上開始選課題的時候,感覺我們的能力不是很強,所以想選一個簡單一點的題目,然后就選了一個四則運算計算器,這個題目硬件上的確不難,但是軟件上卻令我們很困擾,很頭疼。周二下午寫計劃的時候,看到被老師打回來這么多份計劃,我們就想自己好好的寫一寫,可是還是改了兩遍,也用了一晚上的時間,但是這個計劃卻對我們之后幾天的工作有一個很好的指導。第二天學習protel,老師沒有怎么講,我們一開始也不會用,只能是哪里不會哪里百度,但是有的元件還是沒有找到,周四早上才知道原來資料里有單片機上的元件庫,于是把那個元件庫導入,畫圖便容易多了。我們硬件沒有什么東西,于是第三天下午便開始編程了,可是我們對著程序看了一下午也沒
13、有什么頭緒,反而整得自己要發瘋了一樣,對課設也失去了信心。后來老師來檢查的時候告訴我們要一步一步的調試,不可能一口吃個大胖子,我們就把程序分開來調試,通過從圖書館借來的資料一步一步的來,程序中不懂的地方便查書或者通過網絡解決。這幾天的確是蠻痛苦的,天天早晨起來到教室里,一坐一天,感覺比上課累多了,可也有了自己的收獲,沒有老師指導,需要的東西基本上要自己來查找,也鍛煉了自己的能力。實物的焊接也鍛煉了我們的動手能力,課程設計對于我們的益處是很大的。也希望自己通過知識與實際的結合不斷的提高自己。東北大學課程設計報告附錄 程序清單附錄 硬件原理圖及PCB圖附錄 程序清單LCD1602#include
14、<reg52.h>#define LCD1602_DB P0sbit LCD1602_RS = P10;sbit LCD1602_RW = P11;sbit LCD1602_E = P12;/* 等待液晶準備好 */void LcdWaitReady() unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do LCD1602_E = 1; sta = LCD1602_DB; /讀取狀態字 LCD1602_E = 0; while (sta & 0x80); /bit7等于1表示液晶正忙
15、,重復檢測直到其等于0為止/* 向LCD1602液晶寫入一字節命令,cmd-待寫入命令值 */void LcdWriteCmd(unsigned char cmd) LcdWaitReady(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DB = cmd; LCD1602_E = 1; LCD1602_E = 0;/* 向LCD1602液晶寫入一字節數據,dat-待寫入數據值 */void LcdWriteDat(unsigned char dat) LcdWaitReady(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1
16、602_DB = dat; LCD1602_E = 1; LCD1602_E = 0;/* 設置顯示RAM起始地址,亦即光標位置,(x,y)-對應屏幕上的字符坐標 */void LcdSetCursor(unsigned char x, unsigned char y) unsigned char addr; if (y = 0) /由輸入的屏幕坐標計算顯示RAM的地址 addr = 0x00 + x; /第一行字符地址從0x00起始 else addr = 0x40 + x; /第二行字符地址從0x40起始 LcdWriteCmd(addr | 0x80); /設置RAM地址/* 在液晶上顯
17、示字符串,(x,y)-對應屏幕上的起始坐標,str-字符串指針 */void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str) LcdSetCursor(x, y); /設置起始地址 while (*str != '0') /連續寫入字符串數據,直到檢測到結束符 LcdWriteDat(*str+); /* 區域清除,清除從(x,y)坐標起始的len個字符位 */void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len
18、) LcdSetCursor(x, y); /設置起始地址 while (len-) /連續寫入空格 LcdWriteDat(' '); /* 整屏清除 */void LcdFullClear() LcdWriteCmd(0x01);/* 初始化1602液晶 */void InitLcd1602() LcdWriteCmd(0x38); /16*2顯示,5*7點陣,8位數據接口 LcdWriteCmd(0x0C); /顯示器開,光標關閉 LcdWriteCmd(0x06); /文字不動,地址自動+1 LcdWriteCmd(0x01); /清屏矩陣鍵盤#include <
19、reg52.h>sbit KEY_IN_1 = P24;sbit KEY_IN_2 = P25;sbit KEY_IN_3 = P26;sbit KEY_IN_4 = P27;sbit KEY_OUT_1 = P23;sbit KEY_OUT_2 = P22;sbit KEY_OUT_3 = P21;sbit KEY_OUT_4 = P20;unsigned char code KeyCodeMap44 = /矩陣按鍵編號到標準鍵盤鍵碼的映射表 '1', '2', '3', 0x26 , /數字鍵1、數字鍵2、數字鍵3、向上鍵 '4
20、', '5', '6', 0x25 , /數字鍵4、數字鍵5、數字鍵6、向左鍵 '7', '8', '9', 0x28 , /數字鍵7、數字鍵8、數字鍵9、向下鍵 '0', 0x1B, 0x0D, 0x27 /數字鍵0、ESC鍵、 回車鍵、 向右鍵;unsigned char pdata KeySta44 = /全部矩陣按鍵的當前狀態 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1;extern void Reset();extern void
21、GetResult();extern void NumKeyAction(unsigned char n);extern void OprtKeyAction(unsigned char type);extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);void KeyAction(unsigned char keycode)if(keycode >= '0') && (keycode <= '9')NumKeyAction(keyco
22、de - '0');else if(keycode = 0x26)OprtKeyAction(0);else if(keycode = 0x28)OprtKeyAction(1);else if(keycode = 0x25)OprtKeyAction(2);else if(keycode = 0x27)OprtKeyAction(3);else if(keycode = 0x0D)GetResult();else if(keycode = 0x1B)Reset();LcdShowStr(15, 1, "0");/* 按鍵驅動函數,檢測按鍵動作,調度相應動作
23、函數,需在主循環中調用 */void KeyDriver() unsigned char i, j; static unsigned char pdata backup44 = /按鍵值備份,保存前一次的值 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; for (i=0; i<4; i+) /循環檢測4*4的矩陣按鍵 for (j=0; j<4; j+) if (backupij != KeyStaij) /檢測按鍵動作 if (backupij != 0) /按鍵按下時執行動作 KeyAction(KeyCodeMapij);
24、/調用按鍵動作函數 backupij = KeyStaij; /刷新前一次的備份值 /* 按鍵掃描函數,需在定時中斷中調用,推薦調用間隔1ms */void KeyScan() unsigned char i; static unsigned char keyout = 0; /矩陣按鍵掃描輸出索引 static unsigned char keybuf44 = /矩陣按鍵掃描緩沖區 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ; /將一行的4個按鍵
25、值移入緩沖區 keybufkeyout0 = (keybufkeyout0 << 1) | KEY_IN_1; keybufkeyout1 = (keybufkeyout1 << 1) | KEY_IN_2; keybufkeyout2 = (keybufkeyout2 << 1) | KEY_IN_3; keybufkeyout3 = (keybufkeyout3 << 1) | KEY_IN_4; /消抖后更新按鍵狀態 for (i=0; i<4; i+) /每行4個按鍵,所以循環4次 if (keybufkeyouti & 0
26、x0F) = 0x00) /連續4次掃描值為0,即4*4ms內都是按下狀態時,可認為按鍵已穩定的按下 KeyStakeyouti = 0; else if (keybufkeyouti & 0x0F) = 0x0F) /連續4次掃描值為1,即4*4ms內都是彈起狀態時,可認為按鍵已穩定的彈起 KeyStakeyouti = 1; /執行下一次的掃描輸出 keyout+; /輸出索引遞增 keyout &= 0x03; /索引值加到4即歸零 switch (keyout) /根據索引,釋放當前輸出引腳,拉低下次的輸出引腳 case 0: KEY_OUT_4 = 1; KEY_OU
27、T_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break; 主函數#include <reg52.h>unsigned char step = 0;unsigned char oprt = 0;signed long num1 = 0;signed long num2 = 0;signed long result
28、 = 0;unsigned char T0RH = 0;unsigned char T0RL = 0;void ConfigTimer0(unsigned int ms);extern void KeyScan();extern void KeyDriver();extern void InitLcd1602();extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);extern void LcdFullClear();extern void LcdAreaClear(unsigned char
29、 x, unsigned char y, unsigned char len);void main() EA = 1; /開總中斷 ConfigTimer0(1); /配置T0定時1msInitLcd1602(); /初始化液晶 LcdShowStr(15, 1, "0"); /初始顯示一個數字0 while (1) KeyDriver(); /調用按鍵驅動 unsigned char LongToString(unsigned char *str, signed long dat)signed char i = 0;unsigned char len = 0;unsign
30、ed char buf12;if(dat < 0)dat = -dat;*str+ = '-'len+;dobufi+ = dat % 10;dat /= 10;while(dat > 0);len += i;while(i- > 0)*str+ = bufi + '0'*str = '0'return len;void ShowOprt(unsigned char y, unsigned char type)switch(type)case 0: LcdShowStr(0, y, "+"); break;c
31、ase 1:LcdShowStr(0, y, "-"); break;case 2:LcdShowStr(0, y, "*"); break;case 3:LcdShowStr(0, y, "/"); break;default: break;void Reset()num1 = 0;num2 = 0;step = 0;LcdFullClear();void NumKeyAction(unsigned char n)unsigned char len = 0;unsigned char str12;if(step > 1)Res
32、et();if(step = 0)num1 = num1*10 + n;len = LongToString(str, num1);LcdShowStr(16 - len, 1, str);else num2 = num2*10 + n;len = LongToString(str, num2);LcdShowStr(16 - len, 1, str);void OprtKeyAction(unsigned char type) unsigned char len;unsigned char str12;if(step = 0)len = LongToString(str, num1);LcdAreaClear(0, 0, 16-len);LcdShowStr(16-len, 0, str);ShowOprt(1, type); LcdAre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業級能效管理與綠色辦公的推廣策略
- 宜春幼兒師范高等專科學校《復變函數與積分變換1》2023-2024學年第二學期期末試卷
- 廣東食品藥品職業學院《足球教學與訓練Ⅰ》2023-2024學年第二學期期末試卷
- 開封大學《人文地理與城鄉規劃專業英語》2023-2024學年第二學期期末試卷
- 小兒分泌性中耳炎治療講課件
- 四川文化傳媒職業學院《助產技能學(Ⅰ)》2023-2024學年第二學期期末試卷
- 華中農業大學《市場調查與預測》2023-2024學年第二學期期末試卷
- 互動教學新風尚教育技術平臺的應用與體驗
- 德州科技職業學院《美術專業寫生》2023-2024學年第二學期期末試卷
- 長沙南方職業學院《企業社會責任與社會創新》2023-2024學年第二學期期末試卷
- 光伏發電論文
- 輥壓機培訓ppt課件
- LDRA Testbed單元測試操作步驟
- 酸堿標準溶液的配制與濃度的標定
- 江蘇省常州市2024屆高一數學下學期期末質量調研試題(含解析)
- 有機光電材料.ppt課件
- 縱斷面(豎曲線)設計高程自動計算
- (完整版)軟件項目章程模版
- 冀教版英語小升初模擬試卷
- 豐臺區五年級下期末試題
- 財政部金融企業不良資產批量轉讓管理辦法(財金[2012]6號)
評論
0/150
提交評論