




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、專業:電子信息工程1111班指導老師: 姓 名: 學號:摘 要近年來隨著科技的飛速發展,單片機的應用正在不斷深入,同時帶動傳統控制檢測技術日益更新。在實時檢測和自動控制的單片機應用系統中,單片機往往作為一個核心部件來使用,但僅單片機方面的知識是不夠的,還應根據具體硬件結構、軟硬件結合,來加以完善。計算機在人們的日常生活中是比較常見的電子產品之一。可是它還在發展之中,以后必將出現功能更加強大的計算機,基于這樣的理念,本次設計是用AT89S51單片機、LCD顯示器、控制按鍵為元件來設計的計算器。利用此設計熟悉單片機微控制器及C語言編程,對其片資源及各個I/O端口的功能和基本用途的了解。掌握Micr
2、osoft Visual C+ 6.0應用程序開發環境,常用的LCD顯示器的使用方法和一般鍵盤的使用方法。關鍵字:AT89C51 LCD 控制按鍵 第一章 簡介1.1 課題簡介當今社會,隨著人們物質生活的不斷提高,電子產品已經走進了家家戶戶,無論是生活或學習,還是娛樂和消遣幾乎樣樣都離不開電子產品,大型復雜的計算能力是人腦所不能勝任的,而且比較容易出錯。計算器作為一種快速通用的計算工具方便了用戶的使用。計算器可謂是我們最親密的電子伙伴之一。本設計著重在于分析計算器軟件和開發過程中的環節和步驟,并從實踐經驗出發對計算器設計做了詳細的分析和研究。單片機由于其微小的體積和極低的成本,廣泛的應用于家用
3、電器、工業控制等領域中。在工業生產中。單片微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片微型計算機簡稱單片機,特別適用于控制領域,故又稱為微控制器。本系統就是充分利用了8051芯片的I/O引腳。系統以采用MCS-51系列單片機Intel8051為中心器件來設計計算器控制器,實現了能根據實際輸入值顯示并存儲的功能,計算程序則是參照教材。至于位數和功能,如果有需要可以通過設計擴充原系統來實現 。1.2 設計目的通過本次課題設計,應用單片機應用基礎、計算機應用基礎等所學相關知識及查閱資料,完成簡易計算器的設計,以達到理論與實踐更好的結合、進一步提高綜合運用所學知識和設計的能力的目的
4、。通過本次設計的訓練,可以使我在基本思路和基本方法上對基于MCS-51單片機的嵌入式系統設計有一個比較感性的認識,并具備一定程度的設計能力。第二章 硬件系統設計硬件系統是指構成微機系統的實體和裝置,通常由運算器、控制器、存儲器、輸入接口電路和輸入設備、輸出接口電路和輸出設備等組成。單片機實質上是一個硬件的芯片,在實際應用中,通常很難直接和被控對象進行電氣連接,必須外加各種擴展接口電路、外部設備、被控對象等硬件和軟件,才能構成一個單片機應用系統。本設計選用以AT89S51單片機為主控單元。顯示部分:采用LCD靜態顯示。按鍵部分,采用4*4鍵盤。2.1 鍵盤接口電路計算機輸入數字和其他功能按鍵時要
5、用到很多按鍵,在這種情況下,編程會很簡單,但是會占用大量的I/O口資源,因此在很多情況下都不采用這樣的方式,而是采用矩陣鍵盤的方式。矩陣鍵盤采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤,在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的數量就為4*4個。這樣行列式鍵盤結構能有效的提高單片機系統中I/O口的利用率。計算器的鍵盤布局如圖3.2所示:一般有16個鍵組成,在單片機中正好有一個P端口實現16個按鍵功能,這種形式在單片機系統中最常用。圖3.2 矩陣鍵盤內部電路2.2 LCD顯示模塊本設計采用LCD液晶顯示器來顯示輸出數據。LCD的特性有:1、+5V電壓,對比可調度;2、內含
6、復位電路;3、提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能;4、有80字節顯示數據存儲器DDRAM;5、內建有160個5X7點陣的字型的字符發生器CGROM;6、8個可由用戶自定義的5X7的字符發生器CGRAM。本設計通過D0-D7引腳向LCD寫指令字或寫數據以使LCD實現不同的功能或顯示相應的數據。其接口電路如圖3.3所示。 圖3.3 LCD接口電路LCD的引腳說明如表3.1所示: 表3.1 LCD的引腳說明符號引腳說明符號引腳說明VSS電源地DB4Data I/OVDD電源正極(+5V)DB5Data I/OV0液晶顯示偏壓輸入DB6Data I/ORS數據/命令選擇
7、端(H/L)DB7Data I/OR/W讀寫控制信號(H/L)CS1片選IC1信號E使能信號CS2片選IC2信號DB0Data I/ORST復位端(H:正常工作,L:復位)DB1Data I/OVEE負電源輸出(-10V)DB2Data I/OBLA背光源正極(+4.2)DB3Data I/OBLK背光源正極第三章 軟件設計3.1 匯編語言和C語言的特點及選擇本設計是硬件電路和軟件編程相結合的設計方案,選擇合適的編程語言是一個重要的環節。在單片機的應用系統程序設計時,常用的是匯編語言和C語言。機硬件,程序可讀性和可移植性比較差。而C語言雖然執行效率沒有匯編語言高,但語言簡潔,使用方便,靈活,運
8、算豐富,表達化類型多樣化,數據結構類型豐富,具有結構化的控制語句,程序設計自由度大,有很好的可重用性,可移植性等特點。由于現在單片機的發展已經達到了很高的水平,內部的各種資源相當的豐富,CPU的處理速度非常的快。用C語言來控制單片機無疑是一個理想的選擇。所以在本設計中采用C語言編寫軟件程序。主程序的設計詳見附錄三。 3.2 鍵掃程序設計鍵掃程序的過程為:開始時,先判斷是否有鍵閉合,無鍵閉合時,返回繼續判斷,有鍵閉合時,先去抖動,然后確定是否有鍵按下,若無鍵按下,則返回繼續判斷是否有鍵閉合,若有鍵按下,則判斷鍵號,然后釋放,若釋放按鍵完畢,則返回,若沒有釋放按鍵,則返回繼續釋放。3.3 算術運算
9、程序設計算術運算程序的過程為:先判斷輸入的運算符是+、-、*、/ 中的哪一個,若是+或-,則要判斷運算結果是否溢出,溢出則顯示錯誤信息,沒溢出就顯示運算結果,若是/,則要先判斷除數是否為零,為零就顯示錯誤信息,不為零則顯示運算結果,若是-,則直接顯示運算結果。3.4 顯示程序設計顯示程序的過程為:顯示開始時,先進行LCD的初始化,判斷是否顯示漢字或ACSII碼或圖形,若不顯示,則返回,若顯示的是漢字或ACSII碼,則進行相應功能的設置,然后送地址和數據,再判斷是否顯示完,顯示完則返回,沒有顯示完則繼續送地址,若顯示的是圖形,則先進行相應功能的設置,再送行地址和列地址,然后送數據,最后判斷是否顯
10、示完,顯示完則返回,沒有顯示完則繼續送行地址和列地址。第四章 系統調試與存在的問題4.1 硬件調試常見故障:1、邏輯錯誤:它是由設計錯誤或加工過程中的工藝性錯誤所造成的。這類錯誤包括錯線、開路、短路等。2、元器件失效:有兩方面的原因:一是器件本身已損壞或性能不符合要求;二是組裝錯誤造成元件失效,如電解電容、集成電路安裝方向錯誤等。3、可靠性差:因其可靠性差的原因很多,如金屬化孔、接插件接觸不良會造成系統時好時壞,經不起振動;走線和布局不合理也會引起系統可靠性差。4、電源故障:若樣機由電源故障,則加電后很容易造成器件損壞。電源故障包括電壓值不符合設計要求,電源引線和插座不對,功率不足,負載能力差
11、等。調試方法:包括多級調試和聯機調試。在調試過程中要針對可能出現的故障認真分析,直至檢查出原因并排除。本次硬件調試過程中,對所出現的問題進行了認真的分析和改正,最后能夠很好的達到設計要求的效果。4.2 軟件調試軟件調試一般分為以下四個階段:1、 編寫程序并查錯;2、在C語言的編譯系統中編譯源程序3、對程序進行編譯連接,并及時發現程序中存在的錯誤;4、改正錯誤。在本次調試中出現的問題有:1、在程序中有的函數名未定義;2、在抄錄程序時,少錄入一些字符,如:“;”、“”、“-”等符號,而出現錯誤;3、有一些函數名錄入時少寫一個字母或順序顛倒;4、沒有注意函數名的調用及定義;5、芯片引腳定義出錯而導致
12、沒有實驗現象。在軟件調試過程中,對出現的錯誤進行了認真的分析和修改,多次調試成功后,能夠很好的達到既定的設計效果。總 結我的題目是簡易計算器的設計,對于我們這些實踐中的新手來說,這是一次考驗。怎樣才能找到課堂所學與實際應用的最佳結合點?怎樣讓自己的業余更接近專業?怎樣讓自己的計劃更具有序性,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設計我學到很多很多的東西,學會了怎么樣去制定計劃,怎么樣去實現這個計劃,并掌握了在執行過程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學過的知識,而且學到了很多在書本上沒有學到過的知識,掌握了一種系統的研究方法,可以進行一些簡單的編程。通過這次課程設計
13、使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。同時在設計的過程中發現了自己的不足之處,例如對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,對C語言掌握得不夠好等。在這里也真誠地對所有關心我、幫助我、鼓勵我的老師、同學、朋友道聲:“謝謝!”附 錄附錄一:計算器硬件連線圖附錄二:源程序Main.c /*- 名稱:液晶顯示計算器,時間,溫度 編寫:guoqing 日期:2013.10 內容:計算器模塊:整數之間運算,沒有小數所有除法得出的結果不正確,有負號運算,
14、不能作連續運算 時間模塊,溫度模塊-*/#include<reg52.h> /包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#include<stdio.h>#include"display.h"#include"delay.h"#include"keyboard.h"#include"ds18b20.h"#include"1302.h"bit ReadTempFlag;/定義讀溫度標志bit ReadTimeFlag;/定義讀時間標志bit Readco
15、mFlag;/定義讀計算器標志unsigned int TempData8; /存儲顯示時間值的全局變量void Init_Timer0(void);/定時器初始化/*- 主程序-*/void KeyScan1(void); static int fun = 3 ; sbit KEY=P33; sbit KEY1=P34; sbit KEY2=P35; sbit KEY3=P36; sbit KEY4=P37;void main (void) int temp1;float temperature;char displaytemp12;/定義顯示溫度區域臨時存儲數組char displayti
16、me8;/計算器模塊數據unsigned char num,i,j=0,sign; unsigned char temp7,temp23; /最大輸入8個 bit firstflag; int a=0,b=0,c=0; unsigned char s;LCD_Init(); /初始化液晶DelayMs(20); /延時有助于穩定LCD_Clear(); /清屏Init_Timer0();Init_DS18B20();Ds1302_Init();/UART_Init();Lcd_User_Chr(); /寫入自定義字符while (1) /主循環 KeyScan1();if(fun = 5) f
17、un = 1 ; if(fun =1) LCD_Write_String(1,0,"welcome to you"); LCD_Write_String(5,1,"*o*"); / LCD_Clear(); /讀入溫度 if(fun=2) LCD_Write_Char(14,1,0x01);/寫入溫度右上角點 LCD_Write_Char(15,1,'C'); /寫入字符CReadTempFlag=1;if(ReadTempFlag=1) ReadTempFlag=0; temp1=ReadTemperature(); temperatu
18、re=(float)temp1*0.0625; sprintf(displaytemp,"Temp is %5.3f",temperature);/打印溫度值 LCD_Write_String(2,0,"hello world"); LCD_Write_String(0,1,displaytemp);/顯示第二行 /讀入時間 if(fun=3) if(!KEY1) /如果檢測到低電平,說明按鍵按下 DelayMs(10); /延時去抖,一般10-20ms if(!KEY1) /再次確認按鍵是否按下,沒有按下則退出 while(!KEY1);/如果確認按下
19、按鍵等待按鍵釋放,沒有釋放則一直等待 time_buf14+;/正常時間 小時加1 if( time_buf14=24) time_buf14=0; Ds1302_Write_Time(); LCD_Clear(); if(!KEY2) /如果檢測到低電平,說明按鍵按下 DelayMs(10); /延時去抖,一般10-20ms if(!KEY2) /再次確認按鍵是否按下,沒有按下則退出 while(!KEY2);/如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待 time_buf14-;if(time_buf14=255)time_buf14=23; Ds1302_Write_Time();
20、/正常時間 小時減1 LCD_Clear(); if(!KEY3) /如果檢測到低電平,說明按鍵按下 DelayMs(10); /延時去抖,一般10-20ms if(!KEY3) /再次確認按鍵是否按下,沒有按下則退出 while(!KEY3);/如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待 time_buf15+;if(time_buf15=60)time_buf15=0; Ds1302_Write_Time();break;/分加1 LCD_Clear(); if(!KEY4) /如果檢測到低電平,說明按鍵按下 DelayMs(10); /延時去抖,一般10-20ms if(!KEY4
21、) /再次確認按鍵是否按下,沒有按下則退出 while(!KEY4);/如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待 time_buf15-;if(time_buf15=60)time_buf15=0; Ds1302_Write_Time();break;/減1 LCD_Clear(); ReadTimeFlag=1; if(ReadTimeFlag=1) ReadTimeFlag=0; Ds1302_Read_Time(); TempData0=time_buf14/10; TempData1=time_buf14%10; TempData2='-' /加入"-
22、" TempData3= time_buf15/10; TempData4=time_buf15%10; TempData5='-' /加入"-" TempData6= time_buf16/10; TempData7=time_buf16%10; displaytime0= TempData0+'0' ; /將數字轉換成字符 displaytime1= TempData1+'0' ; displaytime3= TempData3+'0' ; displaytime4= TempData4+'
23、;0' ; displaytime6= TempData6+'0' ; displaytime7= TempData7+'0' ; LCD_Write_Char(3,0,TempData0); LCD_Write_Char(3,1,displaytime0);/打印到屏幕 LCD_Write_Char(4,1,displaytime1); LCD_Write_Char(5,1,TempData2); LCD_Write_Char(6,1,displaytime3); LCD_Write_Char(7,1,displaytime4); LCD_Write_
24、Char(8,1,TempData5); LCD_Write_Char(9,1,displaytime6); LCD_Write_Char(10,1,displaytime7); LCD_Write_String(0,0,"now time is"); if(fun=4) LCD_Write_String(1,0,"Input:"); LCD_Write_String(0,1,"Output:"); num=KeyPro(); /掃描鍵盤 if(num!=0xff) /如果掃描是按鍵有效值則進行處理 if('+'=nu
25、m) | ('-'=num) | ('x'=num)| ('/'=num) | ('='=num)/輸入數字最大值8,輸入符號表示輸入結束 / i=0; /計數器復位 if('+'=num) LCD_Write_Char(i+7,0,num); if('-'=num) LCD_Write_Char(i+7,0,num); if('x'=num) LCD_Write_Char(i+7,0,num); if('/'=num) LCD_Write_Char(i+7,0,nu
26、m); if('='=num) LCD_Write_Char(i+7,0,num); i+; j=0; if(firstflag=0) /如果是輸入的第一個數據,賦值給a,并把標志位置1,到下一個數據輸入時可以跳轉賦值給b sscanf(temp2,"%d",&a);/從一個字符串輸入到變量 firstflag=1; c=a; else sscanf(temp2,"%d",&b); for(s=0;s<3;s+) /賦值完成后把緩沖區清零,防止下次輸入影響結果 temp2s=0; for(s=0;s<12;s+
27、) /賦值完成后把緩沖區清零,防止下次輸入影響結果 temps=0; / if(num!='=') /判斷當前符號位并做相應處理 sign=num; /如果不是等號記下標志位 else firstflag=0; /檢測到輸入=號,判斷上次讀入的符合 switch(sign) case '+':a=c+b; break;case '-':a=c-b;break;case 'x':a=c*b;break;case '/':a=c/b;break;default:break; sprintf(temp2,"%d&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 IEC 63522-32:2025 EN-FR Electrical relays - Tests and measurements - Part 32: Acoustic noise
- 2025年藥劑師執業資格考試試卷及答案
- 2025年網絡營銷師考試卷及答案
- 2025年地理信息系統應用與開發知識測驗試題及答案
- 2025年動物醫學專業基礎考試試卷及答案
- 2025年茶藝師職業資格考試卷及答案
- 2025年環境科學與工程專業考試題及答案的復習卷
- 2025年互聯網經濟與金融創新考試試卷及答案
- 2025年搪瓷制品相關日用品生產設備合作協議書
- 萬安保安考試題及答案大全
- 租賃換電定制合同協議
- 玻璃高空吊裝合同協議
- 2025標準技術咨詢服務合同模板
- 1.3 科學的世界觀和方法論 課件-高中政治統編版必修四哲學文化
- 慢性腎臟病肌少癥診斷治療與預防專家共識(2024年版)解讀
- 砸墻拆除合同
- 初級會計師考試歷年真題試題及答案
- 汽車制造業產品質量管理措施
- 中國老年患者術后譫妄防治專家共識
- 科學上海會考試卷及答案
- 大模型備案-落實算法安全主體責任基本情況-XX集團有限公司
評論
0/150
提交評論