基于at89c51的簡易計(jì)算器_第1頁
基于at89c51的簡易計(jì)算器_第2頁
基于at89c51的簡易計(jì)算器_第3頁
基于at89c51的簡易計(jì)算器_第4頁
基于at89c51的簡易計(jì)算器_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、3.1硬件連接圖3-1所示為簡易計(jì)算器的電路原理圖。p3 u用于鍵盤輸入,接4*4矩陣鍵 盤,鍵值與鍵盤的對應(yīng)表如表-所示,po 口和p2 口用于顯示,p2 口用于顯示 數(shù)值的高位,po 口用于顯示數(shù)值的低位。u1p33-4kc2c平30pf riylp32p35p34vcc丁rdwrclpol2loopfp1.0pl.lpl.2pl.3pl.4pl.5pl.6pl.7p3.3ont1)p3.2(int0)p3.5(t1)p3.4(t0)1918ea/vpp> xtal1 xtal2rstp3.7(rd)p3.6(wr)at39c51reset(ad0)p0.0(adl)p0.1(ad2

2、)p0.2(ad3)p03(ad4)p0.4(ad5)p0.5(ad6)p0.6(ad7)p0.7(a8)p2.0(a9)p2.1(a10)p2.2(a11)p2.3(a12)p2.4(a13)p2.5(a14)p2.6(a15)p2.7vccgnd(rxd)p3.0(txd)p3.1aletrogpsenp008p017p02aaa.6p035p044p05vw3p06vcchrp1po?j-cdenik10krsplvccpoo40丁p0120p02p30p03p31p04p05rwlcdenp06p07vcc12345678910 111213141516header 16p307asw

3、-pbisw-pb45 6p31sw-pb4sw-pb<sw-pbp32123sw-pb °sw-pb3p33on/c0sw-pbsw-pbsw-pb 囑>345人trsw.pb-o o- sw-pb圖3-1簡易計(jì)算器電路原理圖 鍵值與功能對應(yīng)表鍵值 0123456789+0n/c功能 0123456789+表3-13.2計(jì)算器的軟件設(shè)計(jì)#include<reg51 .h>/頭文件#define uint unsigned int /#define uchar unsigned char sbit lcden=p2a3; /定義引腳sbit rs=p2a4;s

4、bit rw=p2a0;sbit busy=p0a7;char i,j,temp,num,num_l;long a,b,c;/a,第一個(gè)數(shù)b,第二個(gè)數(shù)c,得數(shù)float a_c,b_c;uchar flag,fuhao;/flag表示是否有符號鍵按下,fuhao表征按下的是哪個(gè)符號uchar code table=7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0;uchar code tablel) )=7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,l,2,3,0x2d-0x30,0x01 -0x30,0,0x3d-0x30,0x2b-0x30;void del

5、ay(uchar z) / 延遲函數(shù) uchar y;for(z;z>0;z-)for(y=0;y<l 10;y+);void check() /判斷忙或空i'木jdop0=0xff;rs=0;"指令rw= 1;/讀lcden=0;/禁止讀寫delay(l); /等待,液晶顯示器處理數(shù)據(jù)lcden=l;/允許讀寫while(busy=l); /判斷是否為空閑,1為忙,0為空閑void write_com(uchar com) / 寫指令函數(shù)p0=com; /com 指令付給 p0 口rs=o;rw=0;lcden=0;check();lcden=l;void wr

6、ite_date(uchar date) / 寫數(shù)據(jù)函數(shù)po=date;rs= 1;rw=0;lcden=0;check();lcden=l;void init() /初始化num=-l;lcden=l; /使能信號為高電平write_com(0x38); "8 位,2 行write_com(0x0c); /顯示開,光標(biāo)關(guān),不閃爍write_com(0x06); /增量方式不移位顯竟獗曖貧柚? write_com(0x80); /檢測忙信號 write_com(0x01); /顯示開,光標(biāo)關(guān),不閃爍 num_l=0;i=0;j=0;a=0;/第一個(gè)參與運(yùn)算的數(shù)b=0;/第二個(gè)參與運(yùn)算

