版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、【精品文檔】如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流Keil軟件使用手冊(cè).精品文檔.Keil軟件使用手冊(cè)(本手冊(cè)參考keil 4版本)一 安裝到網(wǎng)上下載一個(gè)安裝包,里面必須包含以下內(nèi)容:1:(安裝包文件,圈選的文件為安裝說(shuō)明,請(qǐng)務(wù)必仔細(xì)閱讀)2:(打開(kāi)安裝文件)3:(點(diǎn)擊下一步)4:(勾選同意,并點(diǎn)擊下一步) 5:(瀏覽選擇到你想安裝的地方,然后選擇下一步) 6:(兩個(gè)空可以隨便打,不重要,填完后點(diǎn)擊下一步) 7:(正在安裝中) 8:(點(diǎn)擊完成) 9:(進(jìn)入安裝的文件夾,點(diǎn)擊UV4)10:(打開(kāi)Keil4的執(zhí)行文件)11:(點(diǎn)擊File,再選擇License Management)Pic 12
2、:(復(fù)制右上角的ID號(hào))12:(打開(kāi)注冊(cè)機(jī)文件)13:(將復(fù)制的ID號(hào)粘貼在此處)14:(點(diǎn)擊Generate,在上方會(huì)生成一組ID,復(fù)制下來(lái))15:(將復(fù)制好的ID粘貼在圈選出,并點(diǎn)擊Add LIC) 16:(當(dāng)你看見(jiàn)這兩組單詞,那么恭喜你,注冊(cè)成功,準(zhǔn)備開(kāi)始你的奇妙程序之旅吧?。┒?新建工程1. 單擊Project,選擇New Project2 選擇保存位置,輸入工程的名字3 選擇CPU。緊接著,Keil C51提示您選擇CPU器件。8051內(nèi)核片機(jī)最早是由Intel公司發(fā)明的,后來(lái)其他廠商如Philips、Atmel、Winbond等先后推出其兼容產(chǎn)品,并在8051的基礎(chǔ)上擴(kuò)展了許多增強(qiáng)
3、功能,根據(jù)芯片的實(shí)際情況,選擇相應(yīng)的器件(本例程選擇Atmel公司下的AT89C52),如圖:注:選擇8051也可以,8051與8052有一點(diǎn)的差別,可以說(shuō)8052是8051的升級(jí)版,主要有以下不同:1. 內(nèi)部RAM,8051單片機(jī)為128Byte(00H-7FH),8052單片機(jī)為56 Byte (00H-0FFH)2.內(nèi)部ROM,8051單片機(jī)為4KB,8052單片機(jī)為8KB3.8051有兩個(gè)Timer:T0和T1。8052除了有T0和T1以外,還有一個(gè)Timer24.8051有5個(gè)中斷源 8052有6個(gè)。關(guān)于單片機(jī)的知識(shí)我們將在后面做詳細(xì)介紹。4. 選擇C語(yǔ)言啟動(dòng)代碼 如果使用匯編來(lái)編程
4、,請(qǐng)選擇“否”。 如果使用C51來(lái)編程,請(qǐng)選擇“是”。 如果不出現(xiàn)本提示,請(qǐng)檢查是否將安裝是否出錯(cuò)。5. 源程序文件 選擇File菜單,選擇New,然后單擊保存按鈕本例程保存為test.c,如果是用匯編寫的程序保存的后綴名應(yīng)該寫成.asm右鍵工程項(xiàng)目,選擇Add Fliles to 將剛才保存的test.c 添加到工程里面去以上就是工程的搭建,剩下的就是寫程序程序?qū)懲昃幾g通過(guò)后,設(shè)置生成HEX文件右鍵單擊Target 1,選擇Option for Target 1或者直接點(diǎn)擊工具欄上面的按鈕彈出的窗口選擇Output,選上Create HEX編譯生成HEX文件單擊工具欄的“Rebuild al
5、l target files”按鈕果程序有錯(cuò),則會(huì)顯示錯(cuò)誤所在的文件及行號(hào)。如下圖,表示test.c文件的第35行有錯(cuò)誤,雙擊則可定位到該位如果程序沒(méi)有錯(cuò)誤則會(huì)生成HEX文件。Data后面的數(shù)據(jù)表示使用片內(nèi)RAM的大小,xdata表示使用外部數(shù)據(jù)大小,code表示程序的大小三 軟件調(diào)試調(diào)試一般都是在發(fā)生錯(cuò)誤與意外的情況下使用的。如果程序能正常執(zhí)行,調(diào)試很多時(shí)候都是用不上的。所以,最高效率的程序開(kāi)發(fā)還是程序員自己做好規(guī)范,而不是指望調(diào)試來(lái)解決問(wèn)題。 單片機(jī)的程序調(diào)試分為兩種,一種是使用軟件模擬調(diào)試,第二種是硬件調(diào)試。 使用軟件模擬調(diào)試,就是用計(jì)算機(jī)去模擬單片機(jī)的指令執(zhí)行,并虛擬單片機(jī)片內(nèi)資源,從
6、而實(shí)現(xiàn)調(diào)試的目的。但是軟件調(diào)試存在一些問(wèn)題,不可能像真正的單片機(jī)運(yùn)行環(huán)境那樣執(zhí)行的指令能在同一個(gè)時(shí)間完成(往往比單片機(jī)慢)。軟件調(diào)試只能是一種初步的,小型工程的調(diào)試,比如一個(gè)只有幾百上千行的代碼的程序,軟件調(diào)試能很好的完成。 硬件調(diào)試其實(shí)也需要計(jì)算機(jī)軟件的配合,大致過(guò)程是這樣的:計(jì)算機(jī)軟件把編譯好的程序通過(guò)串行口、并行口或者USB口傳輸?shù)椒抡嫫鳎缓笈c單片機(jī)一樣執(zhí)行。仿真器仿真全部的單片機(jī)資源(所有的單片機(jī)接口,并且有真實(shí)的引腳輸出)。仿真器會(huì)將單片機(jī)內(nèi)部?jī)?nèi)存與時(shí)序等情況返回給計(jì)算機(jī),這樣 就可以在計(jì)算機(jī)里看到單片機(jī)程序真實(shí)的執(zhí)行情況。不僅如此,還可以通過(guò)計(jì)算機(jī)的軟件實(shí)現(xiàn)單步、全速、運(yùn)行到光標(biāo)
7、的常規(guī)調(diào)試手段。仿真器可以接入實(shí)際的電路中仿真器以下介紹軟件模擬調(diào)試調(diào)試的重要性前面我們學(xué)習(xí)了如何建立工程,編寫C源文件,連接工程,并獲取生成的目標(biāo)代碼,但是坐到這些僅僅代表你的源程序沒(méi)有語(yǔ)法錯(cuò)誤,至于程序中存在其它錯(cuò)誤必須通過(guò)調(diào)試才能解決。事實(shí)上,除了一小部分極其簡(jiǎn)單的程序絕大部分程序都要通過(guò)多次調(diào)試才能得到正確結(jié)果,調(diào)試是單片機(jī)開(kāi)發(fā)過(guò)程中一個(gè)非常重要的環(huán)節(jié)。常用調(diào)試命令在對(duì)工程成功地進(jìn)行匯編、連接以后,按Ctrl+F5或者使用菜單Debug->Start/Stop Debug Session即可進(jìn)入調(diào)試狀態(tài),Keil內(nèi)建了一個(gè)仿真CPU用來(lái)模擬執(zhí)行程序,該仿真CPU功能強(qiáng)大,可以在沒(méi)
8、有硬件和仿真機(jī)的情況下進(jìn)行程序的調(diào)試工具欄上從左到右依次為:查找(find out),第二個(gè)幾乎不用,開(kāi)始停止調(diào)試,后面幾個(gè)帶圈的都和斷點(diǎn)相關(guān)具體可將鼠標(biāo)移到圖標(biāo)上查看,和工程窗口相關(guān)的幾個(gè)小幫助最后一個(gè)是配置,可以修改各個(gè)窗口的字體,short cut key等等。單擊中的調(diào)試按鈕可以進(jìn)入或者退出調(diào)試,單擊進(jìn)入進(jìn)入調(diào)試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化,Debug菜單項(xiàng)中原來(lái)不能用的命令現(xiàn)在已可以使用了,工具欄會(huì)多出一個(gè)用于運(yùn)行和調(diào)試的工具條,如圖所示,Debug菜單上的大部份命令可以在此找到對(duì)應(yīng)的快捷按鈕,從左到右依次是:復(fù)位、運(yùn)行、暫停、單步、過(guò)程單步、執(zhí)行完當(dāng)前子程序、運(yùn)行到當(dāng)前行
9、、命令窗口(command window)、匯編窗口(disassembly window)、控制特殊功能寄存器顯示窗口(Symble window)、寄存器窗口(工程窗口那塊)(register window)、堆棧調(diào)用窗口(Call stack)、監(jiān)視窗口(watch window)、子窗口是locals watch1 watc2、存儲(chǔ)器窗口(memory window)、串行口調(diào)試窗口(serial window)、分析窗口(包含邏輯分析儀,性能分析儀),工具按鈕等命令。全速執(zhí)行,復(fù)位重新開(kāi)始執(zhí)行,逐語(yǔ)句執(zhí)行,跟蹤進(jìn)函數(shù)內(nèi)部,先設(shè)置一個(gè)斷點(diǎn),全速運(yùn)行程序如下:出現(xiàn)幾個(gè)工作區(qū)間,以下介紹這
10、幾個(gè)區(qū)域:1 左側(cè)是單片機(jī)內(nèi)寄存器的狀態(tài)區(qū)域,給出了常用的寄存器r0r7以及a,b,sp,dptr,pc,psw等特殊功能寄存器的值,這些值會(huì)隨著程序的執(zhí)行發(fā)生相應(yīng)的變化。(涉及單片機(jī)內(nèi)存,若未學(xué)過(guò)匯編語(yǔ)言,建議了解);其中Regs是片內(nèi)內(nèi)存的相關(guān)情況值;Sys是系統(tǒng)一些累加器、計(jì)數(shù)器等。具體介紹一下Sys:a 累加器ACC,往往在運(yùn)算前暫存一個(gè)操作數(shù)(如被加數(shù)),而運(yùn)算后又保存其結(jié)果(如代數(shù)和)。b 寄存器B,主要用于乘法和除法操作。spsp_maxdptr 數(shù)據(jù)指針DPTR。PC $states 執(zhí)行指令的數(shù)量。sec 執(zhí)行指令的時(shí)間累計(jì)(單位:秒)。psw 程序狀態(tài)標(biāo)志寄存器PSW,八位
11、寄存器,用來(lái)存放運(yùn)算結(jié)果的一些特征量,如有無(wú)進(jìn)位、借位等。p 奇偶標(biāo)志P。反映累加器ACC內(nèi)容的奇偶性,如果ACC中的運(yùn)算結(jié)果有偶數(shù)個(gè)1(如11001100B,其中有4個(gè)1),則P為0,否則,P=1。f1ov 溢出標(biāo)志位OV。MCS51反映帶符號(hào)數(shù)的運(yùn)算結(jié)果是否有溢出,有溢出時(shí),此位為1,否則為0。rsf0ac 輔助進(jìn)位標(biāo)志AC。又稱半進(jìn)位標(biāo)志,它反映了兩個(gè)八位數(shù)運(yùn)算低四位是否有半進(jìn)位,即低四位相加(或減)有否進(jìn)位(或借位),如有則AC為1狀態(tài),否則為0。cy 進(jìn)位標(biāo)志CY(PSW 7)。它表示運(yùn)算是否有進(jìn)位(或借位)。如果操作結(jié)果在最高位有進(jìn)位(加法)或者借位(減法),則該位為1,否則為0。
12、由于PSW存放程序執(zhí)行中的狀態(tài),故又叫程序狀態(tài)字。運(yùn)算器中還有一個(gè)按位(bit)進(jìn)行邏輯運(yùn)算的邏輯處理機(jī)(又稱布爾處理機(jī))。根據(jù)指令執(zhí)行的不同,上述值會(huì)有相應(yīng)的變化,程序員可以監(jiān)測(cè)這些在單片機(jī)中看不到的值而達(dá)到調(diào)試的目的2 C語(yǔ)言源代碼區(qū)域3 反匯編指令區(qū)域這個(gè)是Disassembly Windows ,按下后可以把C51 Disassembly 轉(zhuǎn)化為相應(yīng)的匯編語(yǔ)言,如果有匯編語(yǔ)言知識(shí)的話,就可以對(duì)比C51程序與匯編程序了。由于匯編語(yǔ)言的效率高很多,這也可以作為查看C51執(zhí)行效率的一個(gè)方法??梢钥闯觯珻51 代碼是如何被解釋為匯編的。4 查看變量的值5 查看存儲(chǔ)器的值選擇View Memor
13、y Window存儲(chǔ)器窗口的地址欄處輸入0000H后回車,則可以查看單片機(jī)內(nèi)程序存儲(chǔ)器的內(nèi)容,單元地址前有”C:”表示程序存儲(chǔ)器。如果在存儲(chǔ)器窗口的地址欄處輸入D:00H后回車,則可以查看單片機(jī)內(nèi)數(shù)據(jù)存儲(chǔ)器的內(nèi)容,單元地址前有“D:”表示數(shù)據(jù)存儲(chǔ)器,單元地址前有”X:”表示片外數(shù)據(jù)區(qū),冒號(hào)后面表示要查看的數(shù)據(jù)地址。6 雖然軟件調(diào)試無(wú)法實(shí)現(xiàn)硬件調(diào)試那樣的信號(hào)輸出,但是軟件調(diào)試也可以在軟件窗口監(jiān)測(cè)輸出信號(hào)的高低電平,以及單片機(jī)相關(guān)端口的變化,實(shí)現(xiàn)模擬監(jiān)測(cè)輸出信號(hào)的目的。在主菜單欄:peripherals可以查看定時(shí)器,和IO口的數(shù)值,中斷,串行通信上圖所示,Port0,Port1,Port2,Po
14、rt3就對(duì)應(yīng)于51單片機(jī)的四個(gè)P0,P1,P2,P3 口,共32個(gè)針腳查看輸出波形單擊,然后選setup可以輸入想要觀察的引腳。全速運(yùn)行并單擊圖中的all,可以看到以下效果,單擊圖中的out或者in可以對(duì)單位時(shí)間進(jìn)行修改。選擇合適的時(shí)間可以清楚得觀察高低電平變化及占空比下面我們來(lái)看一個(gè)實(shí)例:Keil C51程序調(diào)試過(guò)程用Keil C51編寫程序時(shí),經(jīng)常需要調(diào)試,如果不是經(jīng)常用這個(gè)軟件的話,很容易忘記這些調(diào)試步驟,現(xiàn)在舉一個(gè)例子“驗(yàn)證延遲函數(shù)delay()使其延遲的時(shí)間為500ms”說(shuō)明。源程序?qū)懲旰?,就可以調(diào)試了,按照?qǐng)D1所示,先進(jìn)行第一步和第二步操作,使界面切換到圖2的狀態(tài),可以看到在文本編
15、輯窗口中,有一個(gè)黃色箭頭指向13行的位置,說(shuō)明程序從這個(gè)位置開(kāi)始執(zhí)行。左上角有一些跟調(diào)試相關(guān)的按鈕,如“全速執(zhí)行”、“單步進(jìn)入”。對(duì)于這個(gè)例子,目的是驗(yàn)證delay()函數(shù)的延遲時(shí)間,使其大約為500ms。按照下列方法可以達(dá)到這個(gè)目的:圖1 編譯界面圖2 調(diào)試界面點(diǎn)擊“單步跳出”按鈕(或功能鍵F10),黃色箭頭從第13行往下移一行(14),再單擊“單步跳出”,則箭頭移到15行那邊,表示程序從第13行執(zhí)行到第15行(注:這種方式是一步一步執(zhí)行程序。如果要同時(shí)執(zhí)行幾行,比如從第13行一下子執(zhí)行到15行,可以作如下操作:先用鼠標(biāo)在第15行的位置處點(diǎn)擊兩下會(huì)出現(xiàn)一個(gè)圖2所示的紅色圖標(biāo);然后
16、點(diǎn)擊“全速執(zhí)行”按鈕,則黃色的箭頭會(huì)從第13行快速移到15行。即:這兩行同時(shí)被執(zhí)行)。此時(shí)左邊寄存器窗口中的sec有一個(gè)數(shù)值,表示程序執(zhí)行的時(shí)間,即delay()函數(shù)的延遲時(shí)間。如果延遲時(shí)間不是500ms,可改變delay()函數(shù)中x,y的數(shù)值,再點(diǎn)擊圖1的第二步所對(duì)應(yīng)的按鈕切換到圖1所示的編譯界面,點(diǎn)擊“重新構(gòu)造所有對(duì)象文件”編譯程序,然后再切換到圖2的界面上來(lái)進(jìn)行調(diào)試。重復(fù)上面的步驟,直到左邊寄存器窗口中的sec(單位秒)數(shù)值大約為0.50s,即可說(shuō)明delay()延遲時(shí)間為500ms。(注:這種方法比較麻煩,而且延遲時(shí)間不會(huì)很精確,如果要精確延遲的話可采用定時(shí)器的方式。)Keil C調(diào)試
17、案例-優(yōu)化導(dǎo)致的問(wèn)題如下是一個(gè)簡(jiǎn)單的Keil C中的小程序:#include <reg52.h>void main()unsigned char i,j;i = 0xf0;j = 0x0f;P0 = i;P1 = j;while (1); 編譯OK后,進(jìn)入Debug session,按F11單步執(zhí)行,發(fā)現(xiàn)"i = 0xf0"和"j = 0x0f"這兩句沒(méi)有執(zhí)行。如下圖:很多初學(xué)者百思不得其解,其實(shí),這是由于Keil C本身的8級(jí)優(yōu)化導(dǎo)致的。解決的方法有兩種:1、降底優(yōu)化級(jí)別,如下圖,可降至級(jí)別2。2、在局部變量i,j定義前加上Volatile
18、,禁止Keil C優(yōu)化這兩個(gè)變量。如下:volatile unsigned char i,j; 調(diào)試OK!KEIL-C調(diào)試點(diǎn)滴問(wèn):用KEIL寫C代碼,做完以后的調(diào)試工作應(yīng)該如何開(kāi)展?只有PC機(jī),沒(méi)有任何的硬件設(shè)備。用自帶的編譯功能然后查錯(cuò)誤。寫完代碼后,F(xiàn)7編譯,Alt+F5調(diào)試,F(xiàn)10單步運(yùn)行??梢圆榭醇拇嫫鞯闹狄约癛AM的內(nèi)容。還可以改變P0P3口的輸入。KEIL就是一個(gè)開(kāi)發(fā)仿真一體的。Keil C本身就是編譯與仿真一體的。當(dāng)不要外部數(shù)據(jù)時(shí)很方便,可以使用Keil C自帶的軟件調(diào)試器(軟件仿真器),有單步運(yùn)行,設(shè)置斷點(diǎn)等功能。當(dāng)要外部輸入時(shí)(比如用定時(shí)器作計(jì)數(shù)器用),有
19、兩種處理方法:(1)做產(chǎn)品時(shí)最好是用硬件仿真器調(diào)試。(2)學(xué)習(xí)時(shí)可用以下方法:Keil C提供了幾個(gè)調(diào)試輸入用的窗口,可用它們來(lái)模擬輸入;調(diào)試函數(shù)由自己根據(jù)需要按特定的格式來(lái)編輯,再按KEIL C的要求調(diào)入即可。下面給出用定時(shí)器作外部事件計(jì)數(shù)時(shí)模擬外部輸入的調(diào)試函數(shù),并寫出Keil C調(diào)用的步驟如下:步驟一:編寫如下信號(hào)函數(shù):single void t0_singal(void)while(1)PORT3|=0x10; /pull INT0(P3.4) high againPORT3&=0x10; /pull INT0(P3.4) lo
20、w and generate interruptPORT3|=0x10; /pull INT0(P3.4) high againtwatch(CLOCK); /wait for 1 second步驟二:在DEBUG狀態(tài)下選擇:DEBUG“Function Editor(Open Ini File)",這時(shí),將彈出兩個(gè)新屏幕,將其中的“打開(kāi)”窗口關(guān)閉;保留“Function Editor窗口;步驟三:在Function Editor窗口中輸入上面的函數(shù):single void
21、t0_singal(void)步驟四:保存(注意:擴(kuò)展名為.ini),編譯該程序,成功后關(guān)閉Function Editor窗口;步驟五:執(zhí)行用戶程序(必須連續(xù)執(zhí)行);步驟六:在屏幕左下腳的命令窗口中,鍵入t0_singl()后(必須回車),Keil C便可向P3.4源源不斷地提供脈沖信號(hào)。四 基于8051+Proteus仿真案例Protues簡(jiǎn)介Protues軟件是英國(guó)Labcenter electronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國(guó)內(nèi)推廣剛起步,但已受到
22、單片機(jī)愛(ài)好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開(kāi)發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年增加Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯。這里請(qǐng)讀者自行安裝好Proteus,雙擊已安裝好的Proteus,我們將簡(jiǎn)單的介紹該軟件,要深入
23、學(xué)習(xí)請(qǐng)查閱其它資料。Protues軟件界面左側(cè)的工具欄提供豐富的硬件資源用Protues搭建單片機(jī)系統(tǒng)第一步,新建設(shè)計(jì)。單擊“File”“New Design”命令(或單擊圖標(biāo)命令 ),在 Protues中打開(kāi)了一個(gè)空白的新電路圖紙。 第二步,添加所需器件。單擊“Library”“Pick Device/Symbol”命令(或單擊圖標(biāo)命令 ),單擊左側(cè)的,然后點(diǎn)擊打開(kāi)器件選擇對(duì)話框,如圖3-1所示,在對(duì)話框左上角有個(gè)關(guān)鍵字“Keyword” 搜索文字框,如果我們知道器件型號(hào)可輸入其中,Protues將自動(dòng)幫我們找到所需器件首 先,輸入“AT89C51”點(diǎn)擊Ok選中器件,在電路繪制區(qū)中央單擊鼠標(biāo)
24、,AT89C51單片機(jī)就被放置到了電路圖中。參考單片機(jī)的放置方法把其它器件如晶振、電容、電阻、發(fā)光二極管等也放置到電路圖中的適當(dāng)位置。這幾個(gè)器件在器件選擇對(duì)話框中的關(guān)鍵詞分別為:res(電阻)、crystal(晶體振蕩器)、cap(電容)、led-red、7seg(數(shù)碼管)(關(guān)鍵字不唯一)。其它器件添加進(jìn)去后,連接各器件構(gòu)成原理圖。所有元器件都放置到電路圖后的效果如圖接下來(lái)就是將寫好的程序下載到CPU里面去,雙擊CPU會(huì)彈出下面的窗口點(diǎn)擊將生成的Hex文件燒錄到CPU即可開(kāi)始仿真依次是,運(yùn)行、單步運(yùn)行、暫停、停止開(kāi)始仿真按鈕,退出仿真在仿真中,紅色代表高電平,藍(lán)色代表低電平,灰色代表不確定。下
25、面介紹幾個(gè)簡(jiǎn)單案例:1閃爍的LED/* 名稱:閃爍的LED說(shuō)明:LED按設(shè)定的時(shí)間間隔閃爍#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P10;/延時(shí)void DelayMS(uint x)uchar i;while(x-)for(i=0;i<120;i+);/主程序void main()LED=0;while(1)LED=LED;DelayMS(150);2 單只數(shù)碼管循環(huán)顯示09/*名稱:?jiǎn)沃粩?shù)碼管循環(huán)顯示09說(shuō)明:主程序中的循環(huán)語(yǔ)句反復(fù)將09的段碼送至P0口,使
26、數(shù)字09循環(huán)顯示#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/延時(shí)void DelayMS(uint x)uchar t;while(x-) for(t=0;t<120;t+);/主程序void main()uchar i=0;P0=0x00;while(1)P0=DSY_CODEi;i
27、=(i+1)%10;DelayMS(300);3數(shù)碼管顯示4X4矩陣鍵盤按鍵號(hào)/*名稱:數(shù)碼管顯示4X4矩陣鍵盤按鍵號(hào)說(shuō)明:按下任意鍵時(shí),數(shù)碼管都會(huì)顯示其鍵的序號(hào),掃描程序首先判斷按鍵發(fā)生在哪一列,然后根據(jù)所發(fā)生的行附加不同的值,從而得到按鍵的序號(hào)。#include<reg51.h>#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x
28、8e,0x00;sbit BEEP=P37;/上次按鍵和當(dāng)前按鍵的序號(hào),該矩陣中序號(hào)范圍015,16表示無(wú)按鍵uchar Pre_KeyNo=16,KeyNo=16;/延時(shí)void DelayMS(uint x)uchar i;while(x-) for(i=0;i<120;i+);/矩陣鍵盤掃描void Keys_Scan()uchar Tmp;P1=0x0f;/高4位置0,放入4行DelayMS(1);Tmp=P10x0f;/按鍵后0f變成0000XXXX,X中一個(gè)為0,3個(gè)仍為1,通過(guò)異或把3個(gè)1變?yōu)?,唯一的0變?yōu)?switch(Tmp)/判斷按鍵發(fā)生于03列的哪一列case 1
29、:KeyNo=0;break;case 2:KeyNo=1;break;case 4: KeyNo=2;break;case 8:KeyNo=3;break;default:KeyNo=16;/無(wú)鍵按下P1=0xf0; /低4位置0,放入4列DelayMS(1);Tmp=P1>>40x0f;/按鍵后f0變成XXXX0000,X中有1個(gè)為0,三個(gè)仍為1;高4位轉(zhuǎn)移到低4位并異或得到改變的值switch(Tmp)/對(duì)03行分別附加起始值0,4,8,12case 1:KeyNo+=0;break;case 2:KeyNo+=4;break;case 4:KeyNo+=8;break;ca
30、se 8:KeyNo+=12;/蜂鳴器void Beep()uchar i;for(i=0;i<100;i+)DelayMS(1);BEEP=BEEP;BEEP=0;/主程序void main()P0=0x00;BEEP=0;while(1)P1=0xf0;if(P1!=0xf0) Keys_Scan(); /獲取鍵序號(hào)if(Pre_KeyNo!=KeyNo)P0=DSY_CODEKeyNo;Beep();Pre_KeyNo=KeyNo;DelayMS(100);4 100 000s以內(nèi)的計(jì)時(shí)程序/*名稱:100 000s以內(nèi)的計(jì)時(shí)程序說(shuō)明:在6只數(shù)碼管上完成099 999.9s。#in
31、clude<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/段碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/6只數(shù)碼管上顯示的數(shù)字uchar Digits_of_6DSY=0,0,0,0,0,0;uchar Count;sbit Dot=P07;/延時(shí)void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t<120;
32、t+);/主程序void main()uchar i,j;P0=0x00; P3=0xff;Count=0;TMOD=0x01;/計(jì)數(shù)器T0方式1TH0=(65536-50000)/256;/50ms定時(shí)TL0=(65536-50000)%256;IE=0x82;TR0=1;/啟動(dòng)T0while(1)j=0x7f;/顯示Digits_of_6DSY5Digits_of_6DSY0的內(nèi)容/前面高位,后面低位,循環(huán)中i!=-1亦可寫成i!=0xfffor(i=5;i!=-1;i-)j=_crol_(j,1);P3=j;P0=DSY_CODEDigits_of_6DSYi;if(i=1) Dot=1
33、;/加小數(shù)點(diǎn)DelayMS(2);/T0中斷函數(shù)void Timer0() interrupt 1uchar i;TH0=(65536-50000)/256;/恢復(fù)初值TL0=(65536-50000)%256;if(+Count!=2) return;Count=0;Digits_of_6DSY0+;/0.1s位累加for(i=0;i<=5;i+)/進(jìn)位處理if(Digits_of_6DSYi=10)Digits_of_6DSYi=0;if(i!=5) Digits_of_6DSYi+1+; /如果04位則分別向高一位進(jìn)位else break;/若某低位沒(méi)有進(jìn)位,怎循環(huán)提前結(jié)束5 單片
34、機(jī)之間雙向通信/*名稱:甲機(jī)串口程序說(shuō)明:甲機(jī)向乙機(jī)發(fā)送控制命令字符,甲機(jī)同時(shí)接收乙機(jī)發(fā)送的數(shù)字,并顯示在數(shù)碼管上。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit K1=P17;uchar Operation_No=0;/操作代碼/數(shù)碼管代碼uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延時(shí)void DelayMS(uint ms)u
35、char i;while(ms-) for(i=0;i<120;i+);/向串口發(fā)送字符void Putc_to_SerialPort(uchar c)SBUF=c;while(TI=0);TI=0;/主程序void main()LED1=LED2=1;P0=0x00;SCON=0x50;/串口模式1,允許接收TMOD=0x20;/T1工作模式2PCON=0x00;/波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;TR1=1;IE=0x90;/允許串口中斷while(1)DelayMS(100);if(K1=0)/按下K1時(shí)選擇操作代碼0,1,2,3while(K1=0)
36、;Operation_No=(Operation_No+1)%4;switch(Operation_No)/根據(jù)操作代碼發(fā)送A/B/C或停止發(fā)送case 0:Putc_to_SerialPort('X');LED1=LED2=1;break;case 1:Putc_to_SerialPort('A');LED1=LED1;LED2=1;break;case 2:Putc_to_SerialPort('B');LED2=LED2;LED1=1;break;case 3:Putc_to_SerialPort('C');LED1=LED
37、1;LED2=LED1;break;/甲機(jī)串口接收中斷函數(shù)void Serial_INT() interrupt4if(RI)RI=0;if(SBUF>=0&&SBUF<=9) P0=DSY_CODESBUF;else P0=0x00;/*名稱:乙機(jī)程序接收甲機(jī)發(fā)送字符并完成相應(yīng)動(dòng)作說(shuō)明:乙機(jī)接收到甲機(jī)發(fā)送的信號(hào)后,根據(jù)相應(yīng)信號(hào)控制LED完成不同閃爍動(dòng)作。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit
38、 K2=P17;uchar NumX=-1;/延時(shí)void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i<120;i+);/主程序void main()LED1=LED2=1;SCON=0x50;/串口模式1,允許接收TMOD=0x20;/T1工作模式2TH1=0xfd;/波特率9600TL1=0xfd;PCON=0x00;/波特率不倍增RI=TI=0;TR1=1;IE=0x90;while(1)DelayMS(100);if(K2=0)while(K2=0);NumX=+NumX%11;/產(chǎn)生010范圍內(nèi)的數(shù)字,其中10表示關(guān)閉SBUF=Nu
39、mX;while(TI=0);TI=0;void Serial_INT() interrupt 4if(RI)/如收到則LED則動(dòng)作RI=0;switch(SBUF)/根據(jù)所收到的不同命令字符完成不同動(dòng)作case 'X':LED1=LED2=1;break;/全滅case 'A':LED1=0;LED2=1;break;/LED1亮case 'B':LED2=0;LED1=1;break;/LED2亮case 'C':LED1=LED2=0;/全亮五 拓展keil for armJ-LINK 驅(qū)動(dòng)安裝安裝驅(qū)動(dòng)很簡(jiǎn)單,只要將下載的ZIP 包解壓,然后直接安裝即可,默認(rèn)安裝,一路點(diǎn)擊“NEXT”即可:安裝完成后, 請(qǐng)插入 JLINK 硬件,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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至2030中國(guó)裝配式建筑預(yù)制構(gòu)件運(yùn)輸半徑測(cè)算報(bào)告
- 2025至2030中國(guó)建筑型材行業(yè)技術(shù)創(chuàng)新及市場(chǎng)需求前景研究報(bào)告
- 基層醫(yī)院護(hù)理規(guī)范流程及執(zhí)行方案
- 2025-2030燃?xì)獗碇圃鞓I(yè)技術(shù)標(biāo)準(zhǔn)與市場(chǎng)準(zhǔn)入條件研究分析報(bào)告
- 2025-2030湘菜行業(yè)消費(fèi)習(xí)慣變遷與趨勢(shì)預(yù)測(cè)
- 2025-2030湘菜餐飲跨界合作模式與品牌聯(lián)動(dòng)效應(yīng)
- 2025-2030湘菜行業(yè)人才短缺問(wèn)題與解決方案
- 2025-2030湘菜企業(yè)數(shù)字化轉(zhuǎn)型與智能餐飲應(yīng)用前景
- 2025-2030消防安全設(shè)備行業(yè)市場(chǎng)現(xiàn)狀與創(chuàng)新投資規(guī)劃
- 2025-2030消防專用安全吊帶材料創(chuàng)新與產(chǎn)品性能提升可行性研究
- 三峽集團(tuán)2025招聘筆試真題及答案解析
- 尾礦綜合利用技術(shù)在生態(tài)環(huán)境保護(hù)中的應(yīng)用與經(jīng)濟(jì)效益分析報(bào)告
- 施工現(xiàn)場(chǎng)火災(zāi)事故預(yù)防及應(yīng)急措施
- 污水處理站施工安全管理方案
- 2025年蘇州市事業(yè)單位招聘考試教師招聘體育學(xué)科專業(yè)知識(shí)試卷
- 加油站投訴處理培訓(xùn)課件
- 學(xué)堂在線 雨課堂 學(xué)堂云 唐宋詞鑒賞 期末考試答案
- 2025至2030中國(guó)輻射監(jiān)測(cè)儀表市場(chǎng)投資效益與企業(yè)經(jīng)營(yíng)發(fā)展分析報(bào)告
- 工程力學(xué)(本)2024國(guó)開(kāi)機(jī)考答案
- 產(chǎn)品認(rèn)證標(biāo)志管理制度
- GB/T 31907-2025服裝測(cè)量方法
評(píng)論
0/150
提交評(píng)論