




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目8
電子鐘程序設(shè)計(jì)
嵌入式單片機(jī)方向—單片機(jī)C語言程序項(xiàng)目設(shè)計(jì)電子表是單片機(jī)簡(jiǎn)單系統(tǒng)最典型的案例,本節(jié)學(xué)習(xí)使用動(dòng)態(tài)掃描的方式實(shí)現(xiàn)6位數(shù)碼管組成的電子鐘的設(shè)計(jì)方法,主要目的是讓讀者掌握結(jié)構(gòu)化程序設(shè)計(jì)方法,了解利用數(shù)組變量實(shí)現(xiàn)數(shù)碼管數(shù)字顯示技巧;并熟練掌握鍵盤的控制編程方式。本案例設(shè)計(jì)分階段進(jìn)行,首先使用定時(shí)器的方式,實(shí)現(xiàn)時(shí)鐘的顯示、調(diào)整,包括調(diào)整時(shí)數(shù)字的閃動(dòng),調(diào)整范圍的界定等問題。然后實(shí)現(xiàn)單鬧鐘的功能,包括定時(shí)時(shí)間的顯示,所定時(shí)間的調(diào)整,定時(shí)到時(shí)的響鈴等功能。最后實(shí)現(xiàn)雙鬧鐘的全部可調(diào)的設(shè)計(jì)目標(biāo)。 任務(wù)說明
8.1.1設(shè)計(jì)任務(wù)
電子表使用6位數(shù)碼管實(shí)現(xiàn)顯示時(shí)分秒,實(shí)現(xiàn)雙定鬧。使用4個(gè)鍵控制,按模式鍵以后調(diào)整數(shù)字加減、鬧鐘開啟。長按加減鍵,快速調(diào)整,停止閃爍。普通模式按下鬧鐘鍵顯示定時(shí)時(shí)間,鬧鈴時(shí)按下則停止鬧鈴。進(jìn)入調(diào)整模式后10秒任意鍵沒有操作,將返回到正常顯示模式。采用的電路見圖8.1.1所示。六位數(shù)碼管的段選連接在單片機(jī)的P0口,位選連接在單片機(jī)的P2口,從右至左分別從P2.0到P2.5。鍵盤連接在P3.2到P3.5口。蜂鳴器連接在單片機(jī)的P1.7口。圖8.1.1硬件電路圖8.1.2系統(tǒng)功能分析 此處以使用定時(shí)器中斷計(jì)時(shí)的單時(shí)鐘鬧鈴為例進(jìn)行講解,后附雙時(shí)鐘DS1302時(shí)鐘的完整程序,兩程序結(jié)構(gòu)相似,后者在功能上更為完整,走時(shí)更為準(zhǔn)確,具有實(shí)用價(jià)值。在設(shè)計(jì)中主要功能可以劃分為鍵盤控制模塊、顯示時(shí)間輸出、定時(shí)等部分內(nèi)容。時(shí)間的計(jì)數(shù)要使用定時(shí)器中斷來實(shí)現(xiàn)。一、鍵盤控制
鍵盤控制是本設(shè)計(jì)中的重要部分,在鍵盤上實(shí)現(xiàn)全部的功能的調(diào)整,首先需要定義各個(gè)按鍵的主要功能,功能如表2-6-1所示。KEY2鍵負(fù)責(zé)調(diào)整模式的選擇,帶有去抖功能,每按下一次,改變一次狀態(tài),前三次修改時(shí)間,后三次修改鬧鐘時(shí)間。KEY3、KEY4在對(duì)應(yīng)的模式下進(jìn)行加或者減,也帶有去抖功能。KEY1在正常顯示時(shí)按下,顯示所定鬧鐘的時(shí)間和開啟與否,在鬧鈴響起時(shí),按下起到停止鬧鈴的作用。由于一直按下時(shí)顯示所定鬧鐘時(shí)間,故此鍵不能帶有去抖功能。表8-1-1鍵盤功能控制鍵名KEY1鬧鈴鍵KEY2模式鍵KEY3加鍵KEY4減鍵按下功能顯示定時(shí)調(diào)時(shí)時(shí)加,23后為0時(shí)減,0后23鬧鈴時(shí)停止鬧鈴調(diào)分分加,59后為0分減,0后59調(diào)秒秒加,59后為0秒減,0后59鬧鐘小時(shí)時(shí)加,23后為0時(shí)減,0后23鬧鐘分鐘分加,59后為0分減,0后59定時(shí)開關(guān)打開關(guān)閉循環(huán)打開關(guān)閉循環(huán)二、顯示時(shí)間輸出 顯示終端為6位數(shù)碼管,從左到右分別顯示時(shí)分秒,小時(shí)、分鐘和秒各占2位數(shù)碼管共6位。在定時(shí)狀態(tài)下,只顯示時(shí)分,右邊第二位熄滅,右邊第一位顯示“F”表示鬧鈴關(guān)閉,“E”表示鬧鈴開啟。在調(diào)整過程中,要求對(duì)應(yīng)的調(diào)整位置以0.5的速度進(jìn)行閃爍,以示區(qū)別。三、定時(shí)輸出 當(dāng)?shù)剿〞r(shí)間時(shí),鬧鈴響起,按下KEY1,鬧鐘停止。在正常顯示時(shí)間模式下按下,顯示定時(shí)時(shí)刻及狀態(tài)。8.1.3設(shè)計(jì)流程
采用“自頂向下”的設(shè)計(jì)方法,根據(jù)對(duì)設(shè)計(jì)功能的分析,可以規(guī)劃出本程序的主要框圖,如圖8.1.2所示。由于使用結(jié)構(gòu)化編程,程序?qū)哟吻宄3绦蜷_始運(yùn)行以后,先進(jìn)行初始化,然后就不斷的檢查鍵盤按下與否,到中斷產(chǎn)生時(shí),就進(jìn)行顯示,計(jì)時(shí),加載數(shù)據(jù)等操作。圖8.1.2程序結(jié)構(gòu)圖一、變量聲明 在程序中使用到多個(gè)變量,在編寫程序前首先應(yīng)對(duì)其進(jìn)行定義。定義的內(nèi)容主要包括三個(gè)數(shù)組的定義,這三個(gè)數(shù)組主要是用在顯示函數(shù)中;程序使用的變量定義;程序硬件接口的定義三個(gè)部分。詳細(xì)定義如下:/**********************************************************************/#include<REG52.H> unsignedcharcodeLEDDATA[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xff,0x8e,0x86}; //數(shù)碼管顯示的代碼表,后三個(gè)為滅燈、“F”、“E”
unsignedcharcodeLEDBITDATA[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f,}; //數(shù)碼管掃描代碼表unsignedcharLEDBuffer[6]; //定義顯示緩沖區(qū)數(shù)組unsignedcharSecond; //秒單元unsignedcharMinute; //分單元unsignedcharHour; //時(shí)單元unsignedcharBeepflag; //定時(shí)響鈴標(biāo)志unsignedcharMinuterom; //定時(shí)分單元unsignedcharHourrom; //定時(shí)時(shí)單元unsignedcharSETFlag=0; //模式標(biāo)志unsignedcharsecond_tick; //閃動(dòng)標(biāo)志unsignedcharTime; //超時(shí)計(jì)數(shù)unsignedcharALMFlag; //定時(shí)開啟標(biāo)志sbitSET_KEY=P3^3; //模式鍵sbitDOWN_KEY=P3^4; //加計(jì)數(shù)鍵sbitUP_KEY=P3^5; //減計(jì)數(shù)鍵sbitALM_KEY=P3^2; //顯示定時(shí)時(shí)間按鍵sbitBeep=P1^7; //蜂鳴器接口引腳/**********************************************************************/二、主程序流程 程序設(shè)計(jì)采用模塊化設(shè)計(jì)方式后,在主程序里面僅包含程序初始化,鍵盤模塊和中斷幾個(gè)部分。程序開始運(yùn)行以后,首先進(jìn)入初始化階段,在對(duì)定時(shí)器進(jìn)行初始化操作后進(jìn)入到while死循環(huán)內(nèi)部,反復(fù)檢查鍵盤是否有操作、鬧鈴是否打開。在這一過程中,定時(shí)器時(shí)間到就進(jìn)入中斷服務(wù)函數(shù),執(zhí)行相應(yīng)操作。對(duì)應(yīng)的結(jié)構(gòu)如圖8.1.2所示。圖8.2.2主程序流程此部分對(duì)應(yīng)的程序代碼如下:/**********************************************************************/voidmain(void){ init(); //初始化 while(1) { key(); //調(diào)用鍵盤 if(ALMFlag==1) { if(Minute!=Minuterom)Beepflag=1;
//定時(shí)和現(xiàn)在不同,關(guān)閉蜂鳴器 if((Hour==Hourrom)&&(Minute==Minuterom)&&(Beepflag==1))Beep=0; //時(shí)分相同并鬧鈴打開就響鈴 } }}/**********************************************************************/ 在定時(shí)部分,首先判斷鬧鈴標(biāo)志是否打開,只有當(dāng)鬧鈴打開,小時(shí)、分鐘都相等的情況下,蜂鳴器開始工作。Beepflag作為標(biāo)志用來使蜂鳴器在到時(shí)間響起時(shí)按下KEY1使其復(fù)位,停止在這一分鐘內(nèi)繼續(xù)鳴響。 三、初始化模塊 初始化的主要功能是指定定時(shí)器的工作方式,裝載初值,打開中斷。該模塊的工作流程如圖8.1.3所示。圖8.1.3初始化流程/***********************************************************/voidinit(){ TMOD=0x01; //T0初始化方式1,定時(shí) TH0=(65536-2000)/256; //TH0,TL0裝入定時(shí)2mS的初值 TL0=(65536-2000)%256; TR0=1; //啟動(dòng)T0工作 ET0=1; //允許T0溢出中斷 EA=1; //CPU開中斷}/**********************************************************/ 中斷時(shí)間和機(jī)器周期單位為微秒,機(jī)器周期是單片機(jī)振蕩周期12倍,如果單片機(jī)的晶體振蕩頻率為,則機(jī)器周期
由于執(zhí)行定時(shí)器初始化相關(guān)語句和晶體振蕩頻率誤差會(huì)影響定時(shí)器精度,實(shí)際預(yù)置數(shù)需要進(jìn)行調(diào)試調(diào)整。 在本程序中,機(jī)器周期為1微秒,要求2000微秒即2毫秒中斷1次,Timer0計(jì)數(shù)最大為0xffff,定時(shí)器預(yù)置數(shù)值按下面公式計(jì)算:
[預(yù)置數(shù)]16=[(2定時(shí)器位-中斷時(shí)間/機(jī)器周期]10三、顯示模塊 顯示部分主要作用是把顯示暫存區(qū)的內(nèi)容傳輸?shù)綌?shù)碼管上。由于是6位數(shù)碼管,因此必須要使用動(dòng)態(tài)掃描的方式,動(dòng)態(tài)掃描的方式有多種,在本例中是通過建立暫存區(qū)來實(shí)現(xiàn),建立暫存區(qū)的目的就是使顯示模塊獨(dú)立出來,如何顯示內(nèi)容在編程的其他部分不用過多考慮,只需要把顯示數(shù)據(jù)放入在暫存區(qū)內(nèi),起到數(shù)據(jù)傳遞的作用,基本的結(jié)構(gòu)如圖8.1.4所示。圖8.1.4顯示的基本模塊在本模塊中,核心的語句就是: P2=LEDBITDATA[LEDScanCount]; //送出位選數(shù)據(jù) P0=LEDDATA[LEDBuffer[LEDScanCount]]; //送出段選數(shù)據(jù) LEDScanCount++; //掃描指針加計(jì)數(shù) if(LEDScanCount==6)LEDScanCount=0; //掃描完從頭開始語句中LEDBuffer[]就是所說的暫存區(qū),實(shí)際是一個(gè)數(shù)組。
LEDScanCount相當(dāng)于掃描計(jì)數(shù)器,從0到5循環(huán)。LEDDATA[]為數(shù)碼管的編碼字符,LEDBITDATA[]是對(duì)應(yīng)的數(shù)碼管選中編碼。 現(xiàn)以右端顯示兩位數(shù)為例進(jìn)行說明,要顯示的數(shù)據(jù)為“32”,把個(gè)位“2”放入LEDBuffer[0],把十位“3”放入LEDBuffer[1]。假設(shè)LEDScanCount初始為0。進(jìn)入到該部分后,首先送位選數(shù)據(jù),LEDScanCount=0,也就是LEDBITDATA[0],LEDBITDATA[0]意味著此數(shù)組中的第一個(gè)數(shù)即0xFE,也就是P2=0xFE=11111110,由電路結(jié)構(gòu)可知,使用的是共陽型數(shù)碼管通過反向器驅(qū)動(dòng),最后一位為“0”,取反后即可驅(qū)動(dòng)數(shù)碼管,因此最右邊的數(shù)碼管被選中,位選功能已經(jīng)實(shí)現(xiàn)。下面開始送段選數(shù)據(jù),LEDScanCount=0,即LEDBuffer[0],LEDBuffer[0]=2,故P0=LEDDATA[2]=0xA4,就送出了段選數(shù)據(jù)。此時(shí) P2=0xFE=11111110 P0=LEDDATA[2]=0xA4 同理,LEDScanCount=1時(shí) P2=LEDBITDATA[LEDScanCount]; =LEDBITDATA[1]; =0xFD=11111101; P0=LEDDATA[LEDBuffer[LEDScanCount]]; =LEDDATA[LEDBuffer[1]]; =LEDDATA[3]; =0xB0 執(zhí)行完后,LEDScanCount加一,當(dāng)LEDScanCount為2時(shí)清零,通過對(duì)這幾句的反復(fù)調(diào)用實(shí)現(xiàn)動(dòng)態(tài)顯示功能。 顯示模塊進(jìn)入以后判定是否需要閃爍,然后送出位選數(shù)據(jù),在送段選數(shù)據(jù)時(shí)需要結(jié)合當(dāng)前的模式狀態(tài),也就是SETFlag的數(shù)值進(jìn)行選擇。由于調(diào)整時(shí)間和調(diào)整定時(shí)需要閃爍的時(shí)分秒位置對(duì)應(yīng),故SETFlag的1、4相同,2、5相同,3、6相同,0時(shí)為正常顯示。當(dāng)為1、4時(shí),數(shù)碼管的最左段兩位需要閃爍,因此,當(dāng)掃描到最左段兩位即LEDScanCount>=4,P0送i和所送數(shù)據(jù)的按位取或,當(dāng)i為11111111時(shí),不管所送為何值,P0送出的都是11111111,也就是關(guān)閉了該位的數(shù)碼管顯示。i隔0.5秒后變化為00000000,此時(shí)送出的就是原始數(shù)據(jù),這樣就實(shí)現(xiàn)了該位的閃爍功能。其他各位情況相同,不再累述。當(dāng)掃描到其他不需要閃爍的位置時(shí),執(zhí)行else語句,正常的送出數(shù)據(jù),不再和i去或。每次進(jìn)入display函數(shù)一次,點(diǎn)亮一位數(shù)碼管,進(jìn)入六次以后,也就是當(dāng)掃描到最后一位時(shí)LEDScanCount清零復(fù)位。該模塊的主要流程如圖8.1.5所示。圖2.6.5顯示流程
此模塊代碼如下:/**********************************************************************/voiddisplay(void) //顯示暫存區(qū)內(nèi)容對(duì)應(yīng)的代碼顯示{ unsignedcharLEDScanCount,i; //位選掃描計(jì)數(shù)器P0=0xff; //適應(yīng)仿真需要if((UP_KEY==0)||(DOWN_KEY==0))i=0x00; //加減鍵有操作放棄閃爍elsei=0xff*second_tick; //設(shè)定閃爍變量P2=LEDBITDATA[LEDScanCount]; //送出位選數(shù)據(jù)switch(SETFlag) { case0: P0=LEDDATA[LEDBuffer[LEDScanCount]];break; //送出段選數(shù)據(jù) case1: if(LEDScanCount>=4) //判斷出最高兩位 P0=i|LEDDATA[LEDBuffer[LEDScanCount]];
//使小時(shí)閃爍 else
P0=LEDDATA[LEDBuffer[LEDScanCount]];break; //低位正常顯示 case2: if((LEDScanCount==2)||(LEDScanCount==3)) //判斷出中間位 P0=i|LEDDATA[LEDBuffer[LEDScanCount]];//使分鐘閃爍 else
P0=LEDDATA[LEDBuffer[LEDScanCount]];break; //其他位正常顯示 case3:if(LEDScanCount<=1) P0=i|LEDDATA[LEDBuffer[LEDScanCount]]; else
P0=LEDDATA[LEDBuffer[LEDScanCount]];break; case4:if(LEDScanCount>=4) P0=i|LEDDATA[LEDBuffer[LEDScanCount]]; else P0=LEDDATA[LEDBuffer[LEDScanCount]];break; case5:if((LEDScanCount==2)||(LEDScanCount==3)) P0=i|LEDDATA[LEDBuffer[LEDScanCount]]; else
P0=LEDDATA[LEDBuffer[LEDScanCount]];break;case6:if(LEDScanCount<=1) P0=i|LEDDATA[LEDBuffer[LEDScanCount]]; else P0=LEDDATA[LEDBuffer[LEDScanCount]];break; }LEDScanCount++; //掃描指針加計(jì)數(shù)if(LEDScanCount==6)LEDScanCount=0;//掃描完從頭開始;}/********************************************************/四、鍵盤掃描模塊 鍵盤的具體定義前面已經(jīng)給出,按照定義,可以規(guī)劃出該模塊的流程圖,如圖8.1.6所示。程序進(jìn)入此部分后循環(huán)對(duì)四個(gè)按鍵進(jìn)行檢測(cè),如果有任意鍵被按下就執(zhí)行該鍵的功能。圖8.1.6按鍵模塊程序流程 當(dāng)模式鍵被按下,在進(jìn)行去抖檢查后,模式標(biāo)志增加,即SETFlag++。由于調(diào)整時(shí)間和調(diào)整定時(shí)都有顯示位置的相似性,因此,從顯示暫存區(qū)LEDBuffer[]中取出當(dāng)前調(diào)整的數(shù)值較為方便。LEDBuffer中存儲(chǔ)的都是1位十進(jìn)制數(shù)據(jù),需要進(jìn)行合并,合并后進(jìn)行加減操作,在更改數(shù)據(jù)后需要及時(shí)的把數(shù)據(jù)寫回到對(duì)應(yīng)變量,再由載入程序把新數(shù)據(jù)裝載到暫存區(qū),這樣顯示的數(shù)據(jù)就是已經(jīng)更改過的新數(shù)據(jù)。在加減時(shí)需要考慮合適返回值的問題,如小時(shí)加到“23”后應(yīng)為“0”,減到“0”是應(yīng)為“23”這樣的問題。 鬧鈴鍵的功能相對(duì)比較獨(dú)立,鬧鈴響時(shí),按下此鍵更改鬧鈴標(biāo)志,從而停止鬧鈴。在正常顯示時(shí),按下鬧鈴鍵的功能是顯示所定的鬧鈴時(shí)間,此鍵不需要去抖功能。顯示鬧鈴的方式就是直接把所定的鬧鈴時(shí)間裝載到顯示暫存區(qū)里面。所定時(shí)間不包括“秒”,右邊第二位進(jìn)行滅燈處理,加載入0xFF。最右邊根據(jù)鬧鈴標(biāo)志裝載“F”或者“E”。此部分的參考程序如下:/**********************************************************************/voidDelay(unsignedintt) //延時(shí)子程序{while(t)t--;}voidkey() //鍵盤操作子程序{ unsignedchari; //緩沖數(shù)組位數(shù)標(biāo)志 charNum; //臨時(shí)數(shù)字,存儲(chǔ)數(shù)組合并值 if(SET_KEY==0) //判斷模式鍵是否按下 { Delay(500); //去按鍵抖動(dòng) if(SET_KEY==0) //再判斷是否真得按下了 { SETFlag++; //狀態(tài)改變 if(SETFlag==7)SETFlag=0;//返回正常模式 if(SETFlag==1)i=4; //調(diào)節(jié)讀取顯示數(shù)組的位數(shù)if(SETFlag==2)i=2; if(SETFlag==3)i=0; if(SETFlag==4)i=4; if(SETFlag==5)i=2; if(SETFlag==6)i=0; } while(SET_KEY==0); //等按鍵釋放 } if((UP_KEY==0)&&(SETFlag!=0))
//判斷加計(jì)數(shù)鍵是否按下 { Delay(5000); //去按鍵抖動(dòng)if(UP_KEY==0) //再判斷是否真得按下了 { Num=(LEDBuffer[i+1]*10+LEDBuffer[i]); Num++; //時(shí)單元的數(shù)值加1 if(Num==60)Num=0; //加到60歸0 if((Num==24)&&((SETFlag==1)||(SETFlag==4)))Num=0; //加到24歸0 switch(SETFlag) //把修改值寫回 { case0:;break; case1:Hour=Num;break; case2:Minute=Num;break; case3:Second=Num;break; case4:Hourrom=Num;break; case5:Minuterom=Num;break; case6:ALMFlag=!ALMFlag;break; } } }if((DOWN_KEY==0)&&(SETFlag!=0)) //判斷減計(jì)數(shù)鍵是否按下 { Delay(5000); //去按鍵抖動(dòng) if(DOWN_KEY==0) //再判斷是否真得按下了 { Num=(LEDBuffer[i+1]*10+LEDBuffer[i]); Num--; //時(shí)單元的數(shù)值減1 if((Num<0)&&((SETFlag==1)||(SETFlag==4)))Num=23;
//到24歸0 if((Num<0))Num=59; //到60歸0 switch(SETFlag) //把修改值寫回 { case0:;break; case1:Hour=Num;break; case2:Minute=Num;break; case3:Second=Num;break; case4:Hourrom=Num;break; case5:Minuterom=Num;break; case6:ALMFlag=!ALMFlag;break; } } }if(ALM_KEY==0) { SETFlag=0; //狀態(tài)返回 if(ALMFlag==0)LEDBuffer[0]=11;
//根據(jù)鬧鈴狀態(tài)顯示F或者E elseLEDBuffer[0]=12; //將時(shí),分,秒單元內(nèi)容送入暫存區(qū) LEDBuffer[1]=10; //關(guān)閉該數(shù)碼管顯示 LEDBuffer[2]=Minuterom%10; LEDBuffer[3]=Minuterom/10; LEDBuffer[4]=Hourrom%10; LEDBuffer[5]=Hourrom/10; if(ALMFlag==1) { Beep=1; Beepflag=0; } }} /**********************************************************************/五、自動(dòng)返回操作 自動(dòng)返回的作用是在調(diào)整過程中,如果10秒沒有任何鍵被按下,那么就返回到正常的顯示時(shí)間的狀態(tài)?;驹硎?,設(shè)置一個(gè)變量名為Time的計(jì)時(shí)變量,此變量專門用于該模塊。進(jìn)入該模塊后,首先檢查顯示模式,如果在非正常顯示模式即SETFlag不等于0,那么在10秒內(nèi)模式鍵、加鍵、減鍵中的任意被按下,計(jì)時(shí)變量Time清零,如果沒有被按下,當(dāng)計(jì)時(shí)變量到10時(shí),指定模式變回正常顯示狀態(tài),即SETFlag為0。該部分的源碼如下:/**********************************************************************/if(SETFlag!=0) //10秒不操作自動(dòng)返回 { if((SET_KEY==0)||(UP_KEY==0)||(DOWN_KEY==0))
Time=0; //任意鍵有操作放棄計(jì)時(shí) if(Time>=10){SETFlag=0;Time=0;} }/**********************************************************************/六、中斷模塊 中斷模塊的基本功能是要完成時(shí)間的計(jì)數(shù)。根據(jù)初始化的設(shè)定,每2ms進(jìn)入中斷一次,對(duì)進(jìn)入次數(shù)進(jìn)行計(jì)數(shù),500次就是1秒,當(dāng)然這種計(jì)數(shù)存在較大的誤差,需要進(jìn)行修正,使用專用的時(shí)鐘芯片進(jìn)行計(jì)時(shí)比較準(zhǔn)確。在這里主要是先練習(xí)時(shí)鐘程序的構(gòu)建方法,先不引入時(shí)鐘芯片。 由于中斷服務(wù)程序是間隔的執(zhí)行,因此把顯示程序放在中斷里面間隔執(zhí)行也是不錯(cuò)的解決方案。同時(shí),向顯示暫存區(qū)寫入數(shù)據(jù)部分也可以在這里。 進(jìn)入中斷服務(wù)函數(shù)以后,必須要做的一件事情就是裝載定時(shí)器的初值。既然進(jìn)入中斷,就表明計(jì)數(shù)器已經(jīng)溢出,需要重新裝載,此后可以開始放入自己構(gòu)思的程序。在本例中,放入了顯示模塊,自動(dòng)返回功能,裝載暫存區(qū)等部分,程序流程見圖8.1.7所示。圖8.1.7中斷服務(wù)程序流程/**********************************************************************/voidtimer0_isr(void)interrupt1{ unsignedintSecondCount;unsignedinttimercp; //秒計(jì)數(shù)器TH0=(65536-2000)/256; //TH0,TL0裝入定時(shí)2mS的初值TL0=(65536-2000)%256; display(); //調(diào)用顯示函數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3706-2024 石化行業(yè)用不銹鋼閥門鑄件
- T-ZJCX 0047-2024 浙江省法人數(shù)字證書應(yīng)用接口規(guī)范
- 二零二五年度宅基地占用權(quán)轉(zhuǎn)讓協(xié)議
- 獨(dú)立董事聘用合同(二零二五年度)-能源行業(yè)節(jié)能減排
- 2025年度門面買賣合同(含廣告位租賃)
- 二零二五年度音樂作品著作權(quán)許可與網(wǎng)絡(luò)播放協(xié)議
- 2025年度校外住宿生安全管理及意外傷害賠償協(xié)議
- 2025年度相鄰宅基地邊界爭(zhēng)議解決與宅基地置換協(xié)議
- 二零二五年度拆除工程合同糾紛解決機(jī)制合同
- 二零二五年度自然人個(gè)人醫(yī)療設(shè)備貸款合同生效與還款規(guī)定
- 天津2025年天津市機(jī)關(guān)后勤事務(wù)服務(wù)中心招聘6人筆試歷年參考題庫附帶答案詳解
- 2025年天津三源電力集團(tuán)限公司社會(huì)招聘33人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 西安2025年陜西西安音樂學(xué)院專任教師招聘20人筆試歷年參考題庫附帶答案詳解
- 國家安全與生態(tài)安全
- 2024-2025學(xué)年第二學(xué)期學(xué)校團(tuán)委工作計(jì)劃(附2月-6月安排表)
- 培養(yǎng)自律能力主題班會(huì)
- 中職高教版(2023)語文職業(yè)模塊-第一單元1.2寧夏閩寧鎮(zhèn):昔日干沙灘今日金沙灘【課件】
- 巴厘島旅游流程介紹
- 【物理】牛頓第一定律 2024-2025學(xué)年人教版物理八年級(jí)下冊(cè)
- 嬰幼兒電擊傷實(shí)踐操作張春芳講解
- 2025網(wǎng)格員考試題庫及參考答案
評(píng)論
0/150
提交評(píng)論