基于定時(shí)器計(jì)數(shù)器的單片機(jī)仿真和C語(yǔ)言開(kāi)發(fā)_第1頁(yè)
基于定時(shí)器計(jì)數(shù)器的單片機(jī)仿真和C語(yǔ)言開(kāi)發(fā)_第2頁(yè)
基于定時(shí)器計(jì)數(shù)器的單片機(jī)仿真和C語(yǔ)言開(kāi)發(fā)_第3頁(yè)
基于定時(shí)器計(jì)數(shù)器的單片機(jī)仿真和C語(yǔ)言開(kāi)發(fā)_第4頁(yè)
基于定時(shí)器計(jì)數(shù)器的單片機(jī)仿真和C語(yǔ)言開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、摘 要本次能力拓展的要求是要求實(shí)現(xiàn)利用定時(shí)器中斷方式或查詢定時(shí)器溢出標(biāo)志方式從P口輸出給定周期的方波。在此基礎(chǔ)上,我決定進(jìn)行一些拓展,使其能實(shí)現(xiàn)輸出方波的頻率和占空比可調(diào)。如果以調(diào)節(jié)變阻器的阻值來(lái)實(shí)現(xiàn)頻率的調(diào)節(jié)相對(duì)來(lái)說(shuō)要麻煩些,所以我們決定用按鍵來(lái)調(diào)節(jié)頻率和占空比,而以鍵盤(pán)掃描來(lái)實(shí)現(xiàn)各鍵的不同功能。關(guān)鍵字:定時(shí)器;中斷;方波1. 概述單片機(jī)集成度高、功能強(qiáng)、可靠性高、體積小、功耗地、使用方便、價(jià)格低廉等一系列優(yōu)點(diǎn),目前已經(jīng)滲入到人們工作和生活的方方面面,幾乎“無(wú)處不在,無(wú)所不為”。單片機(jī)的應(yīng)用領(lǐng)域已從面向工業(yè)控制、通訊、交通、智能儀表等迅速發(fā)展到家用消費(fèi)產(chǎn)品、辦公自動(dòng)化、汽車電子、PC機(jī)外圍以

2、及網(wǎng)絡(luò)通訊等廣大領(lǐng)域。 單片機(jī)有兩種基本結(jié)構(gòu)形式:一種是在通用微型計(jì)算機(jī)中廣泛采用的,將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合用一個(gè)存儲(chǔ)器空間的結(jié)構(gòu),稱為普林斯頓結(jié)構(gòu)。另一種是將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器截然分開(kāi),分別尋址的結(jié)構(gòu),一般需要較大的程序存儲(chǔ)器,目前的單片機(jī)以采用程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器截然分開(kāi)的結(jié)構(gòu)為多。 本課題討論的方波發(fā)生器的核心是目前應(yīng)用極為廣泛的 51系列單片機(jī)。其內(nèi)部包括:(1) 一個(gè)8位的CPU;(2) 4KB程序存儲(chǔ)器ROM;(3) 128字節(jié)RAM數(shù)據(jù)存儲(chǔ)器;(4) 兩個(gè)16位定時(shí)/計(jì)數(shù)器;(5) 可尋址64KB外部數(shù)據(jù)存儲(chǔ)器和64KB外部存儲(chǔ)空間的控制電路;(6) 32條可編程的I/

3、O線(4個(gè)8位并行I/O端口);(7) 一個(gè)可編程全雙工串行口;(8) 具有兩個(gè)優(yōu)先級(jí)嵌套接口的5個(gè)中斷源;2. 總體設(shè)計(jì)方案2.1 方案介紹在電子技術(shù)領(lǐng)域中,實(shí)現(xiàn)方波發(fā)生器的方法有很多種,可以采用不同的原理及器件構(gòu)成不同的電路,但可以實(shí)現(xiàn)相同的功能。在此次課設(shè)中,微處理器模塊使用AT89C51。本設(shè)計(jì)中用到兩個(gè)定時(shí)器,定時(shí)器0和定時(shí)器1,其中定時(shí)器0工作在定時(shí)方式下,決定方波的頻率;定時(shí)器1同樣工作在定時(shí)方式下,用于設(shè)定占空比。鍵盤(pán)的操作是通過(guò)外中斷與單片機(jī)共同來(lái)控制的,鍵盤(pán)操作來(lái)完成按要求對(duì)頻率與占空比進(jìn)行調(diào)節(jié)。P0.7為方波輸出口,它連接一個(gè)示波器即可觀察輸出的方波了。2.2 方波發(fā)生器

