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

正文內(nèi)容

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

2025-06-02 22:36本頁面
  

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