keilc教程以及程序例子_第1頁
keilc教程以及程序例子_第2頁
keilc教程以及程序例子_第3頁
keilc教程以及程序例子_第4頁
keilc教程以及程序例子_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/第一章KEIL編譯器的安裝KEIL()編譯器評估版本把目標(biāo)代碼長度限制在2KB以內(nèi),可以從網(wǎng)上下載使用。而8051編譯器正式版本由1張CD、1張有序列號碼的1.44MB軟盤和連接打印機端口的硬件鎖定鍵組成。利用評估版本(Evaluation)對源程序通過了便宜,也生成了HEX文件,但就是不能正常運行。這是為什么?使用者可以隨時從網(wǎng)上下載KEIL評估版本進行安裝,但是編譯長度小于2KB的目標(biāo)代碼,并且代碼的起始(Start)地址自動設(shè)定為4000h,所以硬件組成也應(yīng)予以支持。免費獲得的評估版還有別的限制,為了把所生成HEX文件下載到地址不是4000h的ROM中,就要利用hex2bin.exe實用程序把hex變成bin后下載到ROM,只有這樣才能正常運行。hex2bin.exe程序可以從網(wǎng)上下載。下載KEILC51安裝程序后,雙擊Setup.exe文件約幾秒后,在安裝向?qū)Т翱谏峡梢赃x擇安裝、更新、搬移程序三個選項,如圖1–2所示。圖1–1安裝項目的選擇在默認(rèn)(InstallSupportforAdditionalMicrocontrollerArchitectures)的情況下,點擊Next>進入圖1–2所示畫面。EvalVersion(EvaluationVersion)評估版本;FullVersion正式版本;Quit退出安裝;在安裝過程中,鍵入寫在軟盤上的序列號碼,選擇驅(qū)動器路徑,把軟盤插入驅(qū)動器繼續(xù)安裝。這時,在程序設(shè)置信息項目中出現(xiàn)“LastName”項目,必須鍵入才能激活“Next”按鈕,比如自己的“姓”或其他。在安裝盤上有序列號碼和與安裝有關(guān)的重要信息,因此有必要把安裝盤進行備份以保護重要的信息。若沒有序列號的情況下請選擇EvalVersion(EvaluationVersion)評估版本進行安裝。圖1–2正式版與評估版的選擇如果KeiluVision2的KEIL編譯器安裝結(jié)束,則會生成下列路徑和圖標(biāo):以最上層路徑為C:\KEIL為假設(shè)予以羅列。安裝結(jié)束后若想運行,則雙擊屏幕上的KeiluVision2集成運行快捷按鈕。在Windows開始-->程序菜單上也會發(fā)現(xiàn)同樣的快捷按鈕。表1–1文件夾的結(jié)構(gòu)路徑說明C51\ASM匯編SFR(SpecialFunctionRegister)定義和源程序樣本文件C51\BIN編譯器的執(zhí)行文件所位置C51\EXAMPLES應(yīng)用程序視圖文件C51\RTX51實時操作系統(tǒng)Full文件,255個任務(wù)C51\RTX_TINY實時操作系統(tǒng)Tiny文件,16個任務(wù)C51\INCC語言中與8051有關(guān)的所有包含文件都在此處C51\LIB庫、開始代碼、輸入/輸出源程序C51\MON51監(jiān)控目標(biāo)硬件系統(tǒng)時所使用的HEX代碼生成文件UV2編譯器集成執(zhí)行文件KEIL編譯器C51以ANSI(AmericanNationalStandardInstitute)規(guī)格為標(biāo)準(zhǔn),所以使用C語言的開發(fā)人員用ANSI編寫程序就可以(使用ClassicC語言也可以)。第二章KeiluVision2快速入門為了能讓使用者快速入門,先簡單介紹8051。8051單片機是一個具有40個引腳的長方形芯片,其中,有5V直流電源Vcc(因為內(nèi)部有很多邏輯電路,應(yīng)使用波紋系數(shù)小的直流電源)和電源地GND引腳。還有至少保持2個機器周期(一個機器周期=12個振蕩周期)為高電就復(fù)位的RESET引腳。 端口P0是由開漏(用作I/O口時需要外部接上拉電阻)的驅(qū)動器構(gòu)成的8位雙向I/O口,用作A0~A7,D0~D7;端口1是有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口;端口2是有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口,用作A8~A15;端口3是有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口,兼有串行通訊、外部中斷、定時器、讀/寫的特殊功能;X1是振蕩放大器的反向輸入引腳,X2是反向輸出引腳,因此,使用晶體時把晶振并聯(lián)連接到X1和X2上,使用外部振蕩器時只連接X1。 ALE/PROG(AddressLatchEnableOutput/ProgramPulseInput)引腳的ALE,在訪問外部存儲器時用來鎖存低8位地址,而PROG在編程EPROM時用來進行脈沖輸入。PSEN(ProgramStrobeEnable)引腳信號作為訪問外部程序存儲器的讀選通,每個機器周期PSEN被激活2次,在ALE的下降沿將端口0的地址鎖存到外部鎖存器。EA/Vpp(ExteralAccessEnable)引腳連接到GND,則0~FFFFH地址都訪問外部程序存儲器;連接到Vcc,則訪問內(nèi)部程序存儲趨。Vpp是對8751編程電壓輸入端子,其電壓為12.75~21V,具體值隨不同型號芯片而有所不同。 雙擊KeiluVision2集成執(zhí)行快捷按鈕,將彈出如圖2–1所示的窗口。這是一個初始開發(fā)集成窗口。如果沒有做過任何項目,則窗口上什么也沒有。窗口的上端有10個下拉菜單。C51在管理程序時,采用所謂的項目(Project)文件來進行管理。項目把程序的環(huán)境甚至和編圖2–1KeiluVision2的執(zhí)行輯有關(guān)的全部信息都保存著,因此使用者可以把多個程序以項目為單位使用C51就可以了。由于C518051KEIL編譯器變成集成環(huán)境,提供即使不知道匯編或不詳細(xì)知道8051也能編寫應(yīng)用程序的環(huán)境。這一章的內(nèi)容可以使工程人員快速并正確地熟悉編譯器環(huán)境。執(zhí)行集成環(huán)境C51,如圖2–1所示,出現(xiàn)編輯、項目、輸出等3個大窗口和,View,Project,Debug,F(xiàn)lash,Peripherals,Tools,SVCS,Window,Help等11個下拉菜單。 為了開始新的項目,選擇“ProjectNewProject”選項后,出現(xiàn)如圖2–2所示,然后選擇源程序所在路徑鍵入項目的名字并單擊“保存”按鈕。項目的名字會立即出現(xiàn)在集成環(huán)境的左上端。這個項目的名字最后為HEX文件的名字。因此,項目的名字最好不超過8個英文字母,并且盡量不采用中文為好。在這里采用的項目名字為“First_Project”。圖2–2建立一個新工程 接著選擇用8051開發(fā)的目標(biāo)硬件系統(tǒng)的MPU選項,如圖2–3所示。這個選項的是為了反映各個不同廠家生產(chǎn)的具有不同性能的8051而設(shè)計的,因此,只要正確選擇自己要開發(fā)的目標(biāo)硬件系統(tǒng)的MPU就可以了。圖2–3目標(biāo)硬件系統(tǒng)的CPU的選擇接著要進行“OptionforTarget”的設(shè)定,以修改跟編譯器有關(guān)的信息和跟目標(biāo)系統(tǒng)有關(guān)的事項。如圖2–4中,第一個選項“Target”設(shè)定目標(biāo)系統(tǒng)的存儲器、輸出文件以與與源程序文件有關(guān)的事項。在菜單欄中,選擇“Project/OpintionforTarget…”或者單擊工具欄中的“OptionforTarget”快捷按鈕就可以開始設(shè)定。在這里,要輸入系統(tǒng)的工作頻率、ROM與RAM的開始地址和大小以與存儲模式。首先,正確輸入目標(biāo)系統(tǒng)的晶振的頻率值后選擇存儲模式。圖2–4OptionforTarget為了讓8051的機器語言代碼下載到ROM,需要產(chǎn)生HEX代碼。圖2–5的Option選項用來設(shè)定HEN文件的名字和要存放的文件夾(SelectFolderforObject…)。通常編譯、調(diào)試到下載ROM需要進行多次編譯才能完成。如果不選擇“CreatHEXFile”,編譯后不將產(chǎn)生HEX代碼(即使不發(fā)生錯誤)。這樣可以避免不必要地反復(fù)寫硬盤以保護硬盤的磁道和扇區(qū)。圖2–5中右上端的“NameofExecutable”表示HEX代碼文件的名字,通常和項目文件同名,也可以指定別的名字。編譯完成后生成HEX代碼文件,并存放在項目所在路徑中。因為8051的知識產(chǎn)權(quán)是Intel公司的,其命令語的處理也跟隨Intel的結(jié)構(gòu),所以KEIL只支持IntelHEX文件的形式。另外,為了在源代碼層次上進行調(diào)試,最好選擇“DebugInformation”。為了便于編譯程序,最好選擇“BrowserInformation”。圖2–5OptionforTarget輸出文件設(shè)定 在使用監(jiān)控程序(Monitor)與目標(biāo)硬件系統(tǒng)和KEIL編譯器集成環(huán)境接口,能夠監(jiān)控變量的值和函數(shù)的執(zhí)行。監(jiān)控程序把監(jiān)控程序ROM移植到目標(biāo)硬件系統(tǒng)后運行。為了把監(jiān)控程序和目標(biāo)硬件系統(tǒng)接口,需要制作合適的硬件。監(jiān)控程序的監(jiān)控原理是,把監(jiān)控程序裝入ROM區(qū),把應(yīng)用程序代碼裝入RAM以后,執(zhí)行監(jiān)控程序,則監(jiān)控程序,調(diào)用應(yīng)用程序執(zhí)行。這樣,在RAM區(qū)域里代碼存儲區(qū)和數(shù)據(jù)存儲區(qū)共存。所以在使用監(jiān)控程序調(diào)試應(yīng)用程序的時候,需要在KEIL軟件中修改以下參數(shù),如圖2–6所示將原來的“CSEGAT0”修改成“CSEGAT08000h”(不包括雙引號)。如果使用燒寫器直接調(diào)試程序,則使用默認(rèn)的“CSEGAT0”即可。圖2–6Startup.A51文件修改同時將OptionforTarget中BL51Locate中的Code代碼段的設(shè)定修改成如圖2–7所示圖2–7OptionforTarget代碼段的設(shè)定 下面是可以驅(qū)動用于調(diào)試的仿真器和監(jiān)控器的環(huán)境設(shè)定選項卡“OptionforTarget/Debug”,如圖2–8所示。主要有2個單選項:左側(cè)有僅用軟件來仿真8051的軟件模擬仿真器單選項,右側(cè)有與目標(biāo)硬件系統(tǒng)邊傳送信息邊進行調(diào)試的“KEILMonitor–51Driver”和“TriscendE5Driver”單選項。由于KEIL8051集成開發(fā)環(huán)境綜合了調(diào)試(Debug)和Scope功能,所以稱之為dScope。監(jiān)控器的功能是把監(jiān)控器的ROM移植到目標(biāo)硬件系統(tǒng),用RS–232連接PC機和目標(biāo)硬件系統(tǒng),PC機的KEILdScope和目標(biāo)硬件系統(tǒng)互相傳送信息??梢韵螺d代碼,也可以查看目標(biāo)硬件系統(tǒng)的變量。圖2–8OptionforTarget/Debug第三章應(yīng)用程序的調(diào)試經(jīng)過上面的軟件設(shè)置,下面將介紹一下,如何在KEIL軟件中進行應(yīng)用程序的調(diào)試、編譯和連接。首先單擊“File”菜單,在下拉的菜單中單擊“New”選項,屏幕圖3–1所示,此時可以看到編輯窗口的標(biāo)題欄是空的,而光標(biāo)在編輯窗口閃爍。這個時候就可以鍵入應(yīng)用程序了。圖3–1含有空白的編輯窗口的屏幕單擊菜單條上的“File”菜單,在下拉菜單中選中“SaveAs”選項單擊,屏幕如圖3–2所示。在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名稱,同時,必須鍵入正確的擴展名。注意:如果使用C語言編寫程序,則擴展名為(*.C);如果是用匯編語言編寫的程序,則擴展名為(*.asm)。然后,單擊“保存”按鈕。圖3–2保存文件對話框然后需要將你已經(jīng)保存好的文件添加到該項目中,具體步驟為:單擊“SourceGroup1”然后在單擊鼠標(biāo)右鍵,屏幕如圖3–3所示。圖3–3把源程序添加到工程中接著單擊“Add‘SourceGroup1’”,此時屏幕將出現(xiàn)圖3–4所示的畫面,然后選擇你剛剛設(shè)定的函數(shù)文件名。單擊“Add”按鈕后則可以編寫C語言程序了;圖3–4選擇所需要的源程序現(xiàn)在編寫程序:#include<reg52.h>//包含文件#include<stdio.h>//包含文件voidmain(void){ SCON=0x52; TMOD=0x20; TH1=0xf3; TR1=1;printf(“HelloIamKEIL51.\n”);//打印程序執(zhí)行信息printf(“Iwillbeyourfriend.\n”);//打印程序執(zhí)行信息while(1);//等價于HALT指令}在輸入上述程序時,KEIL51會自動識別關(guān)鍵字,并以不同顏色提示用戶加以注意,這樣可以減低錯誤率,有利于提高編程效率。程序輸入完畢后,屏幕如圖3–5所示。圖3–5程序輸入完成后的屏幕顯示 編輯源程序之后,為了下載到目標(biāo)硬件系統(tǒng),要反復(fù)進行編譯和連接操作。這時使用的正是“Project”下拉菜單中的編譯命令?!癇uildTarget”()表示只編譯和連接在項目窗口修改過的源程序,因此適合于多種源程序文件的情況?!癛ebuildallTargetFile”()表示編譯和連接項目里登陸的所有源程序文件。相反,“Translate”()表示只編譯被激活的窗口中的源程序。另外,在編譯和連接過程中,可以利用“BuildStop”()停止正在進行中的編譯和連接,這個快捷按鈕是未被激活狀態(tài)時的畫面。在窗口底部可以看見KEIL項目文件(*.UV)的歷史記錄,列出最近使用過的文件,最多10個。除使用過的項目文件之外的歷史記錄,在“File”下拉菜單的下端可以到過去曾使用過的6個文件列表。 在設(shè)定“OptionforTarget”的存儲器和“Settings”項后。進行編譯并執(zhí)行dScope()。則出現(xiàn)如圖3–6所示畫面。當(dāng)然,在執(zhí)行前裝如監(jiān)控程序和目標(biāo)硬件系統(tǒng)已接好電源,并且串行通信電纜也已連接到PC機的COM端口。然后監(jiān)控程序和連接都正常,則在左下端狀態(tài)欄里顯示藍色的直方圖表,以表示正在裝入;如果通信電纜沒有連接到目標(biāo)硬件系統(tǒng),則顯示如3–7所示的信息。這時,要按目標(biāo)硬件系統(tǒng)的復(fù)位按鈕重新執(zhí)行監(jiān)控程序之后,單擊“TryAgain”或者“Settings……”,重新確定設(shè)定值。特別是要重新確定通信速度是否為設(shè)定為9600bps,目標(biāo)硬件系統(tǒng)的時鐘頻率是否設(shè)定為11.0592Mhz。如果這樣還是連接不上,單擊“StopDebugging”來退出bScope,重新進行上面的步驟。若還沒有任何進展,則只好從頭開始檢查一下目標(biāo)硬件系統(tǒng)和軟件的設(shè)置,在特殊情況下,有時往往是ROM里的指令代碼有問題,或者串行通信有問題。如果一切連接都正常,則不出現(xiàn)錯誤窗口,在dScope環(huán)境中變成準(zhǔn)備等待(Standby)狀態(tài)。圖3–6正在運行的源程序圖3–7錯誤信息提示 根據(jù)上述編寫的程序,若需要在電腦上顯示編寫的結(jié)果是不是滿足自己的要求,可不設(shè)定是KEILMonitor–51Driver仿真;可以使用UseSimulator進行仿真。在執(zhí)行dScope()后,再單擊()可以看見通過傳口發(fā)出去的信息內(nèi)容,如圖3–8所示。圖3–8顯示程序所實現(xiàn)的結(jié)果3.1項目中含有多個文件通常,一個項目是由多個文件構(gòu)成的,這是結(jié)構(gòu)化語言的特色之一。對于一個大的項目,同時可以由多人編程、調(diào)試,最后再連接到總的項目中去,這就構(gòu)成了工程項目。下面介紹多文件項目使用方法。為了便于說明,將C語言程序加上行號,列表如下:1 #include<reg52.h>//包含文件2 #include<stdio.h>//包含文件3 voidmain(void)//主程序4 {5 SCON=0x52;6 TMOD=0x20;7 TH1=0xf3;8 TR1=1;9 printf("HelloIamKEIL51.\n");//打印程序執(zhí)行信息10 printf("Iwillbeyourfriend.\n");//打印程序執(zhí)行信息11 while(1);//等價于HALT指令}現(xiàn)在把5—8行程序改寫成如下函數(shù):#include<reg52.h>//包含文件#include<stdio.h>//包含文件voidserial_initial(void){ SCON=0x52; TMOD=0x20; TH1=0xf3; TR1=1;}將上述函數(shù)保存為serial_initial.c。將剩余部分添加必要的兩行,保存為my_second.c,程序清單如下:#include<reg52.h>//包含文件#include<stdio.h>//包含文件externserial_initial();voidmain(void)//主程序{ serial_initial(); printf("HelloIamKEIL51.\n");//打印程序執(zhí)行信息 printf("Iwillbeyourfriend.\n");//打印程序執(zhí)行信息 while(1);//等價于HALT指令 }現(xiàn)在創(chuàng)建第二個工程項目,步驟如下:(1)創(chuàng)建項目,工程名為my_second;(2)選擇所用單片機,Ateml公司的AT89s52;(3)添加文件,將已經(jīng)編寫好的my_second.c和serial_initial.c添加到項目中去,完成后,(4)屏幕如圖3–1–1所示;(5)編譯項目,生成機器代碼;(6)執(zhí)行當(dāng)前項目,實現(xiàn)軟件仿真;(7)查看程序的執(zhí)行結(jié)果,觀察屏幕的輸出結(jié)果(與圖3–8完全相同)。圖3–1–1my_second屏幕顯示圖由于Monitor-51開發(fā)系統(tǒng)比較簡單,占用了一些系統(tǒng)資源,有時給使用者帶來了不便。實際編程中常要解決一下兩個問題:(1)串行接口功能:串行通信是MCS-51單片機經(jīng)常要用到的功能,而這里選用的MCS-51系列單片機AT89S52只有一個串行通信口,在與PC機相連接的仿真狀態(tài)時,串行口用于與PC機通信。若在應(yīng)用程序中也用到串行口,就會發(fā)生沖突。解決方法一是用戶程序裝載完畢后,運行用戶程序,再斷開仿真板與PC機的串行通信線,這樣串口就可以歸用戶程序使用了,當(dāng)然這時PC機就不能在線調(diào)試了;另外,還可以選用其它的帶兩個串行口的MCS-51系列芯片。(2)外部存儲空間:用戶程序越長,占用的外部數(shù)據(jù)存儲空間將越大。解決的方法是對較長的程序進行分段調(diào)試。第四章實驗程序4.1鍵盤顯示程序硬件環(huán)境:單片機最小系統(tǒng)、8279鍵盤顯示電路實現(xiàn)功能:通過按鍵輸入,在數(shù)碼管上顯示相應(yīng)的數(shù)字C源程序://**********************************************//C按鍵為清屏幕//D按鍵為一位一位清除//B按鍵為小數(shù)點//**********************************************#include<reg52.H>#include<ABSACC.H>#defineCOMXBYTE[0x7001]#defineDATXBYTE[0x7000]#defineucharunsignedcharucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharidatadiss[8]={0,1,2,3,4,5,6,7};ucharkeyin();uchardeky();//*************************************voidmain(void){unsignedintii;uchari,k,n,m,j,s;for(ii=0;ii<20000;ii++);COM=0xD1;//清楚總命令清除RAMCOM=0x00;//鍵盤、顯示方式、分頻COM=0x38;while(1){k=keyin();switch(k){case0x0c:COM=0xD1;//清楚屏幕i=0; continue; break;case0x0d:i--;//按位清除可以一位一位的清除數(shù)碼管COM=0x90;COM=i+0x80;DAT=0; continue; break;case0x0b:i--;//小數(shù)點COM=0x90; COM=i+0x80; j=diss[i]; s=table[j]; DAT=s|0x80;i++; continue; break;default:break;}if(i<8){COM=0x90;COM=i+0x80;diss[i]=k;DAT=table[k];i++;}elsei=0;}}//***************取鍵值函數(shù)************ucharkeyin(void){uchari,j,k;while(deky()==0);COM=0x40;j=DAT;i=j&0x07;i=i<<3;k=j&0x38;k=k>>3;i=i+k;return(i);}uchardeky(void){uchark;k=COM;return(k&0x0f);}4.28255擴展I/O口實驗硬件環(huán)境:單片機最小系統(tǒng)、8279鍵盤顯示電路實現(xiàn)功能:通過按鍵輸入數(shù)字量,則在8255的三個輸出口分別輸出相應(yīng)的數(shù)字量C源程序:/**//*函數(shù)名稱:8255A程序調(diào)試/*/*版本:V1.0/*完成時間:2005年8月9日/**///文件名:main.c#include"EXAMPLE.h"voidmain(void){unsignedchark,i,j; Init_8279(); while(1) { k=Keyin(); switch(k) { case0x0a://確定發(fā)送 j=buffer[0]<<4; j=buffer[1]|j; Init_8255_mode0(j); continue; break; case0x0c://清除屏幕 Clear_LED(); i=0; continue; default: break; } if(i<8) { COM=0x90; COM=i+0x80; buffer[i]=k; DAT=table[k]; i++; } else i=0;}}//文件名:Init_8279#include"reg52.H"#include"ABSACC.H"http://鍵盤顯示8279的數(shù)據(jù)地址和命令地址#defineCOMXBYTE[0x7001]#defineDATXBYTE[0x7000]unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71};#definecount8//緩存空間大小unsignedcharidatabuffer[count];//數(shù)據(jù)輸入緩存unsignedcharDeky();unsignedcharKeyin();/*初始化8279*/voidInit_8279(void){COM=0xD1;//清楚總命令清除RAMCOM=0x00;//鍵盤、顯示方式、分頻COM=0x38;}/*設(shè)置數(shù)碼管顯示*//*ddr為數(shù)據(jù)顯示的位置/*k為取緩存數(shù)據(jù)的地址*//**/voidDis_LED(unsignedcharddr,unsignedchark){unsignedchari,j; COM=0x90;//取高4位數(shù)據(jù) COM=ddr+0x80;i=buffer[k]; j=0xf0&i; j=j>>4; DAT=table[j]; COM=0x90;//取低四位數(shù)據(jù) COM=++ddr+0x80;i=buffer[k]; j=0x0f&i; DAT=table[j]; }/*顯示小數(shù)點*/voidDis_Point(unsignedcharddr){unsignedchari;COM=0x90;COM=ddr+0x80;i=buffer[ddr];DAT=table[i]|0x80;}/*清除屏幕*/voidClear_LED(void){COM=0xD1;}/*取鍵值函數(shù)*/unsignedcharDeky(void){unsignedchark;k=COM;return(k&0x0f);}unsignedcharKeyin(void){unsignedchari,j,k;while(Deky()==0);COM=0x40;j=DAT;i=j&0x07;i=i<<3;k=j&0x38;k=k>>3;i=i+k;return(i);//返回鍵值}/**///文件名:Init_8255/**//*8255地址0x7800/*接口連線:/*單片機8255/*RW>RW/*WR>WR/*138-Y7>CS/*573-A0\A1>A0\A1/*RESET>RESET/**/#include"reg52.H"#include"ABSACC.H"#defineCOM_PAXBYTE[0x7800]//PA口地址#defineCOM_PBXBYTE[0x7801]//PB口地址#defineCOM_PCXBYTE[0x7802]//PC口地址#defineCOM_CtrlXBYTE[0x7803]//控制字地址/**//*8255方式控制字/*--D7--D6--D5--D4--D3--D2--D1--D0--/*||/*|D7:置位方式;1有效/*A|D6~D5:方式選擇:00方式0;01方式1;10方式2/*組|D4:端口A;1為輸入;0為輸出/*|D3:端口C上半部;1為輸入;0為輸出/*||/*/*||/*|D2:方式選擇:0為方式0;1為方式1;/*B|D1:端口B:1為輸入;0為輸出;/*組|D0:端口C下半部分:1為輸入;0為輸出;/*||/**//**//*函數(shù)名稱:8255初始化;方式0/*/*函數(shù)功能:將Value的值,分別送到PA、PB、PC口/*/*返回值:無/**/voidInit_8255_mode0(unsignedcharValue){COM_Ctrl=0x80;//A、B、C口方式0輸出COM_PA=Value;COM_PB=Value;COM_PC=Value;}/**/4.3D/A實驗硬件環(huán)境:單片機最小系統(tǒng)、8279鍵盤顯示電路、0832電路實現(xiàn)功能:通過鍵盤輸入數(shù)字量,在0832的DACTEST輸出相應(yīng)的模擬量C源程序://**********************************************//C按鍵為清屏幕//D按鍵為一位一位清除//F按鍵為確認(rèn)鍵//**********************************************#include<reg52.H>#include<ABSACC.H>#defineCOMXBYTE[0x7001]#defineDATXBYTE[0x7000]#defineDAC0832XBYTE[0x5800]#defineucharunsignedcharucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharidatadiss[8]={0,1,2,3,4,5,6,7};ucharkeyin();uchardeky();//*************************************voidmain(void){unsignedintii;uchari,k,n,m,j,s;for(ii=0;ii<20000;ii++);COM=0xD1;COM=0x00;COM=0x38;while(1){k=keyin();switch(k){case0x0c:COM=0xD1;i=0; continue; break;case0x0d:i--;COM=0x90;COM=i+0x80;DAT=0; continue; break;case0x0f:n=diss[0]<<4; m=diss[1]|n; do{ DAC0832=m; }while(keyin()==0);continue;break;default:break;}if(i<8){COM=0x90;COM=i+0x80;diss[i]=k;DAT=table[k];i++;}elsei=0;}}//***************取鍵值函數(shù)************ucharkeyin(void){uchari,j,k;while(deky()==0);COM=0x40;j=DAT;i=j&0x07;i=i<<3;k=j&0x38;k=k>>3;i=i+k;return(i);}//*************************************uchardeky(void){uchark;k=COM;return(k&0x0f);}//*************************************4.4DS12887實驗硬件環(huán)境:單片機最小系統(tǒng)、8279鍵盤顯示電路實現(xiàn)功能:在數(shù)碼管上顯示小時、分鐘、秒以與年、月、日、星期通過P1.1的切換顯示的內(nèi)容;C源程序://*****************************************//沒有用中斷;IRQ為空//接口連線:ALE>AS//WR>R/W//RD>DS//版本:V1.0//完成時間:2005年7月24日//*****************************************#include<reg52.H>#include<ABSACC.H>#defineCOMXBYTE[0x7001]#defineDATXBYTE[0x7000]#defineTM_secondXBYTE[0x6000]//秒#defineAM_secondXBYTE[0x6001]//秒鬧#defineTM_minuteXBYTE[0x6002]//分#defineAM_minuteXBYTE[0x6003]//分鬧#defineTM_hourXBYTE[0x6004]//時#defineAM_hourXBYTE[0x6005]//時鬧#defineTM_weekXBYTE[0x6006]//周#defineTM_dayXBYTE[0x6007]//日(2位數(shù))#defineTM_monthXBYTE[0x6008]//月(2位數(shù))#defineTM_yearXBYTE[0x6009]//年(2位)#defineREG_aXBYTE[0x600a]//寄存器A#defineREG_bXBYTE[0x600b]#defineREG_cXBYTE[0x600c]#defineREG_dXBYTE[0x600d]#defineRAM_114XBYTE[0x600e]#defineucharunsignedcharunsignedcharidatatime_buf[7]={0,1,2,3,4,5,6};sbitTime_chang_Year=P1^1;//控制時間和年月日切換ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voidsettime()//設(shè)置系統(tǒng)時間{ucharxdatai;i=REG_d;REG_a=0x70; REG_b=0xa2;//輸出為BCD碼24小時進制TM_second=time_buf[0];TM_minute=time_buf[1];TM_hour=time_buf[2];TM_week=time_buf[3];TM_day=time_buf[4];TM_month=time_buf[5];TM_year=time_buf[6];REG_b=0x22;//芯片更新正常進行REG_a=0x20; i=REG_c;}voidreadtime()//讀取系統(tǒng)時間{ucharxdataa;do { a=REG_a; } while((a&0x80)==0x80);//UIP為1時更新即將開始time_buf[0]=TM_second;time_buf[1]=TM_minute;time_buf[2]=TM_hour;time_buf[3]=TM_week;time_buf[4]=TM_day;time_buf[5]=TM_month;time_buf[6]=TM_year;}voidstart12887(void)//啟動時鐘{ucharxdatai;i=REG_d;REG_a=0x70;//晶體震蕩器開始并保持時鐘運行REG_b=0xa2;AM_second=0xff;AM_minute=0xff;AM_hour=0xff;REG_b=0x22; REG_a=0x20;i=REG_c;}voidmain(void){uchark;unsignedinti; for(i=0;i<20000;i++);EX1=0; COM=0xD1;COM=0x00;COM=0x38;start12887();//*****************設(shè)置顯示初始值*****************time_buf[0]=0x00;//sectime_buf[1]=0x00;//mintime_buf[2]=0x00;

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論