7、的數(shù)c=0;flag=o; /flag表示是否有符號鍵按下,fuhao=0; / fuhao表征按下的是哪個(gè)符號void keyscan() /鍵盤掃描程序p3=oxfe;if(p3!=0xfe)delay(20);延遲 20ms if(p3!=0xfe)temp=p3&0xf0;switch(temp)case 0xe0:num=0; break;case 0xd0:num=l; break;case 0xb0:num=2; break;case 0x70:num=3; break;while(p3!=0xfe);if(num=0|num=l |num=2)/如果按下的是 778或&

8、#39;9 if(j!=0)write_com(0x01);j=0;if(flag=0)/沒有按過符號鍵a=a* 10+tablelnum;else/如果按過符號鍵 b=b*l 0+tablenum;else/如果按下的是7flag=l;fuhao=4;/4表示除號已按i=tablelfnum;write_date(0x30+i);p3=0xfd;if(p3!=0xfd)delay(5);if(p3!=0xfd)temp=p3&oxfo;switch(temp)case 0xe0:num=4; break;case oxdo:num=5; break;case 0xb0:num=6;

9、break;case 0x70:num=7; break;while(p3!=0xfd);if(num=4|num=5|num=6&&num!=7)/如果按下的是4,5或6 if(j!=o)write一com(oxol); j=o;if(flag=o)/沒有按過符號鍵a=a* 10+tablenum;else/如果按過符號鍵 b=b*l o+tablenum;else/如果按下的是i/flag=l;fuhao=3;/3表示乘號己按i=tablelfnum;write_date(0x30+i);p3=0xfb;if(p3!=0xfb)delay(5);if(p3!=0xfb)te

10、mp=p3&oxfo;switch(temp)case oxeo:num=8; break;case 0xd0:num=9; break;case 0xb0:num=10; break;case 0x70:num=ll; break;while(p3!=0xfb);if(num=8|num=9|num=10)/如果按下的是 *1,2或3 write一com(oxol); j=o;if(flag=o)/沒有按過符號鍵a=a* 10+tablenum;else/如果按過符弓鍵 b=b* 10+tablenum;else if(num=ll)/如果按下的是flag=l;fuhao=2;/2表

11、示減號己按i=tablelnum;write_date()x30+i);p3=oxf7;if(p3!=0xf7)delay(5);if(p3!=0xf7)temp=p3&oxfo;switch(temp)case 0xe0:num=12; break;case oxdo:num=13; break;case oxbo:num=14; break;case 0x70:num=15; break;while(p3!=0xf7);switch(num)case 12:write_com(0x01);a=0;b=0;flag=0;fuhao=0;/按下的是"清零 break;case

12、 13: /按下的是”0”if(flag=0)/沒有按過符號鍵 a=a*10;write_date(0x30);pl=0;else if(flag=l)/如果按過符號鍵b=b*10;write_date(0x30);break;case 14:j=l;if(fuhao=l)write_com(0x80+0x4f);/按下等于鍵,光標(biāo)前進(jìn)至第二行最后一個(gè)顯示處write_com(0x04);/設(shè)置從后住前寫數(shù)據(jù),每寫完一個(gè)數(shù)據(jù),光標(biāo)后退一格c=a+b;while(c!=o)write_date(0x30+c% 10); c=c/10;write_date(0x3d);/再寫"=”a=0

13、;b=0;flag=0;fuhao=0;else if(fuhao=2)write_com(0x80+0x4f);/光標(biāo)前進(jìn)至第二行最后一個(gè)顯示處write_com(0x04);/設(shè)置從后住前寫數(shù)據(jù),每寫完一個(gè)數(shù)據(jù),光標(biāo)后退一格(這個(gè)照理說順序不對,可顯示和上段一樣) if(a-b0)c=a-b;elsec=b-a;while(c!=0)write_date(0x30+c% 10); c=c/10;if(a-b<0)write_date(0x2d);write_date(0x3d);/再寫 n=”a=0;b=0;flag=0;fuhao=0;else if(fuhao=3) write_

14、com(0x80+0x4f); write一com(0x04);c=a*b;while(c!=0)(write_date(0x30+c% 10); c=c/10;write_date(0x3d);a=0;b=0;flag=0;fuhao=0;else if(fuhao=4)write_com(0x80+0x4f); write_com(0x04); i=0;c=(long)(float)a/b)* 1000); while(c!=0)write_date(0x30+c% 10); c=c/10;i+;if(i=3)write_date(0x2e);if(a/b<=0)write_date

