




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 KEIL 編譯器的安裝KEIL(利用評(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)上下載。下載KEIL C51安裝程序后,雙擊Setup.exe文件約幾秒
2、后,在安裝向?qū)Т翱谏峡梢赃x擇安裝、更新、搬移程序三個(gè)選項(xiàng),如圖1 2 所示。圖1 1 安裝項(xiàng)目的選擇在默認(rèn) (Install Support for Additional Microcontroller Architectures) 的情況下,點(diǎn)擊Next>進(jìn)入圖1 2 所示畫面。Eval Version (Evaluation Version) 評(píng)估版本;Full Version 正式版本;Quit 退出安裝;在安裝過程中,鍵入寫在軟盤上的序列號(hào)碼,選擇驅(qū)動(dòng)器路徑,把軟盤插入驅(qū)動(dòng)器繼續(xù)安裝。這時(shí),在程序設(shè)置信息項(xiàng)目中出現(xiàn)“Last Name”項(xiàng)目,必須鍵入才能激活“Next”按鈕,比如
3、自己的“姓”或其他。在安裝盤上有序列號(hào)碼和與安裝有關(guān)的重要信息,因此有必要把安裝盤進(jìn)行備份以保護(hù)重要的信息。若沒有序列號(hào)的情況下請(qǐng)選擇Eval Version (Evaluation Version) 評(píng)估版本進(jìn)行安裝。圖1 2 正式版與評(píng)估版的選擇如果Keil uVision2的KEIL編譯器安裝結(jié)束,則會(huì)生成下列路徑和圖標(biāo):以最上層路徑為C:KEIL為假設(shè)予以羅列。安裝結(jié)束后若想運(yùn)行,則雙擊屏幕上的Keil uVision2集成運(yùn)行快捷按鈕。在Windows開始 -> 程序菜單上也會(huì)發(fā)現(xiàn)同樣的快捷按鈕。表1 1 文件夾的結(jié)構(gòu)路 徑說 明C51ASM匯編SFR(Special Func
4、tion Register)定義和源程序樣本文件C51BIN編譯器的執(zhí)行文件所位置C51EXAMPLES應(yīng)用程序視圖文件C51RTX51實(shí)時(shí)操作系統(tǒng)Full文件,255個(gè)任務(wù)C51RTX_TINY實(shí)時(shí)操作系統(tǒng)Tiny文件,16個(gè)任務(wù)C51INCC語言中與8051有關(guān)的所有包含文件都在此處C51LIB庫(kù)、開始代碼、輸入/輸出源程序C51MON51監(jiān)控目標(biāo)硬件系統(tǒng)時(shí)所使用的HEX代碼生成文件UV2編譯器集成執(zhí)行文件KEIL編譯器C51以ANSI(American National Standard Institute)規(guī)格為標(biāo)準(zhǔn),所以使用C語言的開發(fā)人員用ANSI編寫程序就可以(使用Classic
5、 C語言也可以)。第二章Keil uVision2快速入門為了能讓使用者快速入門,先簡(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口,用作A0A7,D0D7;端口1是有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口;端口2是有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口,用作A8A15;端口3是有內(nèi)部上拉電阻的準(zhǔn)雙向I/O口,兼有串行通訊、外部中
6、斷、定時(shí)器、讀/寫的特殊功能;X1是振蕩放大器的反向輸入引腳,X2是反向輸出引腳,因此,使用晶體時(shí)把晶振并聯(lián)連接到X1和X2上,使用外部振蕩器時(shí)只連接X1。ALE/PROG(Address Latch Enable Output/Program Pulse Input)引腳的ALE,在訪問外部存儲(chǔ)器時(shí)用來鎖存低8位地址,而PROG在編程EPROM時(shí)用來進(jìn)行脈沖輸入。PSEN(Program Strobe Enable)引腳信號(hào)作為訪問外部程序存儲(chǔ)器的讀選通,每個(gè)機(jī)器周期PSEN被激活2次,在ALE的下降沿將端口0的地址鎖存到外部鎖存器。EA/Vpp(Exteral Access Enable)
7、引腳連接到GND,則0FFFFH地址都訪問外部程序存儲(chǔ)器;連接到Vcc,則訪問內(nèi)部程序存儲(chǔ)趨。Vpp是對(duì)8751編程電壓輸入端子,其電壓為12.7521V,具體值隨不同型號(hào)芯片而有所不同。雙擊Keil uVision2集成執(zhí)行快捷按鈕,將彈出如圖2 1 所示的窗口。這是一個(gè)初始開發(fā)集成窗口。如果沒有做過任何項(xiàng)目,則窗口上什么也沒有。窗口的上端有10個(gè)下拉菜單。C51在管理程序時(shí),采用所謂的項(xiàng)目(Project)文件來進(jìn)行管理。項(xiàng)目把程序的環(huán)境甚至和編圖2 1 Keil uVision2的執(zhí)行輯有關(guān)的全部信息都保存著,因此使用者可以把多個(gè)程序以項(xiàng)目為單位使用C51就可以了。由于C51 8051
8、KEIL編譯器變成集成環(huán)境,提供即使不知道匯編或不詳細(xì)知道8051也能編寫應(yīng)用程序的環(huán)境。這一章的內(nèi)容可以使工程人員快速并正確地熟悉編譯器環(huán)境。執(zhí)行集成環(huán)境C51,如圖2 1所示,出現(xiàn)編輯、項(xiàng)目、輸出等3個(gè)大窗口和File,Edit,View,Project,Debug,F(xiàn)lash,Peripherals,Tools,SVCS,Window,Help等11個(gè)下拉菜單。 為了開始新的項(xiàng)目,選擇“Project à New Project ”選項(xiàng)后,出現(xiàn)如圖2 2 所示,然后選擇源程序所在路徑鍵入項(xiàng)目的名字并單擊“保存”按鈕。項(xiàng)目的名字會(huì)立即出現(xiàn)在集成環(huán)境的左上端。這個(gè)項(xiàng)目的名字最后為H
9、EX文件的名字。因此,項(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)行“Option for Target”的設(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)。在菜單欄
10、中,選擇“Project/Opintion for Target”或者單擊工具欄中的“Option for Target”快捷按鈕就可以開始設(shè)定。在這里,要輸入系統(tǒng)的工作頻率、ROM與RAM的開始地址和大小以及存儲(chǔ)模式。首先,正確輸入目標(biāo)系統(tǒng)的晶振的頻率值后選擇存儲(chǔ)模式。圖2 4 Option for Target為了讓8051的機(jī)器語言代碼下載到ROM,需要產(chǎn)生HEX代碼。圖2 5 的Option選項(xiàng)用來設(shè)定HEN文件的名字和要存放的文件夾(Select Folder for Object)。通常編譯、調(diào)試到下載ROM需要進(jìn)行多次編譯才能完成。如果不選擇“Creat HEX File”,編譯
11、后不將產(chǎn)生HEX代碼(即使不發(fā)生錯(cuò)誤)。這樣可以避免不必要地反復(fù)寫硬盤以保護(hù)硬盤的磁道和扇區(qū)。圖2 5 中右上端的“Name of Executable”表示HEX代碼文件的名字,通常和項(xiàng)目文件同名,也可以指定別的名字。編譯完成后生成HEX代碼文件,并存放在項(xiàng)目所在路徑中。因?yàn)?051的知識(shí)產(chǎn)權(quán)是Intel公司的,其命令語的處理也跟隨Intel的結(jié)構(gòu),所以KEIL只支持Intel HEX文件的形式。另外,為了在源代碼層次上進(jìn)行調(diào)試,最好選擇“Debug Information”。為了便于編譯程序,最好選擇“Browser Information”。圖2 5 Option for Target
12、輸出文件設(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 所示將原來的“CSEG AT 0 ”修改成 “CSEG AT 08000h”(不包括雙引號(hào))。如果使用燒寫器直接調(diào)試程序,則使
13、用默認(rèn)的“CSEG AT 0 ”即可。圖2 6 Startup.A51 文件修改同時(shí)將Option for Target 中BL51 Locate中的Code代碼段的設(shè)定修改成如圖2 7 所示圖2 7 Option for Target 代碼段的設(shè)定下面是可以驅(qū)動(dòng)用于調(diào)試的仿真器和監(jiān)控器的環(huán)境設(shè)定選項(xiàng)卡“Option for Target/Debug”,如圖2 8 所示。主要有2個(gè)單選項(xiàng):左側(cè)有僅用軟件來仿真8051的軟件模擬仿真器單選項(xiàng),右側(cè)有與目標(biāo)硬件系統(tǒng)邊傳送信息邊進(jìn)行調(diào)試的“KEIL Monitor 51 Driver”和“Triscend E5 Driver”單選項(xiàng)。由于KEIL 8
14、051集成開發(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ī)的KEIL dScope和目標(biāo)硬件系統(tǒng)互相傳送信息??梢韵螺d代碼,也可以查看目標(biāo)硬件系統(tǒng)的變量。 圖2 8 Option for Target/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í)候就可以鍵入
15、應(yīng)用程序了。圖3 1 含有空白的編輯窗口的屏幕單擊菜單條上的“File”菜單,在下拉菜單中選中“Save As”選項(xiàng)單擊,屏幕如圖3 2 所示。在“文件名”欄右側(cè)的編輯框中,鍵入欲使用的文件名稱,同時(shí),必須鍵入正確的擴(kuò)展名。注意:如果使用C語言編寫程序,則擴(kuò)展名為(*.C);如果是用匯編語言編寫的程序,則擴(kuò)展名為(*.asm)。然后,單擊“保存”按鈕。圖3 2 保存文件對(duì)話框然后需要將你已經(jīng)保存好的文件添加到該項(xiàng)目中,具體步驟為:?jiǎn)螕簟癝ource Group1”然后在單擊鼠標(biāo)右鍵,屏幕如圖3 3 所示。圖3 3 把源程序添加到工程中接著單擊“Add File to Source Group1
16、 ”,此時(shí)屏幕將出現(xiàn)圖3 4 所示的畫面,然后選擇你剛剛設(shè)定的函數(shù)文件名。單擊“Add”按鈕后則可以編寫C語言程序了;圖3 4 選擇所需要的源程序現(xiàn)在編寫程序:#include<reg52.h> /包含文件#include<stdio.h> /包含文件void main(void)SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1;printf(“Hello I am KEIL 51.n”); /打印程序執(zhí)行信息printf(“I will be your friend.n”); /打印程序執(zhí)行信息while(1);/等價(jià)于HALT指令在輸入上述程序時(shí)
17、,KEIL51會(huì)自動(dòng)識(shí)別關(guān)鍵字,并以不同顏色提示用戶加以注意,這樣可以減低錯(cuò)誤率,有利于提高編程效率。程序輸入完畢后,屏幕如圖3 5 所示。圖3 5 程序輸入完成后的屏幕顯示編輯源程序之后,為了下載到目標(biāo)硬件系統(tǒng),要反復(fù)進(jìn)行編譯和連接操作。這時(shí)使用的正是“Project”下拉菜單中的編譯命令?!癇uild Target”()表示只編譯和連接在項(xiàng)目窗口修改過的源程序,因此適合于多種源程序文件的情況?!癛ebuild all Target File”()表示編譯和連接項(xiàng)目里登陸的所有源程序文件。相反,“Translate”()表示只編譯被激活的窗口中的源程序。另外,在編譯和連接過程中,可以利用“B
18、uild Stop”()停止正在進(jìn)行中的編譯和連接,這個(gè)快捷按鈕是未被激活狀態(tài)時(shí)的畫面。在窗口底部可以看見KEIL項(xiàng)目文件(*.UV)的歷史記錄,列出最近使用過的文件,最多10個(gè)。除使用過的項(xiàng)目文件之外的歷史記錄,在“File”下拉菜單的下端可以到過去曾使用過的6個(gè)文件列表。在設(shè)定“Option for Target”的存儲(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)色的直方圖表,以表示正在裝入;如果通
19、信電纜沒有連接到目標(biāo)硬件系統(tǒng),則顯示如3 7 所示的信息。這時(shí),要按目標(biāo)硬件系統(tǒng)的復(fù)位按鈕重新執(zhí)行監(jiān)控程序之后,單擊“Try Again”或者“Settings”,重新確定設(shè)定值。特別是要重新確定通信速度是否為設(shè)定為9 600bps,目標(biāo)硬件系統(tǒng)的時(shí)鐘頻率是否設(shè)定為11.0592Mhz。如果這樣還是連接不上,單擊“Stop Debugging”來退出bScope,重新進(jìn)行上面的步驟。若還沒有任何進(jìn)展,則只好從頭開始檢查一下目標(biāo)硬件系統(tǒng)和軟件的設(shè)置,在特殊情況下,有時(shí)往往是ROM里的指令代碼有問題,或者串行通信有問題。如果一切連接都正常,則不出現(xiàn)錯(cuò)誤窗口,在dScope環(huán)境中變成準(zhǔn)備等待(Sta
20、ndby)狀態(tài)。圖3 6 正在運(yùn)行的源程序圖3 7 錯(cuò)誤信息提示根據(jù)上述編寫的程序,若需要在電腦上顯示編寫的結(jié)果是不是滿足自己的要求,可不設(shè)定是KEIL Monitor 51 Driver仿真;可以使用Use Simulator進(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)化語言的特色之一。對(duì)于一個(gè)大的項(xiàng)目,同時(shí)可以由多人編程、調(diào)試,最后再連接到總的項(xiàng)目中去,這就構(gòu)成了工程項(xiàng)目。下面介紹多文件項(xiàng)目使用方法。為了便于說明,將C語言程序加上行號(hào),列表如
21、下:1#include <reg52.h>/包含文件2#include <stdio.h>/包含文件3void main(void)/主程序45SCON=0x52;6TMOD=0x20;7TH1=0xf3;8TR1=1;9printf("Hello I am KEIL 51.n");/打印程序執(zhí)行信息10printf("I will be your friend.n");/打印程序執(zhí)行信息11while(1);/等價(jià)于HALT指令現(xiàn)在把58行程序改寫成如下函數(shù):#include <reg52.h>/包含文件#inclu
22、de <stdio.h>/包含文件void serial_initial(void)SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1; 將上述函數(shù)保存為serial_initial.c。將剩余部分添加必要的兩行,保存為my_second.c,程序清單如下:#include <reg52.h>/包含文件#include <stdio.h>/包含文件extern serial_initial();void main(void)/主程序serial_initial();printf("Hello I am KEIL 51.n"
23、;);/打印程序執(zhí)行信息printf("I will be your friend.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 1 my_se
24、cond屏幕顯示圖由于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)
25、,占用的外部數(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 >#define COM XBYTE0x7001#define DAT XBYTE0x7000#define uchar unsigned charuchar code table = 0x3f,0x06,0x5b,0x4f,0x
26、66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar idata diss8=0,1,2,3,4,5,6,7;uchar keyin();uchar deky();/*void main(void) unsigned int ii; uchar i,k,n,m,j,s; for(ii=0;ii<20000;ii+); COM = 0xD1; /清楚總命令清除RAM COM = 0x00; /鍵盤、顯示方式、分頻 COM = 0x38;while(1) k=keyin(); switch(k) case 0x0c:
27、 COM = 0xD1; /清楚屏幕 i=0; continue; break; case 0x0d: i-; /按位清除可以一位一位的清除數(shù)碼管 COM = 0x90; COM = i+0x80; DAT = 0; continue; break; case 0x0b: i-; /小數(shù)點(diǎn) COM = 0x90; COM = i+0x80; j = dissi; s = tablej; DAT = s | 0x80; i+; continue; break; default : break; if(i<8) COM = 0x90; COM = i+0x80; dissi = k; DAT
28、 =tablek; i+; else i=0; /*取鍵值函數(shù)*uchar keyin(void)uchar i,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);uchar deky(void)uchar k;k= COM;return(k&0x0f);4.2 8255擴(kuò)展I/O口實(shí)驗(yàn)硬件環(huán)境:?jiǎn)纹瑱C(jī)最小系統(tǒng)、8279鍵盤顯示電路實(shí)現(xiàn)功能:通過按鍵輸入數(shù)字量,則在8255的三個(gè)輸出口分別輸出相應(yīng)的數(shù)字
29、量C源程序:/*-*/*函數(shù)名稱:8255A程序調(diào)試/*/*版 本:V1.0/*完成時(shí)間:2005年8月9日/*-*/文件名:main.c#include "EXAMPLE.h"void main(void) unsigned char k,i,j; Init_8279(); while(1) k = Keyin(); switch(k) case 0x0a: /確定發(fā)送 j = buffer0 << 4; j = buffer1 | j; Init_8255_mode0(j); continue;break;case 0x0c: /清除屏幕Clear_LED(
30、);i = 0;continue;default:break; if(i<8) COM = 0x90; COM = i+0x80; bufferi = k; DAT =tablek; i+; else i=0; /文件名:Init_8279#include "reg52.H"#include "ABSACC.H"/鍵盤顯示8279的數(shù)據(jù)地址和命令地址#define COM XBYTE0x7001#define DAT XBYTE0x7000unsigned char code table = 0x3f,0x06,0x5b,0x4f,0x66,0x6
31、d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71;#define count 8 /緩存空間大小 unsigned char idata buffercount; /數(shù)據(jù)輸入緩存 unsigned char Deky();unsigned char Keyin();/*-初始化8279-*/void Init_8279( void ) COM = 0xD1; /清楚總命令清除RAM COM = 0x00; /鍵盤、顯示方式、分頻 COM = 0x38; /*-設(shè)置數(shù)碼管顯示-*/* ddr-為數(shù)據(jù)顯示的位置/* k -為取緩存數(shù)據(jù)的地址
32、 */*-*/void Dis_LED( unsigned char ddr , unsigned char k ) unsigned char i,j; COM = 0x90; /取高4位數(shù)據(jù) COM = ddr + 0x80; i = bufferk; j = 0xf0 & i; j = j >> 4 ; DAT = tablej; COM = 0x90; /取低四位數(shù)據(jù) COM = +ddr + 0x80; i = bufferk; j = 0x0f & i; DAT = tablej; /*-顯示小數(shù)點(diǎn)-*/void Dis_Point( unsigned
33、char ddr ) unsigned char i; COM = 0x90; COM = ddr + 0x80; i = bufferddr; DAT = tablei | 0x80; /*-清除屏幕-*/void Clear_LED( void ) COM = 0xD1; /*-取鍵值函數(shù)-*/unsigned char Deky(void)unsigned char k;k= COM;return(k&0x0f);unsigned char Keyin(void)unsigned char i,j,k;while( Deky() = 0); COM = 0x40;j=DAT;i
34、= 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-A0A1-> A0A1/* RESET-> RESET/*-*/#include "reg52.H"#include "ABSACC.H"#define COM_PA XBY
35、TE0x7800 /PA口地址#define COM_PB XBYTE0x7801 /PB口地址#define COM_PC XBYTE0x7802 /PC口地址#define COM_Ctrl XBYTE0x7803 /控制字地址/*-*/* 8255方式控制字/* -D7-D6-D5-D4-D3-D2-D1-D0-/* |-|/* | D7:置位方式; 1有效 /* A | D6D5:方式選擇:00方式0;01方式1;10方式2/* 組| D4:端口A;1為輸入;0為輸出 /* | D3:端口C上半部; 1為輸入;0為輸出 /* |-|/*/* |-|/* | D2:方式選擇:0為方式0;
36、1為方式1; /* B | D1:端口B:1為輸入;0為輸出; /* 組| D0:端口C下半部分:1為輸入;0為輸出; /* |-|/*-*/*-*/*函數(shù)名稱:8255初始化;方式0/*/*函數(shù)功能 : 將Value的值,分別送到PA、PB、PC口/* /*返回值 : 無/*-*/void Init_8255_mode0( unsigned char Value ) COM_Ctrl = 0x80; /A、B、C口方式0輸出 COM_PA = Value; COM_PB = Value; COM_PC = Value;/*-*/4.3 D/A實(shí)驗(yàn)硬件環(huán)境:?jiǎn)纹瑱C(jī)最小系統(tǒng)、8279鍵盤顯示電路
37、、0832電路實(shí)現(xiàn)功能:通過鍵盤輸入數(shù)字量,在0832的DAC TEST輸出相應(yīng)的模擬量C源程序:/*/C按鍵為清屏幕/D按鍵為一位一位清除/F按鍵為確認(rèn)鍵/*#include< reg52.H >#include< ABSACC.H >#define COM XBYTE0x7001#define DAT XBYTE0x7000#define DAC0832 XBYTE0x5800#define uchar unsigned charuchar code table = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f
38、,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar idata diss8=0,1,2,3,4,5,6,7;uchar keyin();uchar deky();/*void main(void) unsigned int ii; uchar i,k,n,m,j,s; for(ii=0;ii<20000;ii+); COM = 0xD1; COM = 0x00; COM = 0x38;while(1) k=keyin(); switch(k) case 0x0c: COM = 0xD1; i=0; continue; break; case 0x0d: i-; CO
39、M = 0x90; COM = i+0x80; DAT = 0; continue; break; case 0x0f: n = diss0 << 4; m = diss1 | n; do DAC0832 = m; while(keyin()=0); continue; break; default : break; if(i<8) COM = 0x90; COM = i+0x80; dissi = k; DAT =tablek; i+; else i=0; /*取鍵值函數(shù)*uchar keyin(void)uchar i,j,k;while( deky() = 0);COM
40、 = 0x40;j=DAT;i = j&0x07;i = i<<3;k = j&0x38;k = k>>3;i = i+k;return(i);/*uchar deky(void)uchar k;k= COM;return(k&0x0f);/*4.4 DS12887實(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í)間
41、:2005年7月24日/*#include< reg52.H >#include< ABSACC.H >#define COM XBYTE0x7001#define DAT XBYTE0x7000#define TM_second XBYTE0x6000 /秒#define AM_second XBYTE0x6001 /秒鬧#define TM_minute XBYTE0x6002 /分#define AM_minute XBYTE0x6003 /分鬧#define TM_hour XBYTE0x6004 /時(shí)#define AM_hour XBYTE0x6005 /時(shí)
42、鬧#define TM_week XBYTE0x6006 /周#define TM_day XBYTE0x6007 /日(2位數(shù))#define TM_month XBYTE0x6008 /月(2位數(shù))#define TM_year XBYTE0x6009 /年 (2位)#define REG_a XBYTE0x600a /寄存器A#define REG_b XBYTE0x600b#define REG_c XBYTE0x600c#define REG_d XBYTE0x600d#define RAM_114 XBYTE0x600e#define uchar unsigned charunsi
43、gned char idata time_buf7 = 0,1,2,3,4,5,6;sbit Time_chang_Year=P11; /控制時(shí)間和年月日切換 uchar code table = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void settime() /設(shè)置系統(tǒng)時(shí)間 uchar xdata i; i=REG_d; REG_a=0x70; REG_b=0xa2; /輸出為BCD碼 24小時(shí)進(jìn)制 TM_second = time_buf0; TM_minute
44、= time_buf1; TM_hour = time_buf2; TM_week = time_buf3; TM_day = time_buf4; TM_month = time_buf5; TM_year = time_buf6; REG_b=0x22; /芯片更新正常進(jìn)行 REG_a=0x20; i=REG_c; void readtime() /讀取系統(tǒng)時(shí)間 uchar xdata a; do a=REG_a; while(a&0x80)=0x80) ; /UIP為1時(shí)更新即將開始 time_buf0=TM_second; time_buf1=TM_minute; time_buf2=TM_hour; time_buf3=TM_week; time_buf4=TM_day; time_buf5=TM_month; time_buf6=TM_year; void start12887(void)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年射頻消融治療儀項(xiàng)目合作計(jì)劃書
- 2025年P(guān)M步進(jìn)電機(jī)合作協(xié)議書
- 含稅金額合同范本
- 動(dòng)遷房的買賣合同范本
- 外籍工作人員聘請(qǐng)合同范本
- 綠化養(yǎng)護(hù)及道路保潔服務(wù)合同范本
- 關(guān)于英語合同范本
- 介紹公司合同范本
- 二包服務(wù)合同范本
- 臨時(shí)設(shè)施合同范本
- 管道工程預(yù)算
- 公路施工技術(shù)ppt課件(完整版)
- 通信原理英文版課件:Ch6 Passband Data Transmission
- GB∕T 41098-2021 起重機(jī) 安全 起重吊具
- 如何發(fā)揮好辦公室協(xié)調(diào)、督導(dǎo)、服務(wù)職能
- 部隊(duì)安全教育教案大全
- HY∕T 0289-2020 海水淡化濃鹽水排放要求
- 班組長(zhǎng)管理能力提升培訓(xùn)(PPT96張)課件
- 法蘭蝶閥螺栓配用表
- 垃圾中轉(zhuǎn)站施工方案及施工方法
- 內(nèi)蒙古自治區(qū)小額貸款公司試點(diǎn)管理實(shí)施細(xì)則
評(píng)論
0/150
提交評(píng)論