4、原理與功能方波發(fā)生器原理框圖如圖2.1所示:頻率與占空比調(diào)節(jié)輸出方波 示波器AT89C51 單片機(jī) 鍵盤(pán)圖2.1 方波發(fā)生器原理框圖由于系統(tǒng)的要求不高,比較單一的,再加上我們是通過(guò)定時(shí)器來(lái)調(diào)節(jié)頻率的,而非電阻,因此實(shí)現(xiàn)起來(lái)就相對(duì)簡(jiǎn)化了。僅用鍵盤(pán)、AT89C51及示波器便可完成設(shè)計(jì),達(dá)到所要求實(shí)現(xiàn)的功能。方波發(fā)生器工作原理與功能:簡(jiǎn)單的流程為:主程序掃描鍵盤(pán),將設(shè)置信息輸入,處理后,輸出到示波器顯示。單片機(jī)的晶振為11.0592MHz,用到了兩個(gè)定時(shí)器,即定時(shí)器0與定時(shí)器1,分別進(jìn)行頻率與占空比的定時(shí),兩個(gè)定時(shí)器都是工作在方式1。根據(jù)計(jì)算定時(shí)器初值的公式: (式2-1)計(jì)算出定時(shí)器0與定時(shí)器1所

5、要裝入的初值,然后將工作方式控制字寫(xiě)入TMOD寄存器,再將和寄存器,最后啟動(dòng)定時(shí)器,即將置位。如果工作于中斷方式,需置位EA(中斷總開(kāi)關(guān))及(允許定時(shí)/計(jì)數(shù)器中斷),并編中斷服務(wù)程序。此電路的鍵盤(pán)是由一個(gè)狀態(tài)鍵,四個(gè)功能鍵(調(diào)節(jié)頻率與占空比的增減)組成,其特殊之處在于利用外部中斷實(shí)現(xiàn)鍵盤(pán)掃描。狀態(tài)鍵有三種狀態(tài),當(dāng)其處于狀態(tài)0時(shí),則其它的鍵會(huì)處于無(wú)用狀態(tài);當(dāng)其處于狀態(tài)1時(shí),可通過(guò)按四個(gè)調(diào)節(jié)鍵來(lái)調(diào)節(jié)頻率;當(dāng)處于狀態(tài)2時(shí),按四個(gè)調(diào)節(jié)鍵中的前兩個(gè)便可對(duì)占空比進(jìn)行調(diào)節(jié)了;當(dāng)處于狀態(tài)3時(shí),又會(huì)回到狀態(tài)0,此時(shí)正常顯示方波。3. 系統(tǒng)硬件設(shè)計(jì)3.1 AT89C51簡(jiǎn)介單片機(jī)是在一塊芯片中集成了CPU、RAM

6、、ROM、定時(shí)/計(jì)數(shù)器和多功能I/O口等計(jì)算機(jī)所需要的基本部件的大規(guī)模集成電路,又稱MCU。其以體積小、功能全、性價(jià)比等諸多優(yōu)點(diǎn)而獨(dú)具特色,在工業(yè)控制、尖端武器、通信設(shè)備、家用電器等嵌入式應(yīng)用領(lǐng)域中獨(dú)占鰲頭。如果說(shuō)C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)的基礎(chǔ)課,那么單片機(jī)以其系統(tǒng)硬件構(gòu)架完整、價(jià)格低廉、學(xué)生能動(dòng)手等特點(diǎn),成為工科學(xué)生硬件設(shè)計(jì)基礎(chǔ)課。其管腳圖如右圖所示。 圖3.1 AT89C51管腳圖3.2 內(nèi)部振蕩電路圖3.2 內(nèi)部振蕩電路8XX51單片機(jī)的時(shí)鐘信號(hào)通常分為內(nèi)部振蕩方式和外部振蕩方式。因?yàn)榇舜握n設(shè)我們用到的是內(nèi)部振蕩方式,所以只對(duì)前者進(jìn)行簡(jiǎn)單介紹。如圖3.2所示,在引腳XTAL1和XTAL2外

