版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
3.1硬件連接圖3-1所示為簡易計算器的電路原理圖。P3口用于鍵盤輸入,接4*4矩陣鍵盤,鍵值與鍵盤的對應表如表----所示,p0口和p2口用于顯示,p2口用于顯示數值的高位,po口用于顯示數值的低位。圖3-1簡易計算器電路原理圖鍵值與功能對應表鍵值0123456789+-×/=ON/C功能0123456789+-×÷=清零表3-13.2計算器的軟件設計#include<reg51.h>
//頭文件#defineuintunsignedint//#defineucharunsignedcharsbitlcden=P2^3;//定義引腳sbitrs=P2^4;sbitrw=P2^0;sbitbusy=P0^7;chari,j,temp,num,num_1;longa,b,c;
//a,第一個數b,第二個數c,得數floata_c,b_c;ucharflag,fuhao;//flag表示是否有符號鍵按下,fuhao表征按下的是哪個符號ucharcodetable[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};ucharcodetable1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};voiddelay(ucharz)//延遲函數{uchary;for(z;z>0;z--)
for(y=0;y<110;y++);}voidcheck()//判斷忙或空閑{do{
P0=0xFF;
rs=0;
//指令
rw=1;
//讀
lcden=0;
//禁止讀寫
delay(1);//等待,液晶顯示器處理數據
lcden=1;
//允許讀寫
}while(busy==1);//判斷是否為空閑,1為忙,0為空閑}voidwrite_com(ucharcom)//寫指令函數{P0=com;
//com指令付給P0口rs=0;rw=0;lcden=0;check();lcden=1;}voidwrite_date(uchardate)//寫數據函數{
P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}voidinit()//初始化{
num=-1;lcden=1;//使能信號為高電平write_com(0x38);//8位,2行write_com(0x0c);//顯示開,光標關,不閃爍*/write_com(0x06);//增量方式不移位顯竟獗暌貧柚?write_com(0x80);//檢測忙信號write_com(0x01);//顯示開,光標關,不閃爍num_1=0;i=0;j=0;a=0;
//第一個參與運算的數b=0;
//第二個參與運算的數c=0;flag=0;//flag表示是否有符號鍵按下,fuhao=0;//fuhao表征按下的是哪個符號}voidkeyscan()//鍵盤掃描程序{P3=0xfe;if(P3!=0xfe){
delay(20);延遲20ms
if(P3!=0xfe)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:num=0;
break;
case0xd0:num=1;
break;
case0xb0:num=2;
break;
case0x70:num=3;
break;
}
}
while(P3!=0xfe);
if(num==0||num==1||num==2)//如果按下的是'7','8'或'9
{
if(j!=0)
{
write_com(0x01);
j=0;
}
if(flag==0)//沒有按過符號鍵
{
a=a*10+table[num];
}
else//如果按過符號鍵
{
b=b*10+table[num];
}
}
else//如果按下的是'/'
{
flag=1;
fuhao=4;//4表示除號已按
}
i=table1[num];
write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){
delay(5);
if(P3!=0xfd)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:num=4;
break;
case0xd0:num=5;
break;
case0xb0:num=6;
break;
case0x70:num=7;
break;
}
}
while(P3!=0xfd);
if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6'
{
if(j!=0)
{
write_com(0x01);
j=0;
}
if(flag==0)//沒有按過符號鍵
{
a=a*10+table[num];
}
else//如果按過符號鍵
{
b=b*10+table[num];
}
}
else//如果按下的是'/'
{
flag=1;
fuhao=3;//3表示乘號已按
}
i=table1[num];
write_date(0x30+i);}P3=0xfb;if(P3!=0xfb){
delay(5);
if(P3!=0xfb)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:num=8;
break;
case0xd0:num=9;
break;
case0xb0:num=10;
break;
case0x70:num=11;
break;
}
}
while(P3!=0xfb);
if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'
{
if(j!=0)
{
write_com(0x01);
j=0;
}
if(flag==0)//沒有按過符號鍵
{
a=a*10+table[num];
}
else//如果按過符號鍵
{
b=b*10+table[num];
}
}
elseif(num==11)//如果按下的是'-'
{
flag=1;
fuhao=2;//2表示減號已按
}
i=table1[num];
write_date(0x30+i);}P3=0xf7;if(P3!=0xf7){
delay(5);
if(P3!=0xf7)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:num=12;
break;
case0xd0:num=13;
break;
case0xb0:num=14;
break;
case0x70:num=15;
break;
}
}
while(P3!=0xf7);
switch(num)
{
case12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零"
break;
case13:{
//按下的是"0"
if(flag==0)//沒有按過符號鍵
{
a=a*10;
write_date(0x30);
P1=0;
}
elseif(flag==1)//如果按過符號鍵
{
b=b*10;
write_date(0x30);
}
}
break;
case14:{j=1;
if(fuhao==1){write_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;
}
elseif(fuhao==2){write_com(0x80+0x4f);//光標前進至第二行最后一個顯示處
write_com(0x04);
//設置從后住前寫數據,每寫完一個數據,光標后退一格(這個照理說順序不對,可顯示和上段一樣)
if(a-b>0)
c=a-b;
else
c=b-a;
while(c!=0)
{
write_date(0x30+c%10);
c=c/10;
}
if(a-b<0)
write_date(0x2d);
write_date(0x3d);
//再寫"="
a=0;b=0;flag=0;fuhao=0;
}
elseif(fuhao==3){write_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;
}
elseif(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(0x30);
write_date(0x3d);
a=0;b=0;flag=0;fuhao=0;
}
}
break;
case15:{write_date(0x30+table1[num]);flag=1;fuhao=1;}
break;
}}}main(){init();while(1){
keyscan();}}第4章仿真和調試下面用KEILuVision與porteus仿真軟件實現簡易計算器的仿真與調試。4.1keil軟件的介紹單片機開發(fā)中除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)镃PU可以執(zhí)行的機器碼有兩種方法,一種是手工匯編,另一種是機器匯編,目前已極少使用手工匯編的方法了。機器匯編是通過匯編軟件將源程序變?yōu)闄C器碼,用于MCS-51單片機的匯編軟件有早期的A51,隨著單片機開發(fā)技術的不斷開展,從普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機的開發(fā)軟件也在不斷開展,Keil軟件是目前最流行開發(fā)MCS-51系列單片機的軟件,這從近年來各仿真機廠商紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境〔uVision〕將這些部份組合在一起。運行Keil軟件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對于使用51系列單片機的愛好者來說是十分必要的,如果你使用C語言編程,那么Keil幾乎就是你的不二之選〔目前在國內你只能買到該軟件、而你買的仿真機也很可能只支持該軟件〕,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調試工具也會令你事半功倍。KeilC51開發(fā)系統(tǒng)根本知識KeilC51開發(fā)系統(tǒng)根本知識1.系統(tǒng)概述KeilC51是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。KeilC51軟件提供豐富的庫函數和功能強大的集成開發(fā)調試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到KeilC51生成的目標代碼效率非常之高,多數語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能表達高級語言的優(yōu)勢。下面詳細介紹KeilC51開發(fā)系統(tǒng)各局部功能和使用。2.KeilC51單片機軟件開發(fā)系統(tǒng)的整體結構C51工具包的整體結構中,其中uVision與Ishell分別是C51forWindows和forDos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標文件(.OBJ)。目標文件可由LIB51創(chuàng)立生成庫文件,也可以與庫文件一起經L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉換成標準的Hex文件,以供調試器dScope51或tScope51使用進行源代碼級調試,也可由仿真器使用直接對目標板進行調試,也可以直接寫入程序存貯器如EPROM中。3.采用KEIL開發(fā)的89c51單片機應用程序一般需要以下步驟:〔1〕在uVision集成開發(fā)環(huán)境中創(chuàng)立新工程〔Project〕,擴展文件名為.UV2,并為該工程選定適宜的單片機CPU器件〔本設計采用ATMEL公司下的AT89C51〕(2)用uVision的文本編輯器編寫源文件,可以是匯編文件〔.ASM〕,也可以使C語言文件〔擴展名.C〕,并將該文件添加到工程中去。一個工程文件可以包含多個文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件?!?〕通過uVision2的相關選擇項,配置編譯環(huán)境、連接定位器以及Debug調試器的功能?!?〕對工程中的源文件進行編譯連接,生成絕對目標代碼和可選的HEX文件,如果出現編譯連接錯誤那么返回到第2步,修改源文件中的錯誤后重構整個工程?!?〕對沒有語法錯誤的程序進行仿真調試,調試成功后將HEX文件寫入到單片機應用系統(tǒng)的ROM中。4.2本設計的操作根據上述操作可得圖4-1編譯調試程序后,從Build一欄可以看到“creatinghexfilefrom‘jsq’…〞“‘jsq’-0Error(s),0Warning(s).〞下一步就可以在Proteus軟件了調用hex文件及燒入單片機。圖4-1keil調試4.3proteus7.1介紹Proteus的ISIS是一款Labcenter出品的電路分析實物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機,元件庫齊全,使用方便,是不可多得的專業(yè)的單片機軟件仿真系統(tǒng)。該軟件的特點:〔1〕全部滿足我們提出的單片機軟件仿真系統(tǒng)的標準,并在同類產品中具有明顯的優(yōu)勢?!?〕具有模擬電路仿真、數字電路仿真、單片機及其外圍電路組成的系統(tǒng)的仿真、RS一232動態(tài)仿真、1C調試器、SPI調試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。③目前支持的單片機類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。④支持大量的存儲器和外圍芯片。總之該軟件是一款集單片機和SPICE分析于一身的仿真軟件,功能極其強大,可仿真51、AVR、PIC。4.4Proteus對于本設計的仿真操作步驟如下:〔1〕進入proteusISIS集成環(huán)境,在工作前,在systerm菜單下設置界面的顏色、圖形界面大小等工程,我采用了系統(tǒng)默認值。
〔2〕通過工具欄中的〔從庫中選擇元件命令〕命令,在pickdevices窗口中選擇電路所需的元件,放置元件到編輯區(qū)并調整其相對位置,進行元件參數設置,元器件間連線。器件庫如表4-1所示,選擇后如圖4-12所示。器件庫器件名稱MicroprocessorICs89C51Switches&RelaysBUTTONOptoelectronicsLM016LResistorsRESPACK-8ResistorsPOT-LINTerminalsModePOWER表4-1器件庫及所選器件〔3〕連線并加上需要的說明,并完成仿真原理圖,如圖4-3所示。操作說明:(1)本計算器實現8位數的加、減、乘、除運算。(2)按下數值鍵,顯示按下的“數字〞按運算符,再,按第2個操作數,顯示,按“=〞鍵,得到運算結果。(3)按“清零〞鍵去除運算結果,可重新開始。圖4-3仿真原理〔4〕加載程序。將編譯調試完成的簡易計算器機器碼程序〔hex文件〕加載到AT89C51單片機中。〔5〕單擊仿真工具欄中的仿真鍵,觀察仿真結果??梢园磿和?、繼續(xù)、單步、等按鈕,查看效果。運行單步運行暫停
停止圖4-4仿真工具欄〔6〕調試與思考圖4-2器件列表第5章Protel作圖及PCB制板5.1ProtelDXP2004簡介到現在許多PCB工程師們也許還在使用Protel99或者protel99se在他們所熟悉的編輯環(huán)境下進行PCB設計,他們都很有經驗,能夠在protel99或protel99se上設計出一塊很棒的PCB。但有的時候他們甚至不相信軟件的智能化給他們帶來的巨大方便。于是許多PCB工程師根本不使用軟件帶有的強大的自動布線功能,因為即使重復布上幾百次都不能得到他們滿意的方案,或是調整的線太多還不如完全手工布線。這些都讓他們不愿意接受也不相信更新?lián)Q代了的人工智能能給他們的設計帶來什么巨大的方便,他們相信的只是他們多少年積累的經驗。但實際上他們都很清楚當他們設計一塊多層高密度PCB所需要付出的代價是什么,同時他們也希望真的有那么一款軟件能讓他們的設計效率有極大的提高的PCB設計軟件?,F在Altium公司2004年最新產品Protel2004完全能滿足這方面的要求。當然Protel2004面對的用戶不光是為了方便這些有多年經驗的PCB工程師們。Protel2004同時還降低了制作PCB的門檻,通過短時間的培訓(即使是自學),很短時間您都可以很快的制作一塊合格的PCB。Protel2004共可進行74個板層設計,包含32層Signal(信號走線層);16層Mechanical(機構層);16層InternalPlane(內層電源層);2層SolderMask(防焊層);2層PasteMask(錫膏層);2層Silkscreen(絲印層);2層鉆孔層〔鉆孔引導和鉆孔沖壓〕;1層KeepOut(禁止層);1層Mu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 調解會統(tǒng)計報送制度
- 行政處罰告知結果反饋時效制度
- 2026上半年黑龍江省海員總醫(yī)院(黑龍江省第六醫(yī)院)事業(yè)單位招聘8人參考考試題庫附答案解析
- 河南輔警考試試題及答案
- 2026福建福州經濟技術開發(fā)區(qū)機關事務服務中心招聘編外聘用人員1人備考考試試題附答案解析
- 2026新疆北京銀行烏魯木齊分行招聘備考考試試題附答案解析
- 2026廣東警官學院保衛(wèi)工作部校衛(wèi)隊隊員招聘備考考試題庫附答案解析
- 2026春季夢想靠岸招商銀行佛山分行校園招聘參考考試題庫附答案解析
- 2026陜西西安交通大學第一附屬醫(yī)院肝膽外科招聘派遣制助理醫(yī)生參考考試題庫附答案解析
- 2026廣西梧州市面向社會公開考試招聘中小學(幼兒園)教師260人參考考試題庫附答案解析
- 2024-2030年建設工程檢測行業(yè)市場深度調研及發(fā)展前景與投資研究報告
- 農村土地流轉合同協(xié)議模板
- 包裝12二片罐、三片罐
- 倉庫貨物擺放標準培訓課件
- 2023年運動控制工程師年度總結及下一年展望
- 江蘇省高級人民法院勞動爭議案件審理指南
- 低蛋白血癥的護理查房知識ppt
- 眼科常見疾病診療規(guī)范診療指南2022版
- 30以內加法運算有進位1000題1
- 戰(zhàn)略成本1-6章toc經典案例
- 新藥臨床使用觀察表
評論
0/150
提交評論