freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于spce061a的智能密碼鎖系統的軟件設計(編輯修改稿)

2024-07-24 19:00 本頁面
 

【文章內容簡介】 Reti。L_FIQ_TimerA: //FIQ_TimerA中斷服務程序 [P_INT_clear]=R1。 Call _BSR_FIQ_Routine //語音識別中斷服務 Call F_FIQ_Service_SACM_S480。 //語音播放中斷服務 Pop R1,R5 from [sp]。 Reti。L_FIQ_TimerB: //FIQ_TimerB中斷服務程序 [P_INT_clear]=R1。 Pop R1,R5 from [sp]。 Reti。 傳感器信號檢測模塊本系統利用熱釋人體紅外傳感器,將其檢測到人進入的信號通過一系列轉換后送入單片機的IOB2口。通過對單片機IOB2口的檢測可以得到一組高低電平。程序中規(guī)定當IOB2口為低電平“0”時,表明有人進入該房間;若檢測到的信號為“1”時,表明無人進入。單片機可以通過IOB2口的相應變化而做出不同的響應。所需單片機資源:IOB2流程圖如下:程序:……void zd_int0() interrupt 2{unsigned char h。f=0。for(h=0。h10。h++) //檢查傳感器送入信號(IOB2狀態(tài))10次,共1S{delay(100)。if([P_IOB_DATA]==0) f++}}……程序說明:當檢測到送入IOB2口的信號為“0”時,此時檢測IOB2口信號10次后,調用延時10S的程序來等待用戶復位,當用戶沒有復位時程序開始轉向報警部分執(zhí)行,即開始模擬摘機。若單片機復位,程序則從開始處執(zhí)行,然后重新檢測傳感器電路送入的信號來判斷是否要報警。傳感器檢測到信號開 始信號處理送入IOB2判斷IOB2口信號是否為“0”?后續(xù)處理YN結 束           圖10 傳感器檢測流程圖 電話信號檢測模塊電話信號檢測模塊是通過對電話線上的信號進行檢測,確定在進行報警的時候能否占用電話線的資源。電話檢測模塊主要為鈴流信號檢測。通過檢測電話線上的鈴流信號可以知道此時電話是否可以撥通[13]。鈴流簡單的說,就是電話機在鈴響的時候電話線上的電流。鈴流檢測電路的作用就是檢測電話線上的鈴流信號,以便為單片機提供電話鈴響的次數。檢測電路將檢測到的信號送入單片機的IOB3口。IOB3口是SPCE061A單片機的定時計數器TA的輸入口,通過TA計數器的計數來判斷電話機響鈴的次數,通過對單片機中斷的設置進而判斷電話是否接通。程序流程圖如下:開 始呼叫電話脈沖次數是否響應中斷?檢測信號送入IOB3鈴流電路信號檢測電話接通發(fā)送語音TA清0NY結 束 圖11 電話信號檢測模塊程序流程圖CPU占用資源:定時計數器TA;IOB3口……unsigned char ta_flag=0。 // 定時計數器TA/*計數器TA初始化*/void init_timer(){TMOD=0X50 //TA工作于模式1,16位計數TH0=(655361000)%256 //計數1000個脈沖初值 TL0=(655361000)%256IE=0X92 //開中斷}/*1000個脈沖計數中斷服務子函數*/void js0() interrupt 1{n++。TH0=(655361000)%256 //計數1000個脈沖初值 TL0=(655361000)%256}程序說明:給定時計數器一初值,鈴流檢測電路送入單片機IOB3口的信號為一組高低電平組成的周期性脈沖信號。TA對送入的信號進行計數,若計數溢出,說明電話沒有撥通,程序響應TA的中斷,程序轉向模擬掛機,同時重新向TA賦初值。單片機延時1S后重新摘機、發(fā)送撥碼信號、鈴流檢測,直到撥通電話。若在撥電話過程中有外部電話打入,則可通過程序中的摘機與掛機電路讓打入的電話關斷。 模擬摘掛機模塊本系統中對外部電話的呼叫可以分為以下幾步:CPU模擬摘機、發(fā)送電話號碼呼叫、接通電話、CPU模擬掛機等幾步。系統中的模擬摘掛機電路其實是一個電子開關。用以保護本系統所使用的電話機不被本系統所獨占[11]。該模塊的程序流程圖如下:本模塊占用系統資源:IOB8口……Void MNZGJ(){R1=0100H[P_IOB_DIR]=R1[P_IOB_ATTRIB]=R1sbit kz=[P_IOB_DATA]。[P_IOB_DATA]==1。call L_delay。[P_IOB_DATA]==0。call L_delay。[P_IOB_DATA]==1。call L_delay。voit bh。 //轉向DTMF編碼發(fā)送處執(zhí)行}前 期 處 理開 始模擬摘機撥 號 判斷是否接通 電話?后續(xù)處理YN結 束模擬掛機延 時…… 圖12模擬摘掛機程序流程圖CPU首先執(zhí)行模擬摘機程序后才能執(zhí)行發(fā)送DTMF編碼進行撥號,如果電話沒有接通,CPU執(zhí)行掛機程序,掛斷電話后延遲一段時間重新摘機、撥號,直至接通,進行下一步處理。 DTMF編碼發(fā)送模塊本系統采用HT9200A編碼芯片。CPU發(fā)出控制指令到HT9200A,HT9200A初始化后開始執(zhí)行編碼發(fā)送程序。其中DTMF信號輸出端低五位發(fā)送的程序與所撥電話的號碼值有以下關系[16]:表2 DTMF編碼與號碼值對應關系撥 號D4D3D2D1D0100001200010300011400100500101600110700111801000901001001010*0101101100A01101B01110C01111D00000OFF11111DTMF在串行發(fā)送數據時低位在前,振蕩建立時間為10MS,CLK最大為500K,在設計時一般取為100K。占用單片機資源:IOBIOBIOB3程序如下:……include include R1=0100H //HT9200選中芯片[P_IOB_DIR]=R1[P_IOB_ATTRIB]=R1sbit HT9200_DATA=[P_IOB_DATA]。 //輸入數據R1=0002H[P_IOB_DIR]=R1[P_IOB_ATTRIB]=R1sbit HT9200_CLK=[P_IOB_DATA]define delay_5us() _nop_()。_nop_() //延時程序void delayMs(unsigned char sed)/*延時1毫秒*/{ unsigned int i。while(sed){ for(i=i0。i)。 }}void sendHt9200Bit(unsigned char dtmfData) /*發(fā)送一位DTMF號碼*/{ unsigned char N=5。 HT9200_CE=0。 //選中HT9200 delayMs(10)。 //延時10ms,以使其起振 while(N) { if(dtmfDataamp。0x01) { HT9200_DATA=1。 } else { HT9200_DATA=0。 } delay_5us()。 //延時5μS HT9200_CLK=0。 //輸出鎖存 delay_5us()。 //延時5μS HT9200_CLK=1。 //時鐘上升沿 dtmfData1。 //數據右移一位 } delayMs(60)。 //延時60ms,發(fā)送DTMF HT9200_CE=1。 //禁止HT9200 }void sendDTMF(unsigned char *s,l) /*發(fā)送一串DTMF號碼,定義指針變量S*/{ while(l) { sendHt9200Bit(*s)。 //轉向發(fā)送一位處執(zhí)行 delayMs(50)。 //延時50msDTMF間隔 s++。 //S+1 }}void main(void){ unsigned char data haoma[]={8,7,6,5,4,3,2,1}。 sendDTMF(haoma,8)。 while(1)。 //循環(huán)}……程序說明:選中HT9200A芯片后對其進行相應的初始化,在程序中設定發(fā)送的電話號碼長度為N,在每發(fā)送一位號碼之后要執(zhí)行N1程序,看其結果是否為0,直至N=0時表明電話號碼已經發(fā)送完畢,系統完成撥號呼叫程序。開始初始化
點擊復制文檔內容
教學教案相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1