7、接晶體振蕩器或陶瓷振蕩器,就構(gòu)成了內(nèi)部振蕩方式。由于單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,當(dāng)外接晶體后,就構(gòu)成了自激振蕩器,并產(chǎn)生振蕩時(shí)鐘脈沖。晶振通常選用6MHz、12MHz、24MHz。圖中C2和C3起穩(wěn)定振蕩頻率,快速起振的作用。電容值一般為530pF。3.3 復(fù)位電路圖3.3 復(fù)位電路復(fù)位操作完成單片機(jī)內(nèi)電路的初始化,使單片機(jī)從一確定的狀態(tài)開(kāi)始運(yùn)行。當(dāng)8XX51單片機(jī)的復(fù)位引腳RST出現(xiàn)5ms以上的高電平時(shí),單片機(jī)就完成了復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài),而無(wú)法執(zhí)行程序,因此要求單片機(jī)復(fù)位后能脫離復(fù)位狀態(tài)。圖3.3所示的為上電且開(kāi)關(guān)復(fù)位電路,上電后電容充電,使RS

8、T持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且開(kāi)關(guān)復(fù)位的操作。通常選擇。3.4 按鍵接口電路小鍵盤(pán)如圖3.4所示。它包括8個(gè)鍵,系統(tǒng)中用到的鍵只有5個(gè),分別為S1鍵,S2鍵,S3鍵,S4鍵,S5鍵。其中S1鍵是狀態(tài)鍵,采用外部中斷控制,用它來(lái)確定其它幾個(gè)鍵的按鍵功能,具體作用在前述的系統(tǒng)功能中已做介紹了;另外4個(gè)鍵為功能鍵,是用來(lái)調(diào)節(jié)頻率與占空比的。小鍵盤(pán)中引出的6根線依次分別接單片機(jī)的P1.0、P1.1、P1.2、P1.3、P1.4、P1.5口。其中P1.0P1.3是為鍵盤(pán)列線,P1.4和P1.5是鍵盤(pán)行線。當(dāng)某個(gè)鍵按下時(shí),由行掃描值和列回饋信號(hào)共同形成鍵編碼。圖3.4 按鍵接口電路如上所介紹的,按

9、鍵接口電路采用的是外部中斷控制,如圖3.5所示,P1.0P.14為4輸入與門輸入端,輸出端接外部中斷0控制端,當(dāng)有某一鍵按下時(shí),由于輸入端電平的變化會(huì)導(dǎo)致進(jìn)入的電平也發(fā)生變化,由此將會(huì)產(chǎn)生外部0中斷,達(dá)到按鍵控制的作用。圖3.5 按鍵控制外部中斷電路 4. 系統(tǒng)軟件設(shè)計(jì)方波發(fā)生器的軟件設(shè)計(jì)包括主程序、延時(shí)子程序、系統(tǒng)初始化程序、鍵盤(pán)掃描程序、定時(shí)器中斷子程序。其中主程序用來(lái)控制整個(gè)程序的執(zhí)行,它與各子程序緊密相聯(lián),共同實(shí)現(xiàn)方波發(fā)生器各種功能的執(zhí)行。4.1 系統(tǒng)初始化程序在此程序中,給所有變量賦初值,有鍵盤(pán)掃描口、選擇串行口工作方式SCON、狀態(tài)標(biāo)志位flag、初始頻率與占空比及其定時(shí)、定時(shí)器0