15、(0x30);write_date(0x3d);a=0;b=0;flag=0;fuhao=0;break;case 15: write_date(0x30+table 1 num);flag= 1 ;fuhao= 1; break;main()init();while(l)keyscan();第4章仿真和調(diào)試下面用keil uvision與porteus仿真軟件實(shí)現(xiàn)簡易計(jì)算器的仿真與調(diào)試。4.1 keil軟件的介紹單片機(jī)開發(fā)屮除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)閏pu可 以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另-種是機(jī)器匯編,目前已極少使用手工匯編的 方法了。機(jī)器匯

16、編是通過匯編軟件將源程序變?yōu)闄C(jī)器碼,用于mcs-51單片機(jī)的匯編軟件有早期 的a51,隨著單片機(jī)幵發(fā)技術(shù)的不斷發(fā)展,從符遍使用匯編語言到逐漸使用高級語言開發(fā),單片 機(jī)的開發(fā)軟件也在不斷發(fā)展,keil軟件是目前最流行幵發(fā)mcs-51系列單片機(jī)的軟件,這從近年 來各仿真機(jī)廠商紛紛宣布全而支持keil即可看出。keil提供了包括c編譯器、宏匯編、連接器、 庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uvision) 將這些部份組合在一起。運(yùn)行keil軟件需要pentium或以上的cpu, 16mb或更多ram、20m以上 空閑的硬盤空間、wn98、nt、win2000

17、、wnxp等操作系統(tǒng)。掌握這一軟件的使用對于使用51 系列單片機(jī)的愛好者來說是十分必要的,如果你使用c語言編程,那么keil幾乎就是你的不二 之選(目前在國內(nèi)你只能買到該軟件、而你買的仿真機(jī)也很可能只支持該軟件),即使不使用c 語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會令你事半功倍。keil c51開發(fā)系統(tǒng)棊本知識keil c51開發(fā)系統(tǒng)基本知識1. 系統(tǒng)概述keil c51是美國keil software公司出品的51系列兼容單片機(jī)c語言軟件開發(fā)系統(tǒng),與匯 編相比,c語言在功能上、結(jié)構(gòu)性、可讀性、對維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯 編語言后再使用c來開

18、發(fā),體會更加深刻。keil c51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全windows界面。另外 重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會到keil c51生成的h標(biāo)代碼效率非 常之高,多數(shù)語句華成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時(shí)史能體現(xiàn)高級語言的優(yōu) 勢。下面詳細(xì)介紹keil c51開發(fā)系統(tǒng)各部分功能和使用。2. keil c51單片機(jī)軟件開發(fā)系統(tǒng)的整體結(jié)構(gòu)c51工興包的整體結(jié)構(gòu)屮,其屮uvision與ishell分別是c51 for windows和for dos的集成 開發(fā)環(huán)境(ide),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開發(fā)流程。開發(fā)人員可用

19、ide 木身或其侖編輯器編輯c或匯編源文件。然后分別由c51及a51編譯器編譯生成a標(biāo)文件(.obj)。 目標(biāo)文件叫由lib51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)l51連接定位生成絕對目標(biāo)文件 (.abs)。abs文件由0h51轉(zhuǎn)換成標(biāo)準(zhǔn)的hex文件,以供調(diào)試器dscope51或tscopc51使用進(jìn)行 源代碼級調(diào)試,也可山仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如epkom 中。3. 采用keil開發(fā)的89c51單片機(jī)應(yīng)用程序一般盂要以下步驟:(1) 在uvision集成幵發(fā)環(huán)境中創(chuàng)建新項(xiàng)q (project),擴(kuò)展文件名為.uv2,并為該項(xiàng)0選 定合適的單片機(jī)cpu器件(

20、本設(shè)計(jì)采用atmel公司下的at89c51)(2) 用uvision的文本編輯器編寫源文件,可以是匯編文件(.asm),也可以使c語言文件(擴(kuò) 展名.c),并將該文件添加到項(xiàng)目中去。一個(gè)項(xiàng)目文件可以包含多個(gè)文件,除y源程序文件外, 還可以是庫文件、頭文件或文本說明文件。(3) 通過uvision 2的相關(guān)選擇項(xiàng),配置編譯環(huán)境、連接定位器以及debug調(diào)試器的功能。 u)對項(xiàng)目屮的源文件進(jìn)行編譯連接,生成絕對目標(biāo)代碼和可選的hex文件,如果出現(xiàn)編譯連接錯(cuò)誤則返回到第2步,修改源文件中的錯(cuò)誤后重構(gòu)整個(gè)項(xiàng)0。(5)對沒有語法錯(cuò)誤的程序進(jìn)行仿真調(diào)試,調(diào)試成功后將hex文件寫入到單片機(jī)應(yīng)用系統(tǒng)的rom

