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

正文內(nèi)容

基于stc89c52單片機的智能紅外遙控系統(tǒng)畢業(yè)論-資料下載頁

2025-06-02 22:36本頁面
  

【正文】 個中斷之間時間值并保存,然后對相應脈沖的時間值與標準的脈沖時間進行比較,這樣得 出了是 0還是 1。由于中斷函數(shù)盡量要短,進行解碼的工作盡量不要在中斷函數(shù)中進行。下面是解碼函數(shù)和中斷函數(shù)。 /********************************************************** 解碼函數(shù),按照脈寬調(diào)制標準, , ,則程序中可以取 6為 0和 1的分界點 **********************************************************/ void decode() { uchar k,i,j,value。 k=1。 for(j=0。j4。j++) { for(i=0。i8。i++) 泰山學院本科畢業(yè)論文(設計) 28 { value= value1。 if(irdata[k]6) //大于 6的視為 1 {value=value|0x80。} k++。 } ircode[j]=value。 } } /********************************************************** 晶振 12M,一個機械周期為 12/12021000 為 1微秒,則每一次中斷 256*= **********************************************************/ void timer0() interrupt 1 { timer++。 } /********************************************************** startflag 初始值位 0,第一次進入中斷標記為 1,同時時間清零 ,如果 經(jīng)判斷有引導碼出現(xiàn),就開始記錄了。 **********************************************************/ void int0() interrupt 0 { if(startflag) { if( timer45) //9+ 的引導碼 { ir_num=0。} ir_time_data[ir_num]=timer。 timer=0。 irnum++。 if(ir_num==33) { Ir_num=0。 Ir_end=1。 //一組接收完成 } } else { startflag=1。 //第一次進來時被標記為 1, timer 清 0 timer=0。 } 泰山學院本科畢業(yè)論文(設計) 29 } 另外,根據(jù)通過實際應用發(fā)現(xiàn),外部光源特別是太陽光對紅外通信干擾較大,為了避免光源干擾可能帶來的麻煩,這里采用了軟件解決的方式。按鍵按下后把得到的數(shù)據(jù)分別與操作碼和操作反碼比較,每次比較通過后要立即清零。下面是一段示例代碼: if(ircode[2]==0x09) { ircode[2]=0x00。 if (ircode[3]==0xf6) ircode[3]=0x00。 具體功能代碼 } } 這樣就保證了即使干擾數(shù)據(jù)能進入第一層,但進不了第二層,由于進入第一層后數(shù)據(jù)被清除,下一次連第一層也進不去了,從而避免了由于干擾出現(xiàn)隨機數(shù)對系統(tǒng)功能的影響。 定時定溫功能的程序?qū)崿F(xiàn) 本系統(tǒng)具有隨時設定時間值和溫度值的功能,要達到這樣的目的需要滿足這樣幾個條件,第一、能進入設置模式,第二、能通過按鍵選擇要修改的項并 能對其數(shù)值增大和減小,第三、能順利返回。該流程可以通過圖 26表示。 返回 修改項切換 增減修改 設置模式 泰山學院本科畢業(yè)論文(設計) 30 圖 26 時間溫度設置流程 下面是對各項功能的代碼分析。 /********************************************************** 進入設置模式即需要顯示第二屏數(shù)據(jù),顯示完第二屏數(shù)據(jù)框架之后便進入一個while(1){}的死循環(huán),在循環(huán)中完成修改項的選擇,數(shù)值的修改,最后清除當前屏幕數(shù)據(jù)并用 break 退出死循環(huán) **********************************************************/ void Second_screen() //刷新顯示第二屏數(shù)據(jù) { if(ircode[2]==0x44) { ircode[2]=0x00。 if (ircode[3]==0xbb) { Write12864_Cmd_Dat(0x01,0)。 //清除第一屏數(shù)據(jù) delay(10)。 writestring(0x80,Temp_min)。 //顯示第二屏數(shù)據(jù)框架 writestring(0x90,Temp_max)。 writestring(0x88,Set_time)。 ircode[3]=0x00。 while(1) //進入大循環(huán),實現(xiàn)各項修改功能 { if(Ir_end) { //需要按鍵實時操作,所以應把解碼函數(shù)引入 decode()。 Ir_end=0。 } if(ircode[2]==0x46) //選項切換 { ircode[2]=0x00。 if(ircode[3]==0xb9) {count1=count1+1。 if(count15) count1=1。 ircode[3]=0x00。 } } 泰山學院本科畢業(yè)論文(設計) 31 switch(count1) //選項切換時,相應位反白顯示,便于觀察 { case 1: Write2864_Cmd_Dat(0x84,0)。 Write2864_Cmd_Dat(0x0f,0)。 delay(50)。 break。 case 2: Write2864_Cmd_Dat(0x94,0)。 Write2864_Cmd_Dat(0x0f,0)。 delay(50)。 break。 case 3: Write2864_Cmd_Dat(0x8b,0)。 Write2864_Cmd_Dat(0x0f,0)。 delay(50)。 break。 case 4: Write2864_Cmd_Dat(0x8d,0)。 Write2864_Cmd_Dat(0x0f,0)。 delay(50)。 break。 default:break。 } Set_up_down()。 //通過按鍵增大減小數(shù)值的函數(shù) num_to_string(); //為了把修改值顯示在液晶上需進行字符轉(zhuǎn)換 writestring(0x84 ,Temp_min_string)。 //顯示修改后的值 writestring(0x94 ,Temp_max_string)。 writestring(0x8b ,Set_shi_string)。 writedat(0x8c,39。:39。)。 writestring(0x8d ,Set_fen_string) if(ircode[2]==0x45) //清除當前屏幕并退出 { ircode[2]=0x00。 if (ircode[3]==0xba) {Write2864_Cmd_Dat(0x0c,0)。 Write2864_Cmd_Dat(0x01,0)。 delay(4)。 break。 ircode[3]=0x00。 } 泰山學院本科畢業(yè)論文(設計) 32 } } } } } 以上工作完成后,設置功能已經(jīng)能夠?qū)崿F(xiàn),只需要在主函數(shù)中調(diào)用Compare_temp_time()函數(shù)就可以通過比較設定值與實際值,來決定繼電器開關燈和開關空調(diào)動作了。應用代碼如下。 void Compare_temp_time() { int a=temp_data%100。 /****************** 退出時再次寫照明燈 的狀態(tài) 開 ?關 ***********************/ if(flag1==1) writestring(0x9a,Close)。 else writestring(0x9a,Open)。 if(aTemp_max_num||aTemp_min_num) //比較溫度值的范圍,決定繼電器開//關 { writestring(0x9e,Open)。 //液晶顯示開?關 LED_wendu=1。 //實際控制繼電器開?關 } Else{ writestring(0x9e,Close)。 LED_wendu=0。 } if(Set_shi_num==Hour_outamp。amp。Set_fen_num==Minute_out) { //比較時間值,決定繼電器開關 if(flag1==0){ writestring(0x9a,Close)。 P1=P1|0xff。 } Else{ writestring(0x9a,Open)。 P1=P1|0xfd。 } 泰山學院本科畢業(yè)論文(設計) 33 } } 第 5章 系統(tǒng)調(diào)試及項目總結(jié) 系統(tǒng)調(diào)試 最小系統(tǒng)調(diào)試 本項目的電路圖由 Protel99SE 繪制,各功能模塊的實際電路由萬用板人工焊接。最小系統(tǒng)的正常運行是整個系統(tǒng)得以正常運行的前提。焊接完成最小系統(tǒng)后,首先用軟件平臺編寫一個能使 口一秒間隔高低電平變化的 C 程序,然后把編譯生成的二進制文件通過串口下載到單片機。這時再在 ,上電復位后,發(fā)現(xiàn)二級 管能夠一秒間隔出現(xiàn)亮滅循環(huán)。 通過以上實驗能夠證明單片機最小系統(tǒng)已經(jīng)正常運行,下面就可以焊接其他功能模塊了。 其他各模塊調(diào)試過程 由于本項目的所有數(shù)據(jù)都以可見方式顯示在液晶上,所以在焊接其他模塊前需要使液晶屏能夠正常顯示。焊接好液晶模塊后,通過上面的方式下載程序使液晶顯示出幾個漢字和字符,液晶調(diào)試通過。接著焊接溫度傳感器和時鐘芯片,并通過各自的程序在液晶上顯示出數(shù)據(jù)。紅外模塊的調(diào)試是通過遙控繼電器開關來完成的,焊接好紅外和繼電器模塊后,通過編程使遙控器某按鍵每次鍵按下時 電平高低翻轉(zhuǎn),把繼電器連接在 引腳,上電復位后按下遙控器,繼電器發(fā)出啪啪的響聲,調(diào)試通過。 在實際調(diào)試時鐘模塊時,時間數(shù)據(jù)經(jīng)常發(fā)生抖動和隨機跳變,但在下一次刷新時又變正常,這說明時鐘芯片與單片機的通信是正常的。經(jīng)過多次對電路的檢泰山學院本科畢業(yè)論文(設計) 34 查懷疑是由于 DS1302 的 I/O 口驅(qū)動能力不足造成的,而且在焊接的電路中從DS1302 到單片機之間的連線又很長,于是在 DS1302 的 I/O 口和 VCC 之間加了一個10K的上拉電阻,問題得到圓滿解決。 由此得出了一個結(jié)論 DS1302 的驅(qū)動能力很是有限的在和單片機的通信中,要考慮到加上拉電阻的可能。 各個模塊調(diào) 試通過后就可以把各模塊程序加以組合,實現(xiàn)整體功能了,由于采用了多文件編程要注意聲明全局變量。圖 27 即為調(diào)試用電路實物及顯示效果,各項功能均已正常。 圖 27 實物電路及顯示效果 總結(jié) 綜合上面的介紹,本項目的硬件共有,電源模塊,最小系統(tǒng),紅外模塊,溫度模塊,時鐘模塊,液晶模塊和繼電器模塊組成。
點擊復制文檔內(nèi)容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1