10、與定時(shí)器1的工作方式等。初始化時(shí)啟動(dòng)了定時(shí)器0與定時(shí)器1。4.2 定時(shí)器中斷子程序void Timer0_PL() interrupt 1 /頻率定時(shí)器0中斷 TR1=1;/啟動(dòng)定時(shí)器1,占空比定時(shí) TL0=TIMER0_L; TH0=TIMER0_H; OutPut=1; /輸出高電平void Timer1_PL() interrupt 3 /占空比定時(shí)器1中斷 TR1=0;/定時(shí)器1停止 TL1=TIMER1_L; TH1=TIMER1_H; OutPut=0; /輸出低電平定時(shí)器中斷子程序中有定時(shí)器0與定時(shí)器1中斷,頻率定時(shí)器0中斷流程圖與占空比定時(shí)器1流程圖分別如圖4.1和圖4.2所示

11、。其過(guò)程為:(1)定時(shí)器0遇中斷執(zhí)行的操作有復(fù)位,啟動(dòng)自身進(jìn)行頻率定時(shí),同時(shí)啟動(dòng)定時(shí)器1,進(jìn)行占空比定時(shí),輸出高電平。(2)定時(shí)器1遇中斷,停止自身的計(jì)時(shí),輸出低電平。如此循環(huán)進(jìn)行從而達(dá)到輸出方波的目的。定時(shí)器1中斷入口TR1=0重裝定時(shí)初值輸出低電平結(jié)束圖4.2 占空比定時(shí)器0中斷流程定時(shí)器0中斷入口TR1=1重裝定時(shí)初值輸出高電平結(jié)束圖4.1 頻率定時(shí)器0中斷流程 4.3 鍵盤(pán)掃描程序鍵盤(pán)掃描用外中斷0實(shí)現(xiàn),采用的是線反法,鍵盤(pán)掃描采用逐行掃描的方法。當(dāng)頻率可調(diào)時(shí),占空比保持原狀不變,反之亦然,只能進(jìn)行單一變量的調(diào)節(jié),狀態(tài)標(biāo)志flag的初始值為0。(1)頻率調(diào)節(jié): i=0時(shí),按鍵為狀態(tài)鍵,

12、此時(shí)flag加1,即flag=1,此時(shí)進(jìn)行頻率的調(diào)節(jié)??梢赃M(jìn)行加1Hz、減1Hz、加100Hz、減100Hz操作,分別由S2鍵、S3鍵、S4鍵、S5鍵控制。如果按住某個(gè)鍵不放,便會(huì)執(zhí)行連續(xù)加值或減值操作。這里的頻率的最大值為15000Hz,當(dāng)頻率增至最大值時(shí),還按增值鍵,此時(shí)頻率會(huì)自動(dòng)跳到1Hz開(kāi)始繼續(xù)增加。同理,頻率的最小值為1Hz,當(dāng)減頻率減至最小值時(shí),再按減頻率鍵,則頻率會(huì)跳到15000Hz。(2)占空比調(diào)節(jié):當(dāng)狀態(tài)值flag=2時(shí),此時(shí)頻率保持不變,進(jìn)行占空比調(diào)節(jié)。只可進(jìn)行加1與減1操作,分別由S2鍵、S3鍵控制。要注意的是占空比的初值是50,我們定義的ZKB為50(百分比的分子部分,

13、為一整數(shù)),故調(diào)節(jié)占空比時(shí),ZKB會(huì)進(jìn)行加1,減1操作。ZKB的最大值為99,當(dāng)增到最大值時(shí),便會(huì)返回到值1,如此循環(huán)。(3)為了減輕單片機(jī)的工作量,在軟件設(shè)計(jì)中采取了這樣的措施,在修改參數(shù)確定后才進(jìn)行定時(shí)器初值TC0、TC1的計(jì)算。鍵盤(pán)中斷處理子程序流程圖與鍵處理流程圖分別如圖4.3、圖4.4所示:NYi=1 ZKB+i=2 ZKB-邊界處理Flag=2?NYi=0?Flag+=1鍵處理Y Yi=3 PL+=100i=4 PL-=100i=2 PL-i=1 PL+邊界處理NFlag=1?YNFlag=3?Flag=0,計(jì)算定時(shí)器0和1的初值鍵處理結(jié)束 圖4.4 鍵處理流程圖圖4.3 鍵盤(pán)中斷

