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

正文內(nèi)容

畢業(yè)論文基于stc89c52單片機(jī)的家用紅外遙控系統(tǒng)(編輯修改稿)

2024-07-25 10:12 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 語(yǔ)言及其混合編程,能夠兼容絕大多數(shù) 51 系列單片機(jī)的程序設(shè)計(jì)和仿真。在本設(shè)計(jì)中,所有的程序采用 C 語(yǔ)言編寫,最后把調(diào)試通過(guò)的程序編譯成二進(jìn)制文件并通過(guò)串口下載到目標(biāo)板。 程序總體結(jié)構(gòu)由于整個(gè)系統(tǒng)涉及到的外設(shè)模塊較多,故采用了多文件模塊化編程,這樣大大提高了程序的可讀性,也為以后可能遇到的程序移植和升級(jí)提供了方便。整個(gè)設(shè)計(jì)的程序結(jié)構(gòu)如圖 31 所示。圖 31 程序結(jié)構(gòu)圖其中, 是設(shè)計(jì)主函數(shù)包含了各種外設(shè)的初始化及其功能函數(shù)的調(diào)用,、 、 分別為溫度傳感器、紅外接收器、時(shí)鐘芯片和液晶的驅(qū)動(dòng)程序, 是用來(lái)定時(shí)、定溫的功能模塊。 DS18B20 溫度程序模塊 DS18B20 操作流程使用 DS18B20 時(shí)首先應(yīng)遵循圖 28 所示的時(shí)序圖,然后按照流程進(jìn)行具體操作。DS18B20 操作流程如圖 32 所示。泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))16初始化復(fù)位、發(fā)跳過(guò) ROM 命令發(fā)溫度轉(zhuǎn)換命令、等待發(fā)讀取溫度命令復(fù)位、發(fā)跳過(guò) ROM 命令調(diào)用顯示函數(shù)存儲(chǔ)并轉(zhuǎn)化數(shù)據(jù)圖 32 DS18B20 操作流程 DS18B20 重點(diǎn)代碼 及其分析DS18B20 程序的核心部分是利用單片機(jī)讀取芯片內(nèi)部的溫度值,其讀函數(shù)如下,/***********************************************************從 DS1820 中讀出數(shù)據(jù)**********************************************************/uchar DS1820_RData(){uchar i,j,Tmep。for(i=8。i0。i){Tmep=1。泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))17DS1820_bit=0。 //低電平,產(chǎn)生讀信號(hào)for(j=2。j0。j)。 //延時(shí) 4usDS1820_bit=1。 //釋放總線,準(zhǔn)備讀數(shù)據(jù)for(j=4。j0。j)。 //延時(shí)if(DS1820_bit==1){Tmep|=0x80。}for(j=30。j0。j)。 //延時(shí)DS1820_bit=1。 //拉高數(shù)據(jù)線,準(zhǔn)備讀下一位}return(Tmep)。 //返回?cái)?shù)據(jù)}通過(guò)上面的讀函數(shù),溫度值被保存到 Tmep 變量?jī)?nèi),接下來(lái)便可以按照一定的規(guī)則對(duì) Tmep 的值進(jìn)行轉(zhuǎn)化,最后顯示在液晶屏上。另外,應(yīng)當(dāng)注意在每次獲取溫度值時(shí)都要對(duì) DS18B20 進(jìn)行復(fù)位操作。 DS1302 時(shí)間程序模塊 DS1302 總體操作及基本讀寫功能函數(shù)本設(shè)計(jì)中 DS1302 操作主要包括讀取內(nèi)部時(shí)間值和修改時(shí)間值兩部分,DS1302 模塊總體操作如圖 33 所示。 圖 33 DS1302 操作總流程泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))18DS1302 讀寫操作流程如圖 34 所示。開(kāi)始結(jié)束設(shè)置 CE 為高上升沿,按位傳輸?shù)刂纷x取或?qū)懭胂鄳?yīng)地址的數(shù)據(jù)設(shè) 置 C E 為 低圖 34 DS1302 讀寫操作流程在對(duì) DS1302 操作時(shí),只要調(diào)用 Write1302_Cmd_Dat(),和 Read1302()就可以實(shí)現(xiàn)其與單片機(jī)之間的數(shù)據(jù)交流。下面是讀寫函數(shù)的實(shí)現(xiàn)。/**********************************************************/向 DS1302 寫地址和數(shù)據(jù), Addr 地址,Dat 數(shù)據(jù)**********************************************************/void Write1302_Cmd_Dat(unsigned char Addr, unsigned char Dat){ DS1302_RST = 0。DS1302_CLK = 0。DS1302_RST = 1。DS1302_WriteByte(Addr)。 // 地址,命令 DS1302_WriteByte(Dat)。 // 寫 1Byte 數(shù)據(jù)DS1302_CLK = 1。DS1302_RST = 0。} /**********************************************************/讀取 DS1302 某地址的數(shù)據(jù) ,**********************************************************/ uchar Read1302(unsigned char Addr){ uchar Dat。泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))19DS1302_RST = 0。DS1302_CLK = 0。DS1302_RST = 1。DS1302_WriteByte(Addr|0x01)。 // 以寫數(shù)據(jù)時(shí)的地址為參考,讀時(shí)應(yīng)加 1Dat = DS1302_ReadByte()。 // 讀取數(shù)據(jù)到變量 DatDS1302_CLK = 1。DS1302_RST = 0。return(Dat)。} 讀取時(shí)間數(shù)據(jù)并轉(zhuǎn)化成字符串由于時(shí)間數(shù)據(jù)包含年、月、日、時(shí)、分、秒、周,為了方便可以定義一個(gè)時(shí)間類型結(jié)構(gòu)體,把轉(zhuǎn)換前后的數(shù)據(jù)都作為這個(gè)結(jié)構(gòu)體的成員。typedef struct { unsigned char Week。unsigned char Second。unsigned char Hour。unsigned char Minute。unsigned char Hour。unsigned char Month。unsigned char Day。unsigned char Year。unsigned char Str_Time[9]。unsigned char Str_Year[5]。unsigned char Str_Month[3]。unsigned char Str_Day[3]。}struct_TIM。然后,通過(guò) Read1302()函數(shù)讀取各個(gè)地址處的時(shí)間數(shù)據(jù)分別保存于Second、Minute 等變量中并轉(zhuǎn)換成十進(jìn)制,如讀取并轉(zhuǎn)換秒值可以用以下兩個(gè)語(yǔ)句:temp = Read1302(0x80)。//低四位是秒的個(gè)位,高三位是秒的十位(原來(lái)是BCD 碼)TimeSecond = ((temp amp。0x70)4)*10 + (temp amp。0x0F)。接著就可以把數(shù)值轉(zhuǎn)換成字符串了,仍以秒值為例轉(zhuǎn)換語(yǔ)句如下:TimeStr_Time[0] = TimeSecond/10 + 39。039。//十位TimeStr_Time[1] = TimeSecond%10 + 39。039。//個(gè)位至此,所得數(shù)據(jù)便可以方便的顯示在液晶屏上了。泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))20 LCD12864 液晶驅(qū)動(dòng)程序 LCD12864 初始化LCD12864 初始化流程如圖 35 所示。圖 35 12864 液晶初始化LCD12864 液晶屏使用前先要進(jìn)行初始化,已設(shè)定不同的功能和模式,本設(shè)計(jì)中液晶初始化為基本指令集,開(kāi)顯示關(guān)閉游標(biāo),光標(biāo)從左向右加 1 移動(dòng),初始化通過(guò) Init_12864()函數(shù)完成。 寫數(shù)據(jù)到 LCD12864 功能函數(shù)LCD12864 的功能函數(shù)主要是顯示從其他模塊采集到的并轉(zhuǎn)化后的數(shù)據(jù),這里主要提供了兩種顯示函數(shù),writestring()和 writedat()兩個(gè)函數(shù),writestring() 用來(lái)顯示從一個(gè)地址開(kāi)始的字符串,writedat() 函數(shù)用來(lái)在某個(gè)地址顯示一個(gè)字符。下面是相應(yīng)的實(shí)現(xiàn)代碼。泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))21//從地址 addr_12864 開(kāi)始,寫字符串到 LCD void writestring(uchar addr_12864 ,uchar * str){uchar i = 0。Write12864_Cmd_Dat(addr_12864,0)。while(str[i] != 39。\039。){Write12864_Cmd_Dat(str[i++],1)。 }}//在地址 addr,寫一個(gè)字符到 LCDvoid writedat(uchar addr ,uchar dat){Write12864_Cmd_Dat(addr,0)。Write12864_Cmd_Dat(dat,1)。} HS0038 紅外解碼程序模塊 紅外遙控器編碼介紹在進(jìn)行紅外解碼之前首先要對(duì)本設(shè)計(jì)采用的紅外遙控器編碼方式進(jìn)行簡(jiǎn)要介紹。遙控器發(fā)送一組完整數(shù)據(jù)(如圖 36 所示) ,首先是 9ms 高電平和 低電平組成的前導(dǎo)碼,緊接著是 8 位地址碼及其反碼,最后便是 8 位操作碼及其反碼。具體的編碼方式為脈寬調(diào)制的串行碼,用 的高電平和 的低電平表示二進(jìn)制 0,以 的高電平和 的低電平表示二進(jìn)制 1,編碼形式如圖 37 所示。 圖 36 遙控器發(fā)送一組完整數(shù)據(jù)泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))22圖 37 遙控器編碼的 0 和 1 紅外解碼程序流程及重要代碼分析本設(shè)計(jì)中紅外遙控器作為控制單片機(jī)運(yùn)行的按鍵,為了更好的實(shí)現(xiàn)按鍵功能紅外接收端接在了單片機(jī)的外部中斷 0 引腳,另外遙控器編碼采用脈寬調(diào)制方式,為了更精確的記錄脈寬時(shí)間需要啟用定時(shí)器功能,所以程序開(kāi)始要進(jìn)行中斷和定時(shí)器的初始化。為了保證精度,定時(shí)器初始化為工作方式 2 即 8 位自動(dòng)重裝模式。中斷觸發(fā)方式采用下降沿觸發(fā),中斷程序只需要記錄兩個(gè)中斷之間時(shí)間值并保存,然后對(duì)相應(yīng)脈沖的時(shí)間值與標(biāo)準(zhǔn)的脈沖時(shí)間進(jìn)行比較,這樣得出了是 0 還是 1。由于中斷函數(shù)盡量要短,進(jìn)行解碼的工作盡量不要在中斷函數(shù)中進(jìn)行。下面是中斷函數(shù)。/**********************************************************晶振 12M,一個(gè)機(jī)械周期為 12/12022000 為 1 微秒,則每一次中斷256*=**********************************************************/void timer0() interrupt 1{ timer++。 }/**********************************************************startflag 初始值位 0,第一次進(jìn)入中斷標(biāo)記為 1,同時(shí)時(shí)間清零,如果經(jīng)判斷有引導(dǎo)碼出現(xiàn),就開(kāi)始記錄了。**********************************************************/void int0() interrupt 0{if(startflag){if( timer45) //9+ 的引導(dǎo)碼 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))23可{ 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)來(lái)時(shí)被標(biāo)記為 1,timer 清 0timer=0。}}另外,根據(jù)通過(guò)實(shí)際應(yīng)用發(fā)現(xiàn),外部光源特別是太陽(yáng)光對(duì)紅外通信干擾較大,為了避免光源干擾可能帶來(lái)的麻煩,這里采用了軟件解決的方式。按鍵按下后把得到的數(shù)據(jù)分別與操作碼和操作反碼比較,每次比較通過(guò)后要立即清零。下面是一段示例代碼: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ù)對(duì)系統(tǒng)功能的影響。 定時(shí)定溫功能的程序?qū)崿F(xiàn)本系統(tǒng)具有隨時(shí)設(shè)定時(shí)間值和溫度值的功能,要達(dá)到這樣的目的需要滿足這樣幾個(gè)條件,第一、能進(jìn)入設(shè)置模式,第二、能通過(guò)按鍵選擇要修改的項(xiàng)并能對(duì)其數(shù)值增大和減小,第三、能順利返回。該流程可以通過(guò)圖 38 表示。泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì))24返回修改項(xiàng)切換增減修改設(shè)置模式圖 38 時(shí)間溫度設(shè)置流程以上工作完成后,設(shè)置功能已經(jīng)能夠?qū)崿F(xiàn),只需要在主函數(shù)中調(diào)用Compare_temp_time()函數(shù)就可以通過(guò)比較設(shè)定值與實(shí)際值,來(lái)執(zhí)行繼電器開(kāi)關(guān)燈和開(kāi)關(guān)空調(diào)動(dòng)作了。4 系統(tǒng)調(diào)試及設(shè)計(jì)總結(jié) 系統(tǒng)調(diào)試 最小系統(tǒng)調(diào)試本設(shè)計(jì)的電路圖由 Protel99SE 繪制,各功能模塊的實(shí)際電路由萬(wàn)用板人工焊接。最小系統(tǒng)的正常運(yùn)行是整個(gè)系統(tǒng)得以正常運(yùn)行的前提。焊接完成最小系統(tǒng)后,首先用軟件平臺(tái)編寫一個(gè)能使 口一秒間隔高低電平變化的 C 程序,然后把編譯生成的二進(jìn)制文件通過(guò)串口下載到單片機(jī)。這時(shí)再在 引腳連接發(fā)光二極管,上電復(fù)位后,發(fā)現(xiàn)二級(jí)管能夠一秒間隔出現(xiàn)亮滅循環(huán)。通過(guò)以上實(shí)驗(yàn)?zāi)軌蜃C明單片機(jī)最小系統(tǒng)已經(jīng)正常運(yùn)行,下面就可以焊接其他功能模塊了。 其他各模塊調(diào)試過(guò)程由于本設(shè)計(jì)的所有數(shù)據(jù)都以可見(jiàn)方式顯示在液晶上,所以在焊接其他模塊前需要使液晶屏能夠正常顯示。焊接好液晶模塊后,通過(guò)上面的方式下載程序使液晶顯示出幾個(gè)漢字和字符,液晶調(diào)試通過(guò)。接著焊接溫度傳感器和時(shí)鐘芯片,并通過(guò)各自的程序在液晶上顯示出數(shù)
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1