21、屮。4.2本設(shè)計(jì)的操作根據(jù)上述操作可得圖4-1編譯調(diào)試程序后,從build欄可以看到“ creating hex file from jsq ”“ jsq' -0 error(s),0 warning(s).”|t> nn鑛a事ion?(c:dnccia«tilxmxid snt i lficaxadatnivt綱或文flcjxduh ii«ekejct |<b< fl>ikjicsh«lre a©少n鴯3m o占邊cis辦禿;®rj下一步就可以在proteus軟件了調(diào)用hex文件及燒入單片機(jī)。:1 h i s&

22、#171;wc«inam? ass j 必 <hnclm«e<ke9sl.h> l4<fuve uibt unjivtd tac ld<ficx ueh&c ux&tinned eh4t曲k r4en»n*3j bic t丨2m; sbic jblt/3t 父 5fb個(gè)教me,個(gè)史ilon .'tbcj/<jhoac < e4h c:|«hc班承是ck利符,«下fuh的夢h汝下的是wtvic cj* mble(«(為,s人。.oruouwcher code c4blel

23、)<l73/9/ox2t-cw30/lr243roc2d-owjo0x0i.0x3040,05<34-0x30jt>-ac»| ;ivoid del«y|vmt<|h<4 inc a) ikanjxcd ax»t s>u;f « n»n;u>0;u-)fpr fr»> ii :圖4-1 keil調(diào)試4.3 proteus 7.1 介紹proteus的isis是一款labcenter出品的電路分析實(shí)物仿真系統(tǒng),可仿真各種電路和1c, 并支持單片機(jī),元件庫齊全,使用方便,是不對多得的專業(yè)的單

24、片機(jī)軟件仿真系統(tǒng)。該軟件的特點(diǎn):(1)全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品屮具有明顯的優(yōu)勢。(2)具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外m電路組成的系統(tǒng)的仿真、rs 232動 態(tài)仿真、1 c調(diào)試器、spi調(diào)試器、鍵盤和lcd系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、 邏輯分析儀、信號發(fā)生器等。目前支持的單片機(jī)類型有:68000系列、8051系列、avr系列、 pic12系列、pic16系列、pic18系列、z80系列、iic11系列以及各種外圍芯片。支持大量的 存儲器和外圍芯片??傊撥浖且豢罴瘑纹瑱C(jī)和spice分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真 51、a

25、vr、pic。4.4 proteus對于本設(shè)計(jì)的仿真操作步驟如下:(1)進(jìn)入proteus isis集成環(huán)境,在工作前,在system菜單下設(shè)置界面的顏色、圖形界面大 小等項(xiàng)e1,我采用了系統(tǒng)默認(rèn)值。(2)通過工具欄屮的(從庫屮選擇元件命令)命令,在pick devices窗口屮選擇電路所需的元件,放置元件到編輯區(qū)并調(diào)整其相對位置,進(jìn)行元件參數(shù)沒置,元器件間連線。器件庫如表4-1所示,選擇后如圖4-12所示。器件庫器件名稱microprocessorics89c51switches&relaysbuttonoptoelectronicslm016lresistorsrespack-8r

26、esistorspot-linterminals modepower表4-1器件庫及所選器件p7sldevicesg-com-cathode 74hc573 adc0304at89c51at89c52buttoncapdac0832keypad-sm allcalcled-bluelm01glpot-linresrespack-8(3)連線并加上需要的說明,并完成仿真原理圖,如圖4-3所示。操作說明:(1) 本計(jì)算器實(shí)現(xiàn)8位數(shù)的加、減、乘、除運(yùn)算。(2) 按下數(shù)值鍵,見示按k的“數(shù)字”按運(yùn)算符,兩,按第2個(gè)操作數(shù),品示,按“=”鍵,得到運(yùn)算結(jié)果。(3) 按“淸芩”鍵淸除運(yùn)算結(jié)果,可甫新開始。圖