14、處理子程序流程圖YNEA=0軟件延時(shí)消抖外部中斷0入口鍵盤(pán)掃描,得到鍵碼查表取鍵值i實(shí)時(shí)顯示鍵盤(pán)口初始化EA=1結(jié)束鍵處理是否為抖動(dòng)5. 軟件仿真5.1 keil編譯器生成HEX文件由于這次能力拓展使用的C語(yǔ)言編程,所以不能用WAVE軟件進(jìn)行仿真,于是我們選用keil編譯器進(jìn)行仿真。主要介紹C程序生成hex文件的方法:(1) 雙擊打開(kāi)Keil uVision3,選擇project新建工程并保存,在出現(xiàn)的CPU對(duì)話框中選擇ATMEL中的AT89C51芯片。(2) 點(diǎn)擊確定生成工程,在file菜單中選擇新建,新建一個(gè)文件,在里面輸入自己寫(xiě)的程序代碼,并保存。(3) 在左面的工程上右擊選擇add f

15、iles to group,將剛開(kāi)的文件添加的工程,然后同樣右鍵target選擇options for target,打開(kāi)設(shè)置,在output選項(xiàng)中選擇create hex fil這一項(xiàng)。(4) 點(diǎn)擊編譯,以及它后面的生成選項(xiàng),便可在工程目錄下生成hex文件。5.2 proteus軟件仿真在生成*.HEX文件后,進(jìn)入Protues軟件,此時(shí)軟件已自動(dòng)打開(kāi)一新建項(xiàng)目。我們可直接在其中構(gòu)建電路圖,點(diǎn)擊板面左側(cè)按鍵P,在彈出的Pick devices對(duì)話框中進(jìn)行元器件的選擇,文件要求必須是HEX文件。然后可以點(diǎn)擊運(yùn)行觀察現(xiàn)象,看與自己設(shè)置的符合否,如果不相符在查找錯(cuò)誤進(jìn)行修改,一般的錯(cuò)誤都是程序中的

16、,所以要認(rèn)真的讀取程序的每一個(gè)部分。在元器件都找到后,我們可以先進(jìn)行排版再按照電路圖連接,如連接好后如下圖所示:圖5.1 仿真電路圖在電路連接好后,雙擊AT89C51在彈出對(duì)話框中選擇單片機(jī)中要輸入的程序,見(jiàn)下圖:圖5.2 向AT89C51中加入程序當(dāng)完成以上步驟后,就可以點(diǎn)擊開(kāi)始按鈕進(jìn)行仿真了,原始方波輸出如圖5.3所示:圖5.3 輸出原始波形圖當(dāng)仿真開(kāi)始后,按一次S1,則此時(shí)Flag狀態(tài)為1,可以進(jìn)行平率的調(diào)整,頻率調(diào)整后波形輸出如下圖所示:圖5.3 頻率調(diào)整后的波形輸出再按S1將Flag狀態(tài)調(diào)整為狀態(tài)2,此時(shí)可以對(duì)波形的占空比進(jìn)行調(diào)整,調(diào)整占空比后的波形如下圖所示:圖5.5 占空比調(diào)整后

17、的輸出波形6. 心得體會(huì)單片機(jī)設(shè)計(jì)是一門很實(shí)用,很難的設(shè)計(jì)。這個(gè)設(shè)計(jì)用到了單片機(jī),電路等方面的知識(shí),通過(guò)這次課程設(shè)計(jì),使我對(duì)單片機(jī)及其附屬電路有了一定的了解,對(duì)課本上的知識(shí)有了近一步的掌握,也深刻明白了自己的不足。完成本次課程設(shè)計(jì)的過(guò)程,是一個(gè)從無(wú)到有的過(guò)程,經(jīng)歷了興奮、自信、失落、奮發(fā)、所悟、完成幾個(gè)過(guò)程。剛做做課程設(shè)計(jì)時(shí),仔細(xì)閱讀設(shè)計(jì)的題目和要求,以為沒(méi)什么困難的,所用的知識(shí)書(shū)上都有??墒钱?dāng)我動(dòng)手開(kāi)始做的時(shí)候,才發(fā)現(xiàn)其中的算法,設(shè)計(jì)是那么繁瑣。經(jīng)過(guò)一天的努力,毫無(wú)結(jié)果。失落的心情油然而生。于是,再到圖書(shū)館和網(wǎng)上查找資料,在經(jīng)過(guò)借鑒很多類似的資料,文獻(xiàn)后,總算是有點(diǎn)眉目了。埋頭苦干的過(guò)程是痛

