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

正文內(nèi)容

基于單片機(jī)的智能遙控器畢業(yè)設(shè)計(jì)-資料下載頁(yè)

2025-06-19 12:56本頁(yè)面
  

【正文】 計(jì),因?yàn)橹恍柙?6進(jìn)制的第二位依次加1就可以完成存儲(chǔ)空間的分配,而16進(jìn)制的第一位和按鍵編碼是一致的。當(dāng)然取完地址后就取代碼就根據(jù)第二為的地址+第一位的按鍵編碼即可。例如:用yongkong2,按鍵編碼是11,那么按鍵取碼地址就是0x10+0x11。針對(duì)以上幾條,要寫(xiě)存儲(chǔ)器的讀取和存儲(chǔ)功能。主要有以下兩步:第一步:從當(dāng)前地址存儲(chǔ)和讀取數(shù)據(jù),以寫(xiě)入程序?yàn)槔?,讀程序大同小異,且比較簡(jiǎn)單,關(guān)鍵程序如下所示:bit WriteCurrent(unsigned char y){ unsigned char i。 bit ack_bit。 //儲(chǔ)存應(yīng)答位 for(i = 0。 i 8。 i++)// 循環(huán)移入8個(gè)位 { if((yi)amp。0x80) SDA=1。 else SDA=0。//通過(guò)按位“與”運(yùn)算將最高位數(shù)據(jù)送到S,因?yàn)閭魉蜁r(shí) 高位在前,低位在后 _nop_()。SCL = 1。 //在SCL的上升沿將數(shù)據(jù)寫(xiě)入AT24C02 _nop_()。 _nop_()。_nop_()。_nop_()。_nop_()。SCL = 0。//將SCL重新置為低電平,以在SCL線形成傳送數(shù)據(jù)所需的8?jìng)€(gè)脈沖 }_nop_()。 _nop_()。SDA = 1。 // 發(fā)送設(shè)備(主機(jī))應(yīng)在時(shí)鐘脈沖的高電平期間(SCL=1)釋放SDA線, (以讓SDA線轉(zhuǎn)由接收設(shè)備(AT24Cxx)控制) _nop_()。 _nop_()。_nop_()。_nop_()。_nop_()。_nop_()。 SCL = 1。//根據(jù)上述規(guī)定,SCL應(yīng)為高電平(確定數(shù)據(jù)) _nop_()。 _nop_()。 _nop_()。 _nop_()。 ack_bit = SDA。 //接受設(shè)備(AT24Cxx)向SDA送低電平,表示已經(jīng)接收到一個(gè)字節(jié)(若送高電平,表示沒(méi)有接收到,傳送異常) SCL = 0。//SCL為低電平時(shí),SDA允許以后的數(shù)據(jù)傳遞 return ack_bit。// 返回AT24C02應(yīng)答位}第二步:由于有了從當(dāng)前地址存儲(chǔ)和讀取函數(shù),那么從指定地址讀取和存儲(chǔ)函數(shù)就會(huì)變得相當(dāng)簡(jiǎn)單,就是先寫(xiě)入地址,然后調(diào)用從當(dāng)前地址存儲(chǔ)和讀取函數(shù)即可。以存儲(chǔ)為例,具體程序設(shè)計(jì)如下:// 在指定地址addr處寫(xiě)入數(shù)據(jù)start()。 //開(kāi)始數(shù)據(jù)傳遞WriteCurrent(OP_WRITE)。//選擇要操作的AT24Cxx芯片,并對(duì)其寫(xiě)入數(shù)據(jù)。WriteCurrent(add)。//寫(xiě)入指定地址WriteCurrent(dat)。 //向當(dāng)前地址(上面指定的地址)寫(xiě)入數(shù)據(jù)stop()。 //停止數(shù)據(jù)傳遞delay_ms(10)。 //1個(gè)字節(jié)的寫(xiě)入周期為1ms, 最好延時(shí)1ms以上當(dāng)然還有按頁(yè)寫(xiě),按頁(yè)讀,但是本設(shè)計(jì)僅僅只需上面這些功能就可以完成任務(wù),所以就不在設(shè)計(jì)頁(yè)寫(xiě),頁(yè)讀。 GSM軟件設(shè)計(jì) AT指令簡(jiǎn)介AT指令集是從終端設(shè)備(Terminal Equipment,TE)或數(shù)據(jù)終端設(shè)備(Data Terminal Equipment,DTE)向終端適配器(Terminal Adapter,TA)或數(shù)據(jù)電路終端設(shè)備(Data Circuit Terminal Equipment,DCE)發(fā)送的。 其對(duì)所傳輸?shù)臄?shù)據(jù)包大小有定義:即對(duì)于AT指令的發(fā)送,除AT兩個(gè)字符外,最多可以接收1056個(gè)字符的長(zhǎng)度(包括最后的空字符)。 每個(gè)AT命令行中只能包含一條AT指令;對(duì)于由終端設(shè)備主動(dòng)向PC端報(bào)告的URC指示或者response響應(yīng),也要求一行最多有一個(gè),不允許上報(bào)的一行中有多條指示或者響應(yīng)。AT指令以回車(chē)作為結(jié)尾,響應(yīng)或上報(bào)以回車(chē)換行為結(jié)尾。MCS51單片機(jī)具有一個(gè)全雙工的串行通信接口,能同時(shí)進(jìn)行發(fā)送和接收。它可以作為UART(通用異步接收和發(fā)送器)使用,也可以作為同步的移位寄存器使用。SBUF是可以直接尋址的專(zhuān)用寄存器。物理上,它對(duì)應(yīng)著兩個(gè)寄存器,即一個(gè)發(fā)送寄存器一個(gè)接收寄存器,CPU寫(xiě)SBUF就是修改發(fā)送寄存器;讀SBUF就是讀接收寄存器。接收器是雙緩沖的,以避免在接收下一幀數(shù)據(jù)之前,CPU未能及時(shí)的響應(yīng)接收器的中斷,沒(méi)有把上一幀的數(shù)據(jù)讀走而產(chǎn)生兩幀數(shù)據(jù)重疊的問(wèn)題。對(duì)于發(fā)送器,為了保持最大的傳輸速率,一般不需要雙緩沖,因?yàn)榘l(fā)送時(shí)CPU是主動(dòng)的,不會(huì)產(chǎn)生重疊問(wèn)題。在設(shè)置接收SBUF數(shù)據(jù)時(shí),要注意SBUF每次只傳送一個(gè)字符,以為在接收數(shù)據(jù)時(shí)要設(shè)個(gè)一個(gè)很長(zhǎng)的數(shù)組(可以根據(jù)理論推算字符的具體長(zhǎng)度,但為了適應(yīng)各種信息,最好設(shè)置一個(gè)較大的數(shù)組),一次接收一個(gè)字符,而且每次都會(huì)產(chǎn)生中斷,所以必須在串口中斷函數(shù)里面接收,另外,對(duì)于串口發(fā)送中斷RI和接受中斷RI,無(wú)論哪個(gè)響應(yīng),都會(huì)觸發(fā)串口中斷。到底時(shí)什么中斷那?需要在串口中斷服務(wù)程序里面通過(guò)軟件來(lái)判斷。串口接收數(shù)據(jù)處于被動(dòng)狀態(tài),即不知道客戶端什么時(shí)候發(fā)送數(shù)據(jù),對(duì)于接收數(shù)據(jù)沒(méi)有問(wèn)題,問(wèn)題是當(dāng)接收到第一組數(shù)據(jù)后,如果沒(méi)有及時(shí)對(duì)此數(shù)據(jù)進(jìn)行取值,那么下一次就會(huì)將它覆蓋,從而導(dǎo)致丟失數(shù)據(jù)。為了避免這種事情發(fā)生,要開(kāi)啟串口中斷,一定要注意發(fā)送完成后也會(huì)引起串口中斷,所以要在中斷服務(wù)程序里面進(jìn)行判斷是那個(gè)中斷引起的。具體流程圖如下所示: 圖416 串口中斷處理流程圖SCON是一個(gè)逐位定義的8位寄存器,用于控制串行通信的方式選擇、接收和發(fā)送,指示串口的狀態(tài),SCON即可以字節(jié)尋址也可以位尋址,字節(jié)地址98H,地址位為98H9FH。它的各個(gè)位定義如下:表4 7 狀態(tài)控制寄存器SCONSM0和SM1是串口的工作方式選擇位,2個(gè)選擇位對(duì)應(yīng)4種工作方式,如下表,其中Fosc是振蕩器的頻率。 表4 8 串口工作方式的選擇本次設(shè)計(jì)采用方式1,即8位異步通信方式,波特率可變,具體串口初始化程序如下所示:void Serial_Init(void)//串口初始化函數(shù){Timer_flag=1。SCON = 0x50。//串口:方式1,允許發(fā)送和接收TMOD = 0x02。//定時(shí)器1:模式2,8位自動(dòng)重裝模式,用于產(chǎn)生波特率 TH0= 0xFD。 //,波特率為9600 TL0 = 0xFD。 TR0= 1。 //開(kāi)啟定時(shí)器1 }由于重復(fù)應(yīng)用了定時(shí)器0,這樣會(huì)導(dǎo)致定時(shí)器無(wú)法正常工作,所以在此處要設(shè)置標(biāo)志量Timer_flag,而且要定義成全局變量,令其為1,由于兩處使用定時(shí)器是分時(shí)而用,在時(shí)間上互不矛盾,只需根據(jù)標(biāo)志來(lái)執(zhí)行各自的程序,從而完成一個(gè)定時(shí)器兩個(gè)互不兼容的函數(shù)共同使用。單片機(jī)接收到的短信是一串編碼,需要對(duì)這些編碼進(jìn)行分析,取出需要的命令指令,然后根據(jù)的命令去執(zhí)行相應(yīng)的操作,從而完成遠(yuǎn)程遙控。當(dāng)然這些命令是預(yù)先在單片機(jī)里面定義的命令,并且設(shè)置成足夠的長(zhǎng)度以保證不和AT有關(guān)回復(fù)指令重合。目的很簡(jiǎn)單,就是為了可以使用strstr()函數(shù),直接到短信里面去匹配命令,獲得指令。這樣的話,可以不必知道指令在GSM回復(fù)中的具體位置,簡(jiǎn)化任務(wù)。首先分析用到的各個(gè)AT指令uchar code AT=[]AT\n。 //單片機(jī)與GSM的握手信號(hào)uchar code ATE0[]=ATE0\n。 // 關(guān)回顯。uchar code AT_CNMI[]=AT+CNMI=2,1,0,0,1\r\n。 //設(shè)置這組參數(shù),來(lái)了新的信息直接顯示到串口,2=“當(dāng)TATE 鏈接保留時(shí)結(jié)果代碼緩存在TA,預(yù)約后發(fā)送給TE否則直接將其傳送給TE”1=“SMSDELIVER 由+CMTI : SM, index 來(lái)提示發(fā)送路徑”uchar code AT_CMGL[]=AT+CMGL=REC UNREAD\n //接收所有未讀消息。uchar code AT_CSCA[]=AT+CSCA=8613800571500\n。//設(shè)置客服中心號(hào) AT+CSCA= 8613800210500uchar code AT_CMGF[]= AT+CMGF=1\n。//設(shè)置短信格式為T(mén)EXT格式uchar code AT_CMGF0[]= AT+CMGF=0\n。 //設(shè)置短信格式為PDU格式char code AT_CSCS[]=AT+CSCS=GSM\n。 //使用GSM字符集char code AT_CSMP[]=AT+CSMP=17,167,0,8\n。 //設(shè)置PDU模式參數(shù),8為使用Unicode編碼uchar code AT_CMGS[]= AT+CMGS=。//發(fā)送短信指令uchar code AT_CMGD[]=AT+CMGD=1,4\n // 刪除所有短息開(kāi)機(jī)程序設(shè)計(jì),IGT是啟動(dòng)腳,系統(tǒng)加電后為使TC35i進(jìn)入工作狀態(tài),必須給IGT加一個(gè)大于100ms的低脈沖,電平下降持續(xù)時(shí)間不可超過(guò)1ms。具體程序如下所示:GSM啟動(dòng):void IGT_start (){ P2_5=0。 delay_ms(1000)。 P2_5=1。 delay_ms(1000)。}發(fā)送信息主要功能單片機(jī)反饋信息,和手機(jī)發(fā)送指令。其中單片機(jī)反饋信息包括兩部分組成,(1)一部分為手機(jī)發(fā)送操作指令的執(zhí)行結(jié)果是否成功的信息,若成功則不發(fā)送,若失敗則將失敗信息發(fā)送給手機(jī),要求手機(jī)重新發(fā)送。短信發(fā)送的格式為PDU,即發(fā)送中文短信,具體發(fā)送短信程序如下:void GSM_Sent_PDU_Message(char num[],char sms[]){ unsigned char i。printf(%s,AT)。delay_ms(200)。 printf(%s,AT_CMGF0)。//設(shè)置為PDU模式,適合發(fā)送短信內(nèi)容 為中文 delay_ms(200)。printf(%s,AT_CSCCS)。//使用GSM字符集 delay_ms(200)。printf(%s,AT_CSMP)。//設(shè)置PDU模式參數(shù),8為使用 Unicode編 碼 delay_ms(200)。printf(%s,AT_CMGS)。//AT+CMGS=length pdu ctrlZ 用PDU方式發(fā)送消息 printf(%d\n,strlen(sms)/2+15)。 /字節(jié)長(zhǎng)度,與實(shí)際短信內(nèi)容 長(zhǎng)度有關(guān) delay_ms(200)。printf(%s,str6)。 //一開(kāi)始發(fā)送的字符,包括短信 中心號(hào)碼等,這 部分一般都是固定不變的,可以不用管它 strcat(num,F)。 //在接收端號(hào)碼后面補(bǔ)F,使之成為12位字符 for(i=0。i6。i++)//然后再兩位兩位分別調(diào) 換位置 { printf(%c%c,num[2*i+1],num[2*i])。} printf(%s,str7)。printf(%02x,strlen(sms)/2)。//中文短信字?jǐn)?shù) printf(%s\x1a,sms)。//發(fā)送內(nèi)容的Unicode編碼字符串+(CTRL+Z) delay_ms(200)。}另一部分發(fā)送的是現(xiàn)場(chǎng)監(jiān)控的的實(shí)時(shí)信息,它的功能是向遠(yuǎn)程控制端匯報(bào)現(xiàn)場(chǎng)情況。如果家中有一些安全監(jiān)控設(shè)備,檢測(cè)到異常狀況,此處只是匯報(bào)指令執(zhí)行的情況。還有各個(gè)受控設(shè)備的工作狀態(tài),比如空調(diào)的開(kāi)啟與關(guān)閉。這些信息依賴(lài)受控端的信息反饋,只需將這些信息以短信的方式直接發(fā)送給手機(jī),由于反饋的信息分兩種,所以用兩個(gè)字符串將信息發(fā)送出去,下面為發(fā)送實(shí)時(shí)監(jiān)控信息的函數(shù):void GSM_Sent_Text_Message(uchar *addr,uchar *stat){ printf(%s,AT)。//以下幾個(gè)為GSM的AT串口指令,設(shè)置短信發(fā)送類(lèi)型 delay_ms(200)。printf(%s,AT_CMGF)。//設(shè)置為T(mén)EXT模式 delay_ms(200)。printf(%s,AT_CSCS)。//使用GSM字符集 delay_ms(200)。printf(%s,AT_CSMPT)。 //設(shè)置TEXT模式參數(shù) delay_ms(200)。printf(%s,AT_CMGST)。 //設(shè)置接收端電話號(hào)碼 delay_ms(200)。printf(%s,addr)。printf(%s\x1a,stat)。 //具體 發(fā)送的內(nèi)容在此修改+結(jié)束符,相當(dāng)于鍵盤(pán)的CTRL+Z delay_ms(200)。}接收短信的功能主要是實(shí)現(xiàn)遠(yuǎn)程遙控,是本次的核心設(shè)計(jì)。下面介紹手機(jī)端的命令操作格式,其實(shí)相當(dāng)簡(jiǎn)單,只需要發(fā)送“遙控,鍵值”比如:“yaokong1,01”.然后發(fā)送到我們所用的手機(jī)號(hào)中即可完成遠(yuǎn)程控制,注意:由于此時(shí)是Text模式,所以發(fā)送內(nèi)容應(yīng)為英文內(nèi)容,包括數(shù)字,英文標(biāo)點(diǎn)。接收短信的程序采用精簡(jiǎn)設(shè)計(jì),只允許SM卡里面有一條短信,主要是為了取短信方便而設(shè)計(jì),不需要設(shè)計(jì)短信的地址,直接全部取出即可,讀完后立即刪除,由于程序較長(zhǎng),只列寫(xiě)幾個(gè)關(guān)鍵程序,如下所示:當(dāng)有消息來(lái)時(shí),GSM會(huì)主動(dòng)通知單片機(jī),單片機(jī)識(shí)別是否是新信息提示的程序?yàn)椋篿f(strstr(R_SBUF,+CMTI)!=NULL) // 緩沖中有+CMTI字符,表明有新消息提示,應(yīng)該馬上讀取。發(fā)送完接收信息指令后,等待一段時(shí)間,為了讓串口有足夠的時(shí)間將信息接收,然后單片機(jī)判斷發(fā)來(lái)的是否是信息,因?yàn)槿绻切畔?,GSM發(fā)來(lái)的必有CMGL,所以判斷程序?yàn)椋?if(strstr(R_SBUF,+CMGL)!=NULL) // 緩沖中有+CMTL字符 表明接受到消息,為了處理方便,只允許內(nèi)存里存有一條短信,直接全部讀取即可,讀完刪除。這一步是設(shè)計(jì)的最關(guān)鍵的一步,就是取信息,從里面取出指令,由于對(duì)GSM不太熟悉,所以采用字符串比對(duì)函數(shù),就不是可以不去了解GSM短信的具體格式,內(nèi)容所在的具體位置,但要求命令不要和短信中的某些格式語(yǔ)句重復(fù)。這個(gè)函數(shù)就時(shí)strstr()。具體程序參見(jiàn)附
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1