版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、目錄1. 功能要求2. 方案論證3. 系統(tǒng)硬件電路的設計3.1運算模塊 3.2主控器AT89S52 3.3輸入模塊4*4矩陣鍵盤 3.4顯示模塊LCD1602 3.5錯誤警報提示語音電路 3.6切換模塊4. 系統(tǒng)程序的設計4.1運算主程序設計4.2顯示程序設計4.3讀鍵輸入存儲設計5.調試及性能分析 5.1硬件調試 5.2軟件調試 5.3性能分析6.控制源程序清單7.實物顯示8.總結9.參考文獻摘要近年來隨著科技的飛速發(fā)展,單片機的應用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術日益更新。在實時檢測和自動控制的單片機應用系統(tǒng)中,單片機往往作為一個核心部件來使用,但僅單片機方面的知識是不夠的,還應根據(jù)
2、具體硬件結構、軟硬件結合,來加以完善。計算機在人們的日常生活中是比較常見的電子產(chǎn)品之一??墒撬€在發(fā)展之中,以后必將出現(xiàn)功能更加強大的計算機,基于這樣的理念,本次設計是用AT89S52單片機、LCD顯示器、4*4矩陣鍵盤、蜂鳴器以及控制按鍵為元件來設計的計算器。利用此設計熟悉單片機微控制器及C語言編程,對其片資源及各個I/O端口的功能和基本用途的了解。掌握keil的應用程序開發(fā)環(huán)境,常用的LCD顯示器的使用方法和一般鍵盤的使用方法。關鍵字:AT89S52 LCD 控制按鍵正文1. 功能要求 計算器模擬系統(tǒng)設計要求模擬的計算器至少顯示8位數(shù)字,開機運行時,最低位顯示為“0”,其余位全部不顯示;設
3、計4*4鍵盤,分別表示09、+、*、/、=和清零鍵CL,輸入的數(shù)字從設計的鍵盤輸入;可以對計算結果小于256的兩個無符號數(shù)進行加、減、乘、除運算,并且顯示計算結果。2. 總體方案設計以及論證 根據(jù)功能和指標要求,本系統(tǒng)選用AT89S52單片機為主控機,LCD1602為顯示器。通過擴展必要的外圍接口電路,實現(xiàn)對計算器的設計。具體設計考慮如下: 由于要設計的是簡單的計算器,可以進行四則運算,對數(shù)字的大小范圍要求至少顯示8位數(shù)字,開機運行時,最低位顯示為“0”,其余位全部不顯示,但擴展程序可以實現(xiàn)任意位數(shù)的無符號數(shù)的算法,所以選用LCD1602顯示數(shù)據(jù)和結果,而不采用數(shù)碼管來顯示。 設計4*4鍵盤,
4、分別表示09、+、*、/、=和清零鍵CL,輸入的數(shù)字從設計的鍵盤輸入;可以對計算結果小于256的兩個無符號數(shù)進行加、減、乘、除運算,并且顯示計算結果。當結果超出該范圍時,發(fā)出錯誤警報。按一下切換鍵,計算范圍無限制,結果顯示也無限制,再按一下切換鍵,計算器回到限制狀態(tài)。因此總的按鍵需要17個鍵。 按照系統(tǒng)功能設計的要求,確定系統(tǒng)由5個模塊組成:主控制器、顯示電路、4*4矩陣鍵盤、切換電路和語音模塊。 計算機系統(tǒng)總體電路結構框圖如下所示:4*4矩陣鍵盤切換鍵AT89S52LED顯示語音模塊3. 系統(tǒng)硬件電路的設計 硬件系統(tǒng)是指構成微機系統(tǒng)的實體和裝置,通常由運算器、控制器、存儲器、輸入接口電路和輸
5、入設備、輸出接口電路和輸出設備等組成。單片機實質上是一個硬件的芯片,在實際應用中,通常很難直接和被控對象進行電氣連接,必須外加各種擴展接口電路、外部設備、被控對象等硬件和軟件,才能構成一個單片機應用系統(tǒng)。本設計選用以AT89S52單片機為主控單元。顯示部分:采用LCD靜態(tài)顯示。按鍵部分,采用4*4鍵盤。 硬件電路原理圖如下圖所示:3.1運算模塊MCS-51 單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O等一臺計算機所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O
6、口、串行口、定時器/計數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機是靠程序運行的,并且可以修改。通過不同的程序實現(xiàn)不同的功能,尤其是特殊的獨特的一些功能,通過使用單片機編寫的程序可以實現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以進行很快地實現(xiàn)運算功能,如圖所示: 3.2主控制器AT89S52,AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8
7、位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標準功能: 8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結構,全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。引腳結構如下:3.3輸入模塊4*4矩陣鍵盤計
8、算機輸入數(shù)字和其他功能按鍵時要用到很多按鍵,在這種情況下,編程會很簡單,但是會占用大量的I/O口資源,因此在很多情況下都不采用這樣的方式,而是采用矩陣鍵盤的方式。矩陣鍵盤采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤,在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的數(shù)量就為4*4個。這樣行列式鍵盤結構能有效的提高單片機系統(tǒng)中I/O口的利用率。如圖所示:計算器的鍵盤布局如下圖所示:一般有16個鍵組成,在單片機中正好有一個P端口實現(xiàn)16個按鍵功能,這種形式在單片機系統(tǒng)中最常用。圖:矩陣鍵盤內(nèi)部電路3.4顯示模塊LCD1602本設計采用LCD液晶顯示器來顯示輸出數(shù)據(jù)。LCD的特性有:
9、1、+5V電壓,對比可調度;2、內(nèi)含復位電路;3、提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能;4、有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM;5、內(nèi)建有160個5X7點陣的字型的字符發(fā)生器CGROM;6、8個可由用戶自定義的5X7的字符發(fā)生器CGRAM。字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。以下是我們采用的LCD液晶顯示器(實物)。本設計通過D0-D7引腳向LCD寫指令字或寫數(shù)據(jù)以使LCD實現(xiàn)不同的功能或顯示相應的數(shù)據(jù)。其接口電路如下圖所示:1602LCD采用標準的14腳(無背光)或16腳(
10、帶背光)接口,各引腳接口說明如表 編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD 電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS 數(shù)據(jù)/命令選擇12D5 數(shù)據(jù)5R/W 讀/寫選擇13D6數(shù)據(jù)6E 使能信號14D7 數(shù)據(jù)7D0 數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極3.5錯誤報警提示語音電路計算器設計采用蜂鳴器來實現(xiàn)報警。蜂鳴器是一種一體化結構的電子訊響器,廣泛應用于計算機、打印機、復印機、報警器、電話機等電子產(chǎn)品中作發(fā)聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。本次設計中我們采用的是電磁式蜂鳴器。電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振
11、動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。3.6切換模塊由于切換鍵只有一個,所以用普通按鍵接上拉電阻來完成讀鍵功能。4. 系統(tǒng)軟件程序設計在程序設計方法上,模塊化程序設計是單片機應用中最常用的程序設計方法。設計的中心思想是把一個復雜應用程序按整體功能劃分成若干相對獨立的程序模塊,各模塊可以單獨設計、編程和調試,然后組合起來。這種方法便于設計和調試,容易實現(xiàn)多個程序共存,但各個模塊之間的連接有一定的難度。 根據(jù)需要我們可以采用自上而下的程序設計方法,此方法先從主程序開始設計,然后再編制各從屬程
12、序和子程序,層層細化逐步求精,最終完成一個復雜程序的設計。程序流程圖如下圖所示:4.1運算主程序設計首先初始化參數(shù),送LED低位顯示“0”,高位不顯示。然后掃描鍵盤看是否有鍵輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、清零鍵還是功能鍵(“+”“-”“*”“/”“=” ),是數(shù)值鍵則送LCD顯示并保存數(shù)值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運算鍵,若是“=”則計算最后結果并送LCD顯示,若是運算鍵則保存相對運算程序的首地址。運算主程序框圖如下圖所示:4.2顯示程序設計顯示程序的過程為:顯示開始時,先進行LCD的初始化,即調用了LCD初始化子程序,次程序只在開機后調用一次,主要負責LC
13、D液晶屏的初始化,顯示“0”。初始化后,由矩陣鍵盤輸入相應的數(shù)字,LCD進行相應功能的設置,然后進行顯示,顯示完就返回。4.3讀鍵輸入程序設計為了實現(xiàn)鍵盤的數(shù)據(jù)輸入功能和命令處理功能,每個鍵都有其處理子程序,為此每個鍵都對應一個碼鍵碼。為了得到被按鍵的鍵碼,現(xiàn)使用行掃描法識別按鍵。鍵盤掃描初始時要先進行清屏,然后若有鍵按下,則判斷鍵號,然后釋放,若釋放按鍵完畢,則返回,若沒有釋放按鍵,則返回繼續(xù)釋放。5. 調試及性能分析調試主要以程序調試為主5.1硬件調試常見故障:1、邏輯錯誤:它是由設計錯誤或加工過程中的工藝性錯誤所造成的。這類錯誤包括錯線、開路、短路等。2、元器件失效:有兩方面的原因:一是
14、器件本身已損壞或性能不符合要求;二是組裝錯誤造成元件失效,如電解電容、集成電路安裝方向錯誤等。3、可靠性差:因其可靠性差的原因很多,如金屬化孔、接插件接觸不良會造成系統(tǒng)時好時壞,經(jīng)不起振動;走線和布局不合理也會引起系統(tǒng)可靠性差。4、電源故障:若樣機由電源故障,則加電后很容易造成器件損壞。電源故障包括電壓值不符合設計要求,電源引線和插座不對,功率不足,負載能力差等。本次調試主要通電檢查LED顯示器的點亮情況,并檢查鍵盤是否對應相應的功能鍵。5.2軟件調試軟件調試一般分為以下四個階段:1、 編寫程序并查錯;2、在C語言的編譯系統(tǒng)中編譯源程序3、對程序進行編譯連接,并及時發(fā)現(xiàn)程序中存在的錯誤。本程序
15、采用C語言編寫,在Keil編譯器下進行源程序編譯并以子程序為單位逐個進行編譯檢查。5.3性能分析簡易的計算機系統(tǒng)計算的是結果小于256的兩個無符號數(shù)之間的加減乘除,因此非常準確,而經(jīng)過擴展后的該系統(tǒng),可以對任意兩個無符號數(shù)進行加減乘除,能滿足一般的計算要求。6. 控制源程序清單#include<reg52.h>#include<stdio.h>#include <intrins.h>#include "delay.h"#include "1602.h"#include "yinyue.h"#defi
16、ne ui int #define uc charunsigned char code User=0x00,0x0A,0x15,0x0A,0x04,0x00,0x00,0x00;#define fuhao_1 -1/'/"除符號#define fuhao_2 -2/乘符號#define fuhao_3 -3/減符號#define fuhao_4 -4/加符號sbit fmq=P36; /蜂鳴器引腳,將fmq位定義為P3.6引腳sbit key=P35; /功能選擇int arry_1=0x52,0x4f,0x52,0x52,0x45; /“ERRORui m; /輸入新表達式
17、的標志float arry20;long G; /結果long D; / 結果的絕對數(shù)ui er; /錯誤標志ui ok_flag; /輸入完畢的標志ui fuhao;/符號標志ui f; /*選擇鍵盤處理*/ void key_s()if(key=0)while(!key);/f=0,簡運算;f=1,顯示溫度;f=2,復雜元算;f+;if(f>=2) f=0; /*蜂鳴器處理函數(shù)*/void Beep(ui i)/產(chǎn)生1KHZ頻率聲音的函數(shù) ui t; while(i-) for(t=0;t<1000;t+) fmq=0; delay500us(); fmq=1; delay50
18、0us(); fmq=1; delay(100); /*清0*/ void CLK() uc i; for(i=0;i<20;i+) arryi=0; er=0; ok_flag=0; G=0; D=0; /結果 fuhao=0; / fuhao表征按下的是哪個符號 /* 以下是計算器掃描、運算處理程序 */*鍵盤掃描程序*/void keyscan(void)/ 鍵盤掃描程序uc temp,i,num; if (m=1) Write_com(0x01); /清屏命令 for(i=0;i<4;i+) arryi=0;m=0;ok_flag=0;fuhao=0; P1=0xfe; i
19、f(P1!=0xfe) delay(20);/20ms if(P1!=0xfe) temp=P1&0xf0; switch(temp) case 0xe0:num=0; break; case 0xd0:num=1; break; case 0xb0:num=2; break; case 0x70:num=3; break; while(P1!=0xfe); if(num=0) arry2*fuhao=10*(arry2*fuhao)+7;Write_data(0x30+7); /按鍵等于7 if(num=1) arry2*fuhao=10*(arry2*fuhao)+8;Write_
20、data(0x30+8); /按鍵等于8 if(num=2) arry2*fuhao=10*(arry2*fuhao)+9;Write_data(0x30+9); /按鍵等于9 if(num=3) arry2*fuhao+1=fuhao_1;fuhao+;Write_data(0x2f); / 除號/ P1=0xfd; if(P1!=0xfd) delay(20); if(P1!=0xfd) temp=P1&0xf0; switch(temp) case 0xe0:num=4; break; case 0xd0:num=5; break; case 0xb0:num=6; break;
21、 case 0x70:num=7; break; while(P1!=0xfd); if(num=4) arry2*fuhao=10*(arry2*fuhao)+4;Write_data(0x30+4); /按鍵等于4 if(num=5) arry2*fuhao=10*(arry2*fuhao)+5;Write_data(0x30+5); /按鍵等于5 if(num=6) arry2*fuhao=10*(arry2*fuhao)+6;Write_data(0x30+6); /按鍵等于6 if(num=7) arry2*fuhao+1=fuhao_2;fuhao+;Write_data(0x2a
22、); / 乘號'*' P1=0xfb;if(P1!=0xfb)delay(20);if(P1!=0xfb)temp=P1&0xf0;switch(temp)case 0xe0:num=8;break;case 0xd0:num=9;break; case 0xb0:num=10; break; case 0x70:num=11; break;while(P1!=0xfb);if(num=8) arry2*fuhao=10*(arry2*fuhao)+1;Write_data(0x30+1); /按鍵等于1if(num=9) arry2*fuhao=10*(arry2*f
23、uhao)+2;Write_data(0x30+2); /按鍵等于2if(num=10) arry2*fuhao=10*(arry2*fuhao)+3;Write_data(0x30+3);/按鍵等于3if(num=11) arry2*fuhao+1=fuhao_3;fuhao+;Write_data(0x2d); / 減號-P1=0xf7;if(P1!=0xf7)delay(10);if(P1!=0xf7)temp=P1&0xf0;switch(temp)case 0xe0:num=12;break;case 0xd0:num=13;break;case 0xb0:num=14;br
24、eak;case 0x70:num=15;break;while(P1!=0xf7);if (num=12)/按鍵 清0 Write_com(0x01); for(i=0;i<20;i+) arryi=0; fuhao=0; ok_flag=0; if(num=13) arry2*fuhao=10*(arry2*fuhao);Write_data(0x30); /按鍵等于0if(num=14) ok_flag=1;m=1; /等于號if(num=15) arry2*fuhao+1=fuhao_4;fuhao+;Write_data(0x2b);/ 加號+ P1=0xf0; /*條件運算條
25、件*/void stop(void)uc k,h; h=2*fuhao; if(arry3=fuhao_1)|(arry3=fuhao_2)|(arry3=fuhao_3)|(arry3=fuhao_4) er=1; if(arry0=0) er=1; for (k=0;k<=h;k+) if(arryk)<0) if(arryk+1)=0) if(arryk+2<0) er=1;if (arryk=fuhao_1) if(arryk+1=0) er=1; /*輸入錯誤處理*/void error_process(void) int i; Write_ads(0x4f); /
26、按下等于鍵,光標前進至第二行最后一個顯示處/ Write_com(0x04); /設置從后住前寫數(shù)據(jù),每寫完一個數(shù)據(jù),光標后退一格/ for(i=0;i<5;i+) Write_data(arry_1i); Beep(2); er=0; for(i=0;i<20;i+) arryi=0; /*運算*/void process(void) uc h,k,i; h=fuhao; for(k=1;k<=h;k+) if(arry1=fuhao_1) /除符號/ arry0=arry0/arry2; fuhao=fuhao-1; for(i=1;i<=(2*fuhao);i+)
27、 arryi=arryi+2; if(f=0) if(arry0>256) /結果大于256為計算錯誤 液晶顯示ERRORerror_process();fuhao=1; if(arry1=fuhao_2) /乘符號/ arry0=arry0*arry2; fuhao=fuhao-1; for(i=1;i<=(2*fuhao);i+) arryi=arryi+2; if(f=0) if(arry0>256)|(arry0<-256) /結果大于256為計算錯誤 液晶顯示ERROR error_process();fuhao=1; if(arry1=fuhao_3) /減
28、符號/ arry0=arry0-arry2; fuhao=fuhao-1; for(i=1;i<=(2*fuhao);i+) arryi=arryi+2; if(f=0)if(arry0>256)|(arry0<-256) /結果大于256為計算錯誤 液晶顯示ERROR error_process();fuhao=1; if(arry1=fuhao_4) /加符號/ arry0=arry0+arry2; fuhao=fuhao-1; for(i=1;i<=(2*fuhao);i+) arryi=arryi+2; if(f=0) if(arry0>256) /結果大
29、于256為計算錯誤 液晶顯示ERROR error_process();fuhao=1; /*顯示運算結果*/if(fuhao=0)G=(long)arry0; /小位數(shù)取三位/ Write_ads(0x4f); /按下等于鍵,光標前進至第二行最后一個顯示處/ Write_com(0x04); /設置從后住前寫數(shù)據(jù)每寫完一個數(shù)據(jù),光標后退一格/ if(G<0)D=0-G;if(G>=0)D=G; if(D>=1000) i=0; while(D!=0) Write_data(0x30+D%10); D=D/10; i+; /Write_date(0x2e); /寫小數(shù)符號“.
30、” else i=0; while(i<3) Write_data(0x30+D%10); D=D/10; if(D>0) i+; else i=3; /Write_date(0x2e); /寫小數(shù)符號“.” /Write_date(0x30); /再寫“0” if(G<0) Write_data(0x2d); /寫"-"符號 Write_data(0x3d); /再寫“=”符號 ok_flag=0; /*主函數(shù)*/void main(void) uc i;f=0;init();CLK(); key_s();P1=0xf0;while (1)key_s(); if(P1!=0xf0)/是否有鍵按下 keyscan();if(ok_flag=1)stop();if(er=1) /出錯處理error_process();else process(); /運算處理 for(i=0;i<20;i+) arryi=0;ok_flag=
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 抱團出游安全協(xié)議書
- 天津市北辰區(qū)第三學區(qū)2024-2025學年八年級上學期11月期中數(shù)學試卷(含答案)
- 山東省棗莊市臺兒莊區(qū)2024-2025學年九年級上學期期中考試物理試題
- 遼寧省鞍山市海城市西部集團2024-2025學年七年級上學期11月期中英語試題(含答案)
- 河南省焦作市中站區(qū)2024-2025學年七年級上學期期中生物學試題(含答案)
- 《雙組分紡粘法非織造布》
- 安徽省安慶市外國語學校2024-2025學年九年級上學期11月期中考試化學試題(含答案)
- 離子風槍行業(yè)相關投資計劃提議
- 藍耳病初期的癥狀
- 高分子合成材料行業(yè)相關投資計劃提議
- 中醫(yī)學與循證醫(yī)學
- Pilz安全繼電器說明書大全-1
- 文萊專題知識課件
- 安全技術說明書(粗酚)
- 《觀察日記》評課材料
- 城鎮(zhèn)再生資源回收利用體系建設項目建議書(完整版)資料
- 兩篇古典英文版成語故事狐假虎威
- 人教版高中地理必修一《大氣的組成和垂直分層》PPT
- GB/T 41837-2022溫泉服務溫泉水質要求
- GB/T 34049-2017智能流量儀表通用技術條件
- 介紹濟寧的英語ppt
評論
0/150
提交評論