18、苦的,尤其是在思考算法和程序框架時(shí),迷茫,煩躁,特別是當(dāng)苦思出來(lái)一個(gè)結(jié)果,又被自己推翻,心痛的無(wú)法言繪。在痛苦中掙扎,建立,推翻,參考別人的思路,建立,再次在推翻,在這不斷循環(huán)中,終于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知領(lǐng)域”的困難。但當(dāng)課程設(shè)計(jì)完成時(shí),那感覺(jué)是甜蜜的,沒(méi)有耕耘,哪來(lái)得收獲的喜悅,不懂付出怎么能知道回報(bào)的快樂(lè),一分耕耘一分收獲,有付出才會(huì)有回報(bào),就在這樣的痛與快樂(lè)的交換中,我學(xué)到了知識(shí), 學(xué)到了做人的道理。通過(guò)這短短一周的實(shí)踐,我感覺(jué)到自己從課本上學(xué)到的理論知識(shí)和實(shí)踐仍有很大的差距。最少很多元器件根本不知道有什么功效,在仿真儀器中是什么代碼。有的知識(shí),自

19、己感覺(jué)已經(jīng)掌握得差不多了,但是實(shí)際操作起來(lái)就有問(wèn)題出現(xiàn)了。我遇到了不少問(wèn)題,花費(fèi)了很多的時(shí)間。這讓我重新反思我們的學(xué)習(xí),深刻領(lǐng)悟到我們這個(gè)專業(yè)動(dòng)手,實(shí)踐的重要性。理論不經(jīng)過(guò)實(shí)踐考驗(yàn),是沒(méi)法實(shí)施的,就像我們編的程序,很多方面考慮的都不夠,幾乎沒(méi)有涉及到實(shí)際應(yīng)用時(shí)的防范方法措施。這次的課程設(shè)計(jì),讓我學(xué)到了很多書(shū)本上學(xué)不到的東西,學(xué)到了實(shí)際應(yīng)用時(shí),是取用成本的最小化,做設(shè)計(jì)不僅要考慮大的方面,小的方面也必須做到完美。最大的收獲是C51語(yǔ)言的應(yīng)用有了深刻的了解。參考文獻(xiàn)1 何立民.MCS51單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)M.北京:北京航空航天大學(xué)出版社,2003.2 徐君毅.單片微型機(jī)原理與應(yīng)用M.上海:上??萍?/p>

20、出版社,19953 公茂法.單片機(jī)人機(jī)接口實(shí)例集M.北京:航空航天大學(xué)出版社,1998.4 沈紅衛(wèi).基于單片機(jī)的智能系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)M.北京:電子工業(yè)出版社, 2005.5 李廣弟,朱月秀等.單片機(jī)基礎(chǔ)M.北京:北京航空航天大學(xué)出版社, 2003.附錄:源程序代碼#include<reg51.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int #define KEY_PORT P1 /P1口為鍵盤(pán)掃描口sbit OutPut=P07; /矩形波輸出口/* 設(shè)全局變量 */fl

21、oat fosc=11059200; /系統(tǒng)時(shí)鐘頻率float length=65536; /方式1計(jì)數(shù)長(zhǎng)度uchar flag; /狀態(tài)鍵標(biāo)志uchar ZKB; /占空比uint PL; /頻率uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; /定時(shí)器0和1的定時(shí)初值uchar code tabl12=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00; /LED共陰極代碼uchar code tabl218=0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41