27、4-3仿真原理(4) 加載程序。將編譯調(diào)試完成的簡易計(jì)算器機(jī)器碼程序(hex文件)加載到at89c51單片機(jī)中。(5) 單擊仿真工具欄中的仿真鍵 ,觀察仿真結(jié)果??梢园磿和?、繼續(xù)、單步、等按鈕,查看效果。運(yùn)行單步運(yùn)行暫停 停止圖4-4仿真工具欄(6) 調(diào)試與思考9-5hllz-5 frlo"tg ptte5>xtal1pottawdpo.1/ad1romaicxta12poaksfo.ad*pos/adspoj&amb.stpo7/ad7p2iwsp2.1wsp2h3p2k11alep2 wacp2sat3p2jsahp2.7/a«pmp3itrx0p1.1p

28、3.1fd®p12p3mnpup1.+p3.4hop1 fp3vt1p1名p1.7p3.t/ptu2ig4bbpackc :丁 e>cp>a cterp1-圖4-2器件列表第5章protel作圖及pcb制才5. 1 protel dxp 2004 簡介到現(xiàn)在許多pcb工程師們也許還在使用protel99或者protel99se在他們所熟悉的編輯環(huán) 境下進(jìn)行pcb設(shè)計(jì),他們都很冇經(jīng)驗(yàn),能夠在protel99或protel99se上設(shè)計(jì)出一塊很棒的pcb0 但宥的時(shí)候他們其至不相信軟件的®能化給他們帶來的巨大方便。于是許多pcb工程師根本不使 用軟件帶有的強(qiáng)大的自動

29、布線功能,因?yàn)榧词怪貜?fù)布上兒百次都不能得到他們滿意的方案,或是 調(diào)整的線太多還不如完全手工布線。這些都讓他們不愿意接受也不相信更新?lián)Q代丫的人工智能能 給他們的設(shè)計(jì)帶來什么巨大的方便,他們相信的只是他們多少年積累的經(jīng)驗(yàn)。但實(shí)際上他們都很 清楚當(dāng)他們設(shè)計(jì)一塊多層高密度kb所需耍付出的代價(jià)是什么,同時(shí)他們也希望真的有那么一款軟件能讓他們的設(shè)計(jì)效率有極大的提商的pcb設(shè)計(jì)軟件?,F(xiàn)在altium公司2004年最新產(chǎn)品 protel 2004完全能滿足這方面的要求。當(dāng)然protel 2004面對的用戶不光是為丫方便這些有多 年經(jīng)驗(yàn)的pcb工程師們。protel 2004同時(shí)還降低了制作pcb的門檻,通過短

30、時(shí)間的培訓(xùn)(即使是自學(xué)),很短時(shí)間您都可以很快的制作一塊合格的pcb。protel 2004共可進(jìn)行74個(gè)板層設(shè)計(jì),也含32層signal (信號走線層);16層mechanical (機(jī)構(gòu)層);16 層 internal plane(內(nèi)層電源層);2 層 solder mask(防焊層);2 層paste mask(錫育層);2層silkscreen(絲印層);2層鉆孔層(鉆孔引導(dǎo)和鉆孔沖壓);1層keep out (禁止層);1層multi-layer (橫跨所有的信號板層)。5.2 protel 設(shè)計(jì)電路打開protel dxp的操作界面,從文件“菜單”下“創(chuàng)建” “原理圖”見下 圖圖5

31、-1創(chuàng)建原理圖元件庫gx元件庫.查找.place at 83c51atmel microcontroller 8051 architecture.intlib v xat89c51元件名/ i描述元件庫at39c51 8-bil microconlroller almel miero at89c51rc 8-bilmicroconlroller almel mier2 components圖5-2元件庫找到器件從元件庫找到所需要的器件,點(diǎn)擊place按鍵,就可以把相關(guān)器件放入到設(shè)計(jì) 工作區(qū),見圖5-2演示。見圖5-2演示元件庫及所選器件器件庫器件名稱atmel microcontroller 8051architecture. tntlibat89c51miscellaneous connectors. tntlib16-pin 1602 封裝miscellaneous devices. tntlibsw-pbmiscellaneous devices. tntlibcapmiscellaneous devices. tntlibxtalmiscellaneous devices. tntlibcappol2miscellaneous devices. tntlibres2自己畫的電阻排庫rp1表5-1元件庫及所選器件(3)按

溫馨提示

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

評論

0/150

提交評論