版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
/第一章KEIL編譯器的安裝KEIL()編譯器評(píng)估版本把目標(biāo)代碼長(zhǎng)度限制在2KB以內(nèi),可以從網(wǎng)上下載使用。而8051編譯器正式版本由1張CD、1張有序列號(hào)碼的1.44MB軟盤和連接打印機(jī)端口的硬件鎖定鍵組成。利用評(píng)估版本(Evaluation)對(duì)源程序通過了便宜,也生成了HEX文件,但就是不能正常運(yùn)行。這是為什么?使用者可以隨時(shí)從網(wǎng)上下載KEIL評(píng)估版本進(jìn)行安裝,但是編譯長(zhǎng)度小于2KB的目標(biāo)代碼,并且代碼的起始(Start)地址自動(dòng)設(shè)定為4000h,所以硬件組成也應(yīng)予以支持。免費(fèi)獲得的評(píng)估版還有別的限制,為了把所生成HEX文件下載到地址不是4000h的ROM中,就要利用hex2bin.exe實(shí)用程序把hex變成bin后下載到ROM,只有這樣才能正常運(yùn)行。hex2bin.exe程序可以從網(wǎng)上下載。下載KEILC51安裝程序后,雙擊Setup.exe文件約幾秒后,在安裝向?qū)Т翱谏峡梢赃x擇安裝、更新、搬移程序三個(gè)選項(xiàng),如圖1–2所示。圖1–1安裝項(xiàng)目的選擇在默認(rèn)(InstallSupportforAdditionalMicrocontrollerArchitectures)的情況下,點(diǎn)擊Next>進(jìn)入圖1–2所示畫面。EvalVersion(EvaluationVersion)評(píng)估版本;FullVersion正式版本;Quit退出安裝;在安裝過程中,鍵入寫在軟盤上的序列號(hào)碼,選擇驅(qū)動(dòng)器路徑,把軟盤插入驅(qū)動(dòng)器繼續(xù)安裝。這時(shí),在程序設(shè)置信息項(xiàng)目中出現(xiàn)“LastName”項(xiàng)目,必須鍵入才能激活“Next”按鈕,比如自己的“姓”或其他。在安裝盤上有序列號(hào)碼和與安裝有關(guān)的重要信息,因此有必要把安裝盤進(jìn)行備份以保護(hù)重要的信息。若沒有序列號(hào)的情況下請(qǐng)選擇EvalVersion(EvaluationVersion)評(píng)估版本進(jìn)行安裝。圖1–2正式版與評(píng)估版的選擇如果KeiluVision2的KEIL編譯器安裝結(jié)束,則會(huì)生成下列路徑和圖標(biāo):以最上層路徑為C:\KEIL為假設(shè)予以羅列。安裝結(jié)束后若想運(yùn)行,則雙擊屏幕上的KeiluVision2集成運(yùn)行快捷按鈕。在Windows開始-->程序菜單上也會(huì)發(fā)現(xiàn)同樣的快捷按鈕。表1–1文件夾的結(jié)構(gòu)路徑說明C51\ASM匯編SFR(SpecialFunctionRegister)定義和源程序樣本文件C51\BIN編譯器的執(zhí)行文件所位置C51\EXAMPLES應(yīng)用程序視圖文件C51\RTX51實(shí)時(shí)操作系統(tǒng)Full文件,255個(gè)任務(wù)C51\RTX_TINY實(shí)時(shí)操作系統(tǒng)Tiny文件,16個(gè)任務(wù)C51\INCC語(yǔ)言中與8051有關(guān)的所有包含文件都在此處C51\LIB庫(kù)、開始代碼、輸入/輸出源程序C51\MON51監(jiān)控目標(biāo)硬件系統(tǒng)時(shí)所使用的HEX代碼生成文件UV2編譯器集成執(zhí)行文件KEIL編譯器C51以ANSI(AmericanNationalStandardInstitute)規(guī)格為標(biāo)準(zhǔn),所以使用C語(yǔ)言的開發(fā)人員用ANSI編寫程序就可以(使用ClassicC語(yǔ)言也可以)。第二章KeiluVision2快速入門為了能讓使用者快速入門,先簡(jiǎn)單介紹8051。8051單片機(jī)是一個(gè)具有40個(gè)引腳的長(zhǎng)方形芯片,其中,有5V直流電源Vcc(因?yàn)閮?nèi)部有很多邏輯電路,應(yīng)使用波紋系數(shù)小的直流電源)和電源地GND引腳。還有至少保持2個(gè)機(jī)器周期(一個(gè)機(jī)器周期=12個(gè)振蕩周期)為高電就復(fù)位的RESET引腳。 端口P0是由開漏(用作I/O口時(shí)需要外部接上拉電阻)的驅(qū)動(dòng)器構(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口,兼有串行通訊、外部中斷、定時(shí)器、讀/寫的特殊功能;X1是振蕩放大器的反向輸入引腳,X2是反向輸出引腳,因此,使用晶體時(shí)把晶振并聯(lián)連接到X1和X2上,使用外部振蕩器時(shí)只連接X1。 ALE/PROG(AddressLatchEnableOutput/ProgramPulseInput)引腳的ALE,在訪問外部存儲(chǔ)器時(shí)用來鎖存低8位地址,而PROG在編程EPROM時(shí)用來進(jìn)行脈沖輸入。PSEN(ProgramStrobeEnable)引腳信號(hào)作為訪問外部程序存儲(chǔ)器的讀選通,每個(gè)機(jī)器周期PSEN被激活2次,在ALE的下降沿將端口0的地址鎖存到外部鎖存器。EA/Vpp(ExteralAccessEnable)引腳連接到GND,則0~FFFFH地址都訪問外部程序存儲(chǔ)器;連接到Vcc,則訪問內(nèi)部程序存儲(chǔ)趨。Vpp是對(duì)8751編程電壓輸入端子,其電壓為12.75~21V,具體值隨不同型號(hào)芯片而有所不同。 雙擊KeiluVision2集成執(zhí)行快捷按鈕,將彈出如圖2–1所示的窗口。這是一個(gè)初始開發(fā)集成窗口。如果沒有做過任何項(xiàng)目,則窗口上什么也沒有。窗口的上端有10個(gè)下拉菜單。C51在管理程序時(shí),采用所謂的項(xiàng)目(Project)文件來進(jìn)行管理。項(xiàng)目把程序的環(huán)境甚至和編圖2–1KeiluVision2的執(zhí)行輯有關(guān)的全部信息都保存著,因此使用者可以把多個(gè)程序以項(xiàng)目為單位使用C51就可以了。由于C518051KEIL編譯器變成集成環(huán)境,提供即使不知道匯編或不詳細(xì)知道8051也能編寫應(yīng)用程序的環(huán)境。這一章的內(nèi)容可以使工程人員快速并正確地熟悉編譯器環(huán)境。執(zhí)行集成環(huán)境C51,如圖2–1所示,出現(xiàn)編輯、項(xiàng)目、輸出等3個(gè)大窗口和,View,Project,Debug,F(xiàn)lash,Peripherals,Tools,SVCS,Window,Help等11個(gè)下拉菜單。 為了開始新的項(xiàng)目,選擇“ProjectNewProject”選項(xiàng)后,出現(xiàn)如圖2–2所示,然后選擇源程序所在路徑鍵入項(xiàng)目的名字并單擊“保存”按鈕。項(xiàng)目的名字會(huì)立即出現(xiàn)在集成環(huán)境的左上端。這個(gè)項(xiàng)目的名字最后為HEX文件的名字。因此,項(xiàng)目的名字最好不超過8個(gè)英文字母,并且盡量不采用中文為好。在這里采用的項(xiàng)目名字為“First_Project”。圖2–2建立一個(gè)新工程 接著選擇用8051開發(fā)的目標(biāo)硬件系統(tǒng)的MPU選項(xiàng),如圖2–3所示。這個(gè)選項(xiàng)的是為了反映各個(gè)不同廠家生產(chǎn)的具有不同性能的8051而設(shè)計(jì)的,因此,只要正確選擇自己要開發(fā)的目標(biāo)硬件系統(tǒng)的MPU就可以了。圖2–3目標(biāo)硬件系統(tǒng)的CPU的選擇接著要進(jìn)行“OptionforTarget”的設(shè)定,以修改跟編譯器有關(guān)的信息和跟目標(biāo)系統(tǒng)有關(guān)的事項(xiàng)。如圖2–4中,第一個(gè)選項(xiàng)“Target”設(shè)定目標(biāo)系統(tǒng)的存儲(chǔ)器、輸出文件以與與源程序文件有關(guān)的事項(xiàng)。在菜單欄中,選擇“Project/OpintionforTarget…”或者單擊工具欄中的“OptionforTarget”快捷按鈕就可以開始設(shè)定。在這里,要輸入系統(tǒng)的工作頻率、ROM與RAM的開始地址和大小以與存儲(chǔ)模式。首先,正確輸入目標(biāo)系統(tǒng)的晶振的頻率值后選擇存儲(chǔ)模式。圖2–4OptionforTarget為了讓8051的機(jī)器語(yǔ)言代碼下載到ROM,需要產(chǎn)生HEX代碼。圖2–5的Option選項(xiàng)用來設(shè)定HEN文件的名字和要存放的文件夾(SelectFolderforObject…)。通常編譯、調(diào)試到下載ROM需要進(jìn)行多次編譯才能完成。如果不選擇“CreatHEXFile”,編譯后不將產(chǎn)生HEX代碼(即使不發(fā)生錯(cuò)誤)。這樣可以避免不必要地反復(fù)寫硬盤以保護(hù)硬盤的磁道和扇區(qū)。圖2–5中右上端的“NameofExecutable”表示HEX代碼文件的名字,通常和項(xiàng)目文件同名,也可以指定別的名字。編譯完成后生成HEX代碼文件,并存放在項(xiàng)目所在路徑中。因?yàn)?051的知識(shí)產(chǎn)權(quán)是Intel公司的,其命令語(yǔ)的處理也跟隨Intel的結(jié)構(gòu),所以KEIL只支持IntelHEX文件的形式。另外,為了在源代碼層次上進(jìn)行調(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)后運(yùn)行。為了把監(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ū)域里代碼存儲(chǔ)區(qū)和數(shù)據(jù)存儲(chǔ)區(qū)共存。所以在使用監(jiān)控程序調(diào)試應(yīng)用程序的時(shí)候,需要在KEIL軟件中修改以下參數(shù),如圖2–6所示將原來的“CSEGAT0”修改成“CSEGAT08000h”(不包括雙引號(hào))。如果使用燒寫器直接調(diào)試程序,則使用默認(rèn)的“CSEGAT0”即可。圖2–6Startup.A51文件修改同時(shí)將OptionforTarget中BL51Locate中的Code代碼段的設(shè)定修改成如圖2–7所示圖2–7OptionforTarget代碼段的設(shè)定 下面是可以驅(qū)動(dòng)用于調(diào)試的仿真器和監(jiān)控器的環(huán)境設(shè)定選項(xiàng)卡“OptionforTarget/Debug”,如圖2–8所示。主要有2個(gè)單選項(xiàng):左側(cè)有僅用軟件來仿真8051的軟件模擬仿真器單選項(xiàng),右側(cè)有與目標(biāo)硬件系統(tǒng)邊傳送信息邊進(jìn)行調(diào)試的“KEILMonitor–51Driver”和“TriscendE5Driver”單選項(xiàng)。由于KEIL8051集成開發(fā)環(huán)境綜合了調(diào)試(Debug)和Scope功能,所以稱之為dScope。監(jiān)控器的功能是把監(jiān)控器的ROM移植到目標(biāo)硬件系統(tǒng),用RS–232連接PC機(jī)和目標(biāo)硬件系統(tǒng),PC機(jī)的KEILdScope和目標(biāo)硬件系統(tǒng)互相傳送信息??梢韵螺d代碼,也可以查看目標(biāo)硬件系統(tǒng)的變量。圖2–8OptionforTarget/Debug第三章應(yīng)用程序的調(diào)試經(jīng)過上面的軟件設(shè)置,下面將介紹一下,如何在KEIL軟件中進(jìn)行應(yīng)用程序的調(diào)試、編譯和連接。首先單擊“File”菜單,在下拉的菜單中單擊“New”選項(xiàng),屏幕圖3–1所示,此時(shí)可以看到編輯窗口的標(biāo)題欄是空的,而光標(biāo)在編輯窗口閃爍。這個(gè)時(shí)候就可以鍵入應(yīng)用程序了。圖3–1含有空白的編輯窗口的屏幕單擊菜單條上的“File”菜單,在下拉菜單中選中“SaveAs”選項(xiàng)單擊,屏幕如圖3–2所示。在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名稱,同時(shí),必須鍵入正確的擴(kuò)展名。注意:如果使用C語(yǔ)言編寫程序,則擴(kuò)展名為(*.C);如果是用匯編語(yǔ)言編寫的程序,則擴(kuò)展名為(*.asm)。然后,單擊“保存”按鈕。圖3–2保存文件對(duì)話框然后需要將你已經(jīng)保存好的文件添加到該項(xiàng)目中,具體步驟為:?jiǎn)螕簟癝ourceGroup1”然后在單擊鼠標(biāo)右鍵,屏幕如圖3–3所示。圖3–3把源程序添加到工程中接著單擊“Add‘SourceGroup1’”,此時(shí)屏幕將出現(xiàn)圖3–4所示的畫面,然后選擇你剛剛設(shè)定的函數(shù)文件名。單擊“Add”按鈕后則可以編寫C語(yǔ)言程序了;圖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);//等價(jià)于HALT指令}在輸入上述程序時(shí),KEIL51會(huì)自動(dòng)識(shí)別關(guān)鍵字,并以不同顏色提示用戶加以注意,這樣可以減低錯(cuò)誤率,有利于提高編程效率。程序輸入完畢后,屏幕如圖3–5所示。圖3–5程序輸入完成后的屏幕顯示 編輯源程序之后,為了下載到目標(biāo)硬件系統(tǒng),要反復(fù)進(jìn)行編譯和連接操作。這時(shí)使用的正是“Project”下拉菜單中的編譯命令?!癇uildTarget”()表示只編譯和連接在項(xiàng)目窗口修改過的源程序,因此適合于多種源程序文件的情況。“RebuildallTargetFile”()表示編譯和連接項(xiàng)目里登陸的所有源程序文件。相反,“Translate”()表示只編譯被激活的窗口中的源程序。另外,在編譯和連接過程中,可以利用“BuildStop”()停止正在進(jìn)行中的編譯和連接,這個(gè)快捷按鈕是未被激活狀態(tài)時(shí)的畫面。在窗口底部可以看見KEIL項(xiàng)目文件(*.UV)的歷史記錄,列出最近使用過的文件,最多10個(gè)。除使用過的項(xiàng)目文件之外的歷史記錄,在“File”下拉菜單的下端可以到過去曾使用過的6個(gè)文件列表。 在設(shè)定“OptionforTarget”的存儲(chǔ)器和“Settings”項(xiàng)后。進(jìn)行編譯并執(zhí)行dScope()。則出現(xiàn)如圖3–6所示畫面。當(dāng)然,在執(zhí)行前裝如監(jiān)控程序和目標(biāo)硬件系統(tǒng)已接好電源,并且串行通信電纜也已連接到PC機(jī)的COM端口。然后監(jiān)控程序和連接都正常,則在左下端狀態(tài)欄里顯示藍(lán)色的直方圖表,以表示正在裝入;如果通信電纜沒有連接到目標(biāo)硬件系統(tǒng),則顯示如3–7所示的信息。這時(shí),要按目標(biāo)硬件系統(tǒng)的復(fù)位按鈕重新執(zhí)行監(jiān)控程序之后,單擊“TryAgain”或者“Settings……”,重新確定設(shè)定值。特別是要重新確定通信速度是否為設(shè)定為9600bps,目標(biāo)硬件系統(tǒng)的時(shí)鐘頻率是否設(shè)定為11.0592Mhz。如果這樣還是連接不上,單擊“StopDebugging”來退出bScope,重新進(jìn)行上面的步驟。若還沒有任何進(jìn)展,則只好從頭開始檢查一下目標(biāo)硬件系統(tǒng)和軟件的設(shè)置,在特殊情況下,有時(shí)往往是ROM里的指令代碼有問題,或者串行通信有問題。如果一切連接都正常,則不出現(xiàn)錯(cuò)誤窗口,在dScope環(huán)境中變成準(zhǔn)備等待(Standby)狀態(tài)。圖3–6正在運(yùn)行的源程序圖3–7錯(cuò)誤信息提示 根據(jù)上述編寫的程序,若需要在電腦上顯示編寫的結(jié)果是不是滿足自己的要求,可不設(shè)定是KEILMonitor–51Driver仿真;可以使用UseSimulator進(jìn)行仿真。在執(zhí)行dScope()后,再單擊()可以看見通過傳口發(fā)出去的信息內(nèi)容,如圖3–8所示。圖3–8顯示程序所實(shí)現(xiàn)的結(jié)果3.1項(xiàng)目中含有多個(gè)文件通常,一個(gè)項(xiàng)目是由多個(gè)文件構(gòu)成的,這是結(jié)構(gòu)化語(yǔ)言的特色之一。對(duì)于一個(gè)大的項(xiàng)目,同時(shí)可以由多人編程、調(diào)試,最后再連接到總的項(xiàng)目中去,這就構(gòu)成了工程項(xiàng)目。下面介紹多文件項(xiàng)目使用方法。為了便于說明,將C語(yǔ)言程序加上行號(hào),列表如下: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);//等價(jià)于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);//等價(jià)于HALT指令 }現(xiàn)在創(chuàng)建第二個(gè)工程項(xiàng)目,步驟如下:(1)創(chuàng)建項(xiàng)目,工程名為my_second;(2)選擇所用單片機(jī),Ateml公司的AT89s52;(3)添加文件,將已經(jīng)編寫好的my_second.c和serial_initial.c添加到項(xiàng)目中去,完成后,(4)屏幕如圖3–1–1所示;(5)編譯項(xiàng)目,生成機(jī)器代碼;(6)執(zhí)行當(dāng)前項(xiàng)目,實(shí)現(xiàn)軟件仿真;(7)查看程序的執(zhí)行結(jié)果,觀察屏幕的輸出結(jié)果(與圖3–8完全相同)。圖3–1–1my_second屏幕顯示圖由于Monitor-51開發(fā)系統(tǒng)比較簡(jiǎn)單,占用了一些系統(tǒng)資源,有時(shí)給使用者帶來了不便。實(shí)際編程中常要解決一下兩個(gè)問題:(1)串行接口功能:串行通信是MCS-51單片機(jī)經(jīng)常要用到的功能,而這里選用的MCS-51系列單片機(jī)AT89S52只有一個(gè)串行通信口,在與PC機(jī)相連接的仿真狀態(tài)時(shí),串行口用于與PC機(jī)通信。若在應(yīng)用程序中也用到串行口,就會(huì)發(fā)生沖突。解決方法一是用戶程序裝載完畢后,運(yùn)行用戶程序,再斷開仿真板與PC機(jī)的串行通信線,這樣串口就可以歸用戶程序使用了,當(dāng)然這時(shí)PC機(jī)就不能在線調(diào)試了;另外,還可以選用其它的帶兩個(gè)串行口的MCS-51系列芯片。(2)外部存儲(chǔ)空間:用戶程序越長(zhǎng),占用的外部數(shù)據(jù)存儲(chǔ)空間將越大。解決的方法是對(duì)較長(zhǎng)的程序進(jìn)行分段調(diào)試。第四章實(shí)驗(yàn)程序4.1鍵盤顯示程序硬件環(huán)境:?jiǎn)纹瑱C(jī)最小系統(tǒng)、8279鍵盤顯示電路實(shí)現(xiàn)功能:通過按鍵輸入,在數(shù)碼管上顯示相應(yīng)的數(shù)字C源程序://**********************************************//C按鍵為清屏幕//D按鍵為一位一位清除//B按鍵為小數(shù)點(diǎn)//**********************************************#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ù)點(diǎn)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擴(kuò)展I/O口實(shí)驗(yàn)硬件環(huán)境:?jiǎn)纹瑱C(jī)最小系統(tǒng)、8279鍵盤顯示電路實(shí)現(xiàn)功能:通過按鍵輸入數(shù)字量,則在8255的三個(gè)輸出口分別輸出相應(yīng)的數(shù)字量C源程序:/**//*函數(shù)名稱:8255A程序調(diào)試/*/*版本:V1.0/*完成時(shí)間: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ù)點(diǎn)*/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/*接口連線:/*單片機(jī)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實(shí)驗(yàn)硬件環(huán)境:?jiǎn)纹瑱C(jī)最小系統(tǒng)、8279鍵盤顯示電路、0832電路實(shí)現(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實(shí)驗(yàn)硬件環(huán)境:?jiǎn)纹瑱C(jī)最小系統(tǒng)、8279鍵盤顯示電路實(shí)現(xiàn)功能:在數(shù)碼管上顯示小時(shí)、分鐘、秒以與年、月、日、星期通過P1.1的切換顯示的內(nèi)容;C源程序://*****************************************//沒有用中斷;IRQ為空//接口連線:ALE>AS//WR>R/W//RD>DS//版本:V1.0//完成時(shí)間: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]//時(shí)#defineAM_hourXBYTE[0x6005]//時(shí)鬧#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;//控制時(shí)間和年月日切換ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voidsettime()//設(shè)置系統(tǒng)時(shí)間{ucharxdatai;i=REG_d;REG_a=0x70; REG_b=0xa2;//輸出為BCD碼24小時(shí)進(jìn)制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;//芯片更新正常進(jìn)行REG_a=0x20; i=REG_c;}voidreadtime()//讀取系統(tǒng)時(shí)間{ucharxdataa;do { a=REG_a; } while((a&0x80)==0x80);//UIP為1時(shí)更新即將開始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)//啟動(dòng)時(shí)鐘{ucharxdatai;i=REG_d;REG_a=0x70;//晶體震蕩器開始并保持時(shí)鐘運(yùn)行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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具定制尾貨銷售合同模板
- 無人機(jī)性能分析綜合方案
- 物料報(bào)廢流程執(zhí)行協(xié)議
- 資產(chǎn)運(yùn)營(yíng)穩(wěn)定責(zé)任承諾書7篇
- 放風(fēng)箏的經(jīng)歷記事作文6篇范文
- 超時(shí)率管理?xiàng)l款協(xié)議
- 大件配送物流承攬協(xié)議
- 物聯(lián)網(wǎng)智能設(shè)備管理服務(wù)協(xié)議
- 《中小學(xué)教師職業(yè)壓力應(yīng)對(duì)策略的實(shí)證分析與啟示》教學(xué)研究課題報(bào)告
- 安全培訓(xùn)協(xié)議范本
- 門窗合同范本的模板
- 深度解析(2026)《DLT 2121-2020高壓直流輸電換流閥冷卻系統(tǒng)化學(xué)監(jiān)督導(dǎo)則》
- 2025北京日?qǐng)?bào)社招聘10人參考筆試題庫(kù)及答案解析
- 質(zhì)量部 2025 年度工作總結(jié)及 2026 年工作計(jì)劃
- GB/T 7928-2025地鐵車輛通用技術(shù)條件
- 2025廣西國(guó)控集團(tuán)秋季招聘筆試歷年參考題庫(kù)附帶答案詳解
- 社會(huì)工作專業(yè)人才隊(duì)伍建設(shè)中長(zhǎng)期規(guī)劃
- 造影劑腦病新穎課件
- 月租電動(dòng)車合同范本
- 專題一:馬克思主義中國(guó)化及其理論基礎(chǔ)練習(xí)題
- 巴赫哥德堡變奏曲課件
評(píng)論
0/150
提交評(píng)論