22、,0x42,0x44,0x48,0x81,0x82,0x84,0x88; /鍵值表/* 延時(shí)子程序*/void delay1ms(uchar n) /延時(shí)n ms uchar j; while(n-) for(j=0;j<122;j+) ; /* 系統(tǒng)初始化*/void system_init(void ) KEY_PORT=0x0f; SCON=0x00; flag=0; PL=1000; ZKB=50; TL0=0x66; /初始頻率1KHz定時(shí)1ms TH0=0xfc; TL1=0x33; /初始占空比50定時(shí)0.5ms TH1=0xfe; TMOD=0x11; /定時(shí)器1和定時(shí)器

23、0工作在方式1,的定時(shí)模式 IT0=0; /選擇INT0為低電平觸發(fā)方式 EX0=1; /外部中斷0允許 ET0=1; /定時(shí)器1和定時(shí)器0中斷允許 ET1=1; EA=1; /系統(tǒng)中斷允許 TR0=1; /定時(shí)器1和定時(shí)器0開(kāi)始定時(shí) TR1=1;/* 發(fā)送數(shù)據(jù)*/void send(uchar d) SBUF=d; while(!TI); TI=0; /* 顯示子程序*/void display(uint PL,uchar ZKB) uchar a,b,c,d,e,m,n; a=PL/10000; /分離頻率的各位數(shù)值 b=PL/1000; b=b%10; c=PL/100; c=c%10;

24、 d=PL%100; d=d/10; e=PL%10; if(a=0) /頻率顯示的高位滅零 a=10; if(b=0) b=10;if(c=0) c=10; if(d=0) d=10; if(e=0)e=10; m=ZKB/10; /分離占空比各位數(shù)值 n=ZKB%10; if(m=0) m=10; /占空比顯示的高位滅零 if(n=0)n=10; send(tabla); send(tablb); send(tablc); send(tabld); send(table); send(0x02); /頻率和占空比中間加一橫線“-”以示區(qū)別 send(tablm); send(tabln);

25、 delay1ms(200); delay1ms(200);/延時(shí)開(kāi)鍵盤(pán)中斷,處理好(避免又利用)連擊問(wèn)題/* 鍵盤(pán)掃描(線反法)*/void Key_Scan() interrupt 0 /鍵盤(pán)掃描用外中斷0 uchar scancode,keycode,i; float TC0,TC1; EX0=0; /關(guān)中斷 delay1ms(5); scancode=0xef; /鍵盤(pán)掃描碼,采用逐行掃描的方法 while(scancode!=0xff) KEY_PORT=scancode; /輸入掃描碼,掃描P1.4對(duì)應(yīng)的行 keycode=KEY_PORT; /讀出數(shù)據(jù),看是否在此行上的某列鍵盤(pán)被

26、按下 if(keycode&0x0f)!=0x0f) break; /掃描到按下的鍵,則退出 scancode=(keycode<<1)|0x0f; /否則,更新掃描碼繼續(xù)掃描 keycode=keycode; for(i=0;i<8;i+) if(tabl2i=keycode)break; /取得鍵號(hào)if(i=0) flag+;if(flag=1) /狀態(tài)1下對(duì)頻率進(jìn)行調(diào)整 if(i=1) /按鍵為1號(hào),頻率加1 PL+; if(PL>15000) PL=15; if(i=2) /按鍵為2號(hào),頻率減1 PL-; if(PL<15) PL=15000; i

27、f(i=3) /按鍵為3號(hào),頻率加100 PL+=100; if(PL>15000) PL=15; if(i=4) /按鍵為4號(hào),頻率減100 PL=PL-100; if(PL<15) PL=15000; if(flag=2) /狀態(tài)2下對(duì)占空比進(jìn)行調(diào)整 if(i=1) /按鍵為1號(hào),占空比加1 ZKB+; if(ZKB>99) ZKB=1; if(i=2) /按鍵為2號(hào),占空比減1 ZKB-; if(ZKB<1) ZKB=99; if(flag=3) /狀態(tài)返回,正常工作 flag=0; /清狀態(tài)標(biāo)志TC0=(length-fosc/(12*PL)+0.5); /頻率定時(shí)初值TC1=(length-(fosc*Z

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論