




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、3.1 硬件連接 圖3-1所示為簡易計(jì)算器的電路原理圖。P3口用于鍵盤輸入,接4*4矩陣鍵盤,鍵值與鍵盤的對應(yīng)表如表-所示,p0口和p2口用于顯示,p2口用于顯示數(shù)值的高位,po口用于顯示數(shù)值的低位。圖3-1 簡易計(jì)算器電路原理圖鍵值與功能對應(yīng)表鍵值0123456789+-×/=ON/C功能0123456789+-×÷=清零表3-13.2 計(jì)算器的軟件設(shè)計(jì)#include<reg51.h> /頭文件#define uint unsigned int / #define uchar unsigned char
2、sbit lcden=P23; /定義引腳sbit rs=P24;sbit rw=P20;sbit busy=P07;char i,j,temp,num,num_1;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 table1=7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,
3、0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30;void delay(uchar z) / 延遲函數(shù)uchar y;for(z;z>0;z-) for(y=0;y<110;y+);void check() / 判斷忙或空閑do P0=0xFF; rs=0; /指令 rw=1; /讀 lcden=0;
4、60; /禁止讀寫 delay(1); /等待,液晶顯示器處理數(shù)據(jù) lcden=1; /允許讀寫 while(busy=1); /判斷是否為空閑,1為忙,0為空閑void write_com(uchar com) / 寫指令函數(shù)P0=com; /com指令付給P0口rs=0;rw=0;lcden=0;check();lcden=1;void write_date(uchar date) / 寫數(shù)據(jù)函數(shù)
5、 P0=date;rs=1;rw=0;lcden=0;check();lcden=1;void init() /初始化 num=-1;lcden=1; /使能信號為高電平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_1=0;i=0;j=0;a=0;
6、 /第一個(gè)參與運(yùn)算的數(shù)b=0; /第二個(gè)參與運(yùn)算的數(shù)c=0;flag=0; /flag表示是否有符號鍵按下, fuhao=0; / fuhao表征按下的是哪個(gè)符號void keyscan() / 鍵盤掃描程序P3=0xfe; if(P3!=0xfe) delay(20); 延遲20ms if(P3!=0xfe) temp=P3&0xf0; switch(temp)
7、160; case 0xe0:num=0; break; case 0xd0:num=1; break; case 0xb0:num=2; break; case 0x70:num=3;
8、160; break; while(P3!=0xfe); if(num=0|num=1|num=2)/如果按下的是'7','8'或'9 if(j!=0)
9、160; write_com(0x01); j=0; if(flag=0)/沒有按過符號鍵 a=a*10+tablenum;
10、 else/如果按過符號鍵 b=b*10+tablenum; else/如果按下的是'/' flag=1; fuhao=4;/4表示除號已按 i=table1num; write_date(0x30+i);P3=0xfd;if(P3!=
11、0xfd) delay(5); if(P3!=0xfd) temp=P3&0xf0; switch(temp) case 0xe0:num=4; break;
12、; case 0xd0:num=5; break; case 0xb0:num=6; break; case 0x70:num=7;
13、 break; while(P3!=0xfd); if(num=4|num=5|num=6&&num!=7)/如果按下的是'4','5'或'6' if(j!=0)
14、60; write_com(0x01); j=0; if(flag=0)/沒有按過符號鍵 a=a*10+tablenum; &
15、#160; else/如果按過符號鍵 b=b*10+tablenum; else/如果按下的是'/' flag=1; fuhao=3;/3表示乘號已按 i=table1num; write_date(0x30+i);P3=0
16、xfb;if(P3!=0xfb) delay(5); if(P3!=0xfb) temp=P3&0xf0; switch(temp) case 0xe0:num=8; break;
17、 case 0xd0:num=9; break; case 0xb0:num=10; break; case 0x70:num=11
18、; break; while(P3!=0xfb); if(num=8|num=9|num=10)/如果按下的是'1','2'或'3' if(j!=0)
19、; write_com(0x01); j=0; if(flag=0)/沒有按過符號鍵 a=a*10+tablenum;
20、60; else/如果按過符號鍵 b=b*10+tablenum; else if(num=11)/如果按下的是'-' flag=1; fuhao=2;/2表示減號已按 i=table1num; write_date(0x30+i);P
21、3=0xf7;if(P3!=0xf7) delay(5); if(P3!=0xf7) temp=P3&0xf0; switch(temp) case 0xe0:num=12; break;
22、160; case 0xd0:num=13; break; case 0xb0:num=14; break; case 0x70:n
23、um=15; break; while(P3!=0xf7); switch(num) case 12:write_com(0x01);a=0;b=0;flag=0;fuhao=0;/按下的是"清零" break; case 1
24、3: /按下的是"0" if(flag=0)/沒有按過符號鍵 a=a*10; write_dat
25、e(0x30); P1=0; else if(flag=1)/如果按過符號鍵 b=b*10; write_date(0x30);
26、 break; case 14:j=1; if(fuhao=1)write_com(0x80+0x4f);/按下等于鍵,光標(biāo)前進(jìn)至第二行最后一個(gè)顯示處 &
27、#160; write_com(0x04); /設(shè)置從后住前寫數(shù)據(jù),每寫完一個(gè)數(shù)據(jù),光標(biāo)后退一格 c=a+b; while(c!=0)
28、60; write_date(0x30+c%10); c=c/10; write_date(0x3d);
29、 /再寫"=" a=0;b=0;flag=0;fuhao=0; else if(fuhao=2)write_com(0x80+0x4f);/光標(biāo)前進(jìn)至第二行最后一個(gè)顯示處
30、 write_com(0x04); /設(shè)置從后住前寫數(shù)據(jù),每寫完一個(gè)數(shù)據(jù),光標(biāo)后退一格(這個(gè)照理說順序不對,可顯示和上段一樣) if(a-b>0) c=a-b;
31、 else c=b-a; while(c!=0)
32、0; write_date(0x30+c%10); c=c/10; if(a-b<0) &
33、#160; write_date(0x2d); write_date(0x3d); /再寫"=" a=0;b=0;flag=0;fuhao=0; &
34、#160; else if(fuhao=3)write_com(0x80+0x4f); write_com(0x04); c=a*b;
35、0; while(c!=0) write_date(0x30+c%10);
36、0; c=c/10; write_date(0x3d); a=0;b=0;flag=0;fuhao=0; &
37、#160; else if(fuhao=4)write_com(0x80+0x4f); write_com(0x04); i=0;
38、 c=(long)(float)a/b)*1000); while(c!=0)
39、160; write_date(0x30+c%10); c=c/10; i+; if(i=3) &
40、#160; write_date(0x2e); if(a/b<=0) write_date(0x30
41、); write_date(0x3d);
42、60; a=0;b=0;flag=0;fuhao=0; break; case 15:write_date(0x30+table1num);flag=1;fuhao
43、=1; break; main()init();while(1) 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ī)器匯編是通過匯編軟件將源程序變?yōu)闄C(jī)器碼,用于MCS-51單片機(jī)的匯編軟件有早期的A51,隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)
44、展,從普遍使用匯編語言到逐漸使用高級語言開發(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以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對于使用51系列單片機(jī)的愛好者來說是十分必要的,如果你使用C語言編程,那么Kei
45、l幾乎就是你的不二之選(目前在國內(nèi)你只能買到該軟件、而你買的仿真機(jī)也很可能只支持該軟件),即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì)令你事半功倍。Keil C51開發(fā)系統(tǒng)基本知識(shí)Keil C51開發(fā)系統(tǒng)基本知識(shí)1. 系統(tǒng)概述Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會(huì)更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一
46、下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(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ā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件
47、,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。3. 采用KEIL 開發(fā)的89c51單片機(jī)應(yīng)用程序一般需要以下步驟:(1) 在uVision 集成開發(fā)環(huán)境中創(chuàng)建新項(xiàng)目(Project),擴(kuò)展文件名為.UV2,并為該項(xiàng)目選定合適的單片機(jī)CPU器件(本設(shè)計(jì)采用ATMEL 公司下的AT89C51)(2)用uVision 的文本編輯器編寫源文件,可以是匯編文件(.ASM),也可以使C語言文件(擴(kuò)展名
48、.C),并將該文件添加到項(xiàng)目中去。一個(gè)項(xiàng)目文件可以包含多個(gè)文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件。(3)通過uVision 2 的相關(guān)選擇項(xiàng),配置編譯環(huán)境、連接定位器以及Debug調(diào)試器的功能。(4)對項(xiàng)目中的源文件進(jìn)行編譯連接,生成絕對目標(biāo)代碼和可選的HEX文件,如果出現(xiàn)編譯連接錯(cuò)誤則返回到第2步,修改源文件中的錯(cuò)誤后重構(gòu)整個(gè)項(xiàng)目。(5)對沒有語法錯(cuò)誤的程序進(jìn)行仿真調(diào)試,調(diào)試成功后將HEX文件寫入到單片機(jī)應(yīng)用系統(tǒng)的ROM中。4.2本設(shè)計(jì)的操作根據(jù)上述操作可得圖4-1編譯調(diào)試程序后,從Build一欄可以看到“ creating hex file from jsq”“jsq
49、-0 Error(s),0 Warning(s).” 下一步就可以在Proteus 軟件了調(diào)用hex文件及燒入單片機(jī)。 圖4-1 keil 調(diào)試4.3 proteus 7.1 介紹 Proteus的ISIS是一款Labcenter出品的電路分析實(shí)物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機(jī),元件庫齊全,使用方便,是不可多得的專業(yè)的單片機(jī)軟件仿真系統(tǒng)。該軟件的特點(diǎn):(1) 全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢。(2)具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS一232動(dòng)態(tài)仿真、1 C調(diào)試器、SP
50、I調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。 目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。 支持大量的存儲(chǔ)器和外圍芯片。總之該軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真51、AVR、PIC。4.4 Proteus 對于本設(shè)計(jì)的仿真操作步驟如下:(1)進(jìn)入proteus ISIS 集成環(huán)境,在工作前,在systerm菜單下設(shè)置界面的顏色、圖形界面大小等項(xiàng)目,我采用了系統(tǒng)默認(rèn)值。
51、60; (2)通過工具欄中的(從庫中選擇元件命令)命令,在pick devices窗口中選擇電路所需的元件,放置元件到編輯區(qū)并調(diào)整其相對位置,進(jìn)行元件參數(shù)設(shè)置,元器件間連線。器件庫如表4-1所示,選擇后如圖4-12所示。器件庫器件名稱Microprocessor ICs89C51Switches&RelaysBUTTONOptoelectronicsLM016LResistorsRESPACK-8ResistorsPOT-LINTerminals ModePOWER表4-1 器件庫及所選器件(3)連線并加上需要的說明,并完成仿真
52、原理圖,如圖4-3所示。操作說明:(1) 本計(jì)算器實(shí)現(xiàn)8位數(shù)的加、減、乘、除運(yùn)算。(2)按下數(shù)值鍵,顯示按下的 “數(shù)字”按運(yùn)算符,再,按第2個(gè)操作數(shù),顯示,按“=”鍵,得到運(yùn)算結(jié)果。(3)按“清零”鍵清除運(yùn)算結(jié)果,可重新開始。圖 4-3 仿真原理(4)加載程序。將編譯調(diào)試完成的簡易計(jì)算器機(jī)器碼程序(hex文件)加載到AT89C51單片機(jī)中。(5)單擊仿真工具欄中的仿真鍵,觀察仿真結(jié)果。可以按暫停、繼續(xù)、單步、等按鈕,查看效果。運(yùn)行 單步運(yùn)行 暫停 停止圖4-4 仿真工具欄(6)調(diào)試與思考圖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ì)出一塊很棒的PCB。但有的時(shí)候他們甚至不相信軟件的智能化給他們帶來的巨大方便
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)企業(yè)財(cái)務(wù)戰(zhàn)略研究與實(shí)施
- 醫(yī)?;饘艄芾磙k法
- 銷售團(tuán)隊(duì)激勵(lì)機(jī)制探索與實(shí)踐
- 河南財(cái)務(wù)票據(jù)管理辦法
- 景區(qū)植被養(yǎng)護(hù)管理辦法
- 利用改進(jìn)的蜣螂優(yōu)化算法結(jié)合深度學(xué)習(xí)技術(shù)進(jìn)行高壓斷路器故障診斷的研究
- 服務(wù)設(shè)計(jì)思維在茶飲體驗(yàn)系統(tǒng)中的應(yīng)用研究
- 體育機(jī)構(gòu)薪酬管理辦法
- 高壓電力系統(tǒng)保護(hù)技術(shù)研究
- 江西房產(chǎn)抵押管理辦法
- 淹溺診療規(guī)范內(nèi)科學(xué)診療規(guī)范診療指南2023版
- PremiereProCC視頻剪輯基礎(chǔ)教程PPT完整版全套教學(xué)課件
- 新教材北師大版高中英語選擇性必修第一冊全冊各單元學(xué)案(單詞短語句型寫作等知識(shí)點(diǎn)匯總)
- 鍍鋅板國家新標(biāo)準(zhǔn)規(guī)定
- 《電工學(xué)》“課程思政”教學(xué)設(shè)計(jì)案例
- 數(shù)字時(shí)代的商務(wù)英語寫作知到章節(jié)答案智慧樹2023年對外經(jīng)濟(jì)貿(mào)易大學(xué)
- 檢驗(yàn)科溝通技巧及其它
- 2022年安徽大學(xué)科研助理(校聘)招聘60人筆試備考題庫及答案解析
- 四年級閱讀訓(xùn)練概括文章主要內(nèi)容(完美)
- YY/T 0995-2015人類輔助生殖技術(shù)用醫(yī)療器械術(shù)語和定義
- GB/T 19352.1-2003熱噴涂熱噴涂結(jié)構(gòu)的質(zhì)量要求第1部分:選擇和使用指南
評論
0/150
提交評論