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

正文內(nèi)容

基于stc89c52單片機(jī)的智能紅外遙控系統(tǒng)畢業(yè)論(已改無錯(cuò)字)

2023-07-15 22:36:50 本頁面
  

【正文】 //有進(jìn)位 ,高 8位取反加 1 Wendu_data[0]=~Wendu_data[0]+1。 Wendu_data[1]=~Wendu_data[1]+1。 }else { //沒進(jìn)位 ,高 8 位不加 1 Wendu_data[0]=~Wendu_data[0]+1。 Wendu_data[1]=~Wendu_data[1]。 } } temp_data=Wendu_data[1]4。 //取高字節(jié)低 4位 temp_data_2=Wendu_data[0]4。 //取低字節(jié)高 4位 temp_data=temp_data|temp_data_2。 //組合成一個(gè)八位數(shù)據(jù) Wendu_ASCII[0]=temp_data/100+0x30。 //百位轉(zhuǎn)換為 ASCII 碼 Wendu_ASCII[1]=(temp_data%100)/10+0x30。 //十位轉(zhuǎn)換為 ASCII 碼 Wendu_ASCII[2]=(temp_data%100)%10+0x30。 //個(gè)位轉(zhuǎn)換為 ASCII 碼 Wendu_data[0]amp。=0x0f。 //小數(shù)位轉(zhuǎn)換為 ASCII 碼 TempDec=Wendu_data[0]*625。 //12 位精度 ,擴(kuò)大 10000 倍 Wendu_ASCII[3]=TempDec/1000+0x30。 //十分位轉(zhuǎn)換為 ASCII 碼 Wendu_ASCII[4]=(TempDec%1000)/100+0x30。 //百分位轉(zhuǎn)換為 ASCII 碼 } DS1302 時(shí)間程序模塊 DS1302 總體操作及基本讀寫功能函數(shù) DS1302 總體操作如圖 21 所示。 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì)) 21 圖 21 DS1302 操作總流程 DS1302 讀寫操作流程如圖 22 所示 。 開始 結(jié)束 設(shè)置 CE 為高 上升沿,按位傳輸?shù)刂? 讀取或?qū)懭胂鄳?yīng)地 址的數(shù)據(jù) 設(shè) 置 C E 為 低 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì)) 22 圖 22 DS1302 讀寫操作流程 具體代碼如下: /********************************************************** 通過時(shí)鐘寫入一字節(jié)數(shù)據(jù),在一個(gè)時(shí)鐘的上升沿?cái)?shù)據(jù)被寫入 **********************************************************/ void DS1302_WriteByte(unsigned char d) { uchar i。 ACC = d。 SCLK=0。 //初始時(shí)鐘線置為 0 for(i=8。 i0。 i) { DS1302_IO = ACC0。 DS1302_CLK = 1。 //制造上升沿 數(shù)據(jù)被傳輸 DS1302_CLK = 0。 //再次拉低 ACC = ACC 1。 } } /********************************************************** 通過時(shí)鐘讀取一字節(jié)數(shù)據(jù),在一個(gè)時(shí)鐘的下降沿 DS1302 數(shù)據(jù)被讀出 **********************************************************/ unsigned char DS1302_ReadByte(void) { uchar i。 for(i=8。 i0。 i) { ACC = ACC 1。 ACC7 = DS1302_IO。 DS1302_CLK = 1。 Delayus(1)。 DS1302_CLK = 0。 //制造下降沿 } return(ACC)。 } /********************************************************** /向 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。 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì)) 23 DS1302_RST = 0。 } /********************************************************** /讀取 DS1302 某地址的數(shù)據(jù) , **********************************************************/ uchar Read1302(unsigned char Addr) { uchar Dat。 DS1302_RST = 0。 DS1302_CLK = 0。 DS1302_RST = 1。 DS1302_WriteByte(Addr|0x01)。 // 以寫數(shù)據(jù)時(shí)的地址為參考,讀時(shí)應(yīng)加 1 Dat = DS1302_ReadByte()。 // 讀取數(shù)據(jù)到變量 Dat DS1302_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。 然后,通過 Read1302()函數(shù)讀取各個(gè)地址處的時(shí)間數(shù)據(jù)分別保存于 Second、Minute 等變量中并轉(zhuǎn)換成十進(jìn)制,如讀取并裝換秒值可以用以下兩個(gè)語句: 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì)) 24 temp = Read1302(0x80)。 //低四位是秒的個(gè)位,高三位是秒的十位(原來是 BCD碼) TimeSecond = ((temp amp。0x70)4)*10 + (temp amp。0x0F)。 接著就可以把數(shù)值轉(zhuǎn)換成字符串了,仍以秒值為例轉(zhuǎn)換語句如下: TimeStr_Time[0] = TimeSecond/10 + 39。039。//十位 TimeStr_Time[1] = TimeSecond%10 + 39。039。//個(gè)位 至此,所得數(shù)據(jù)便可以方便的顯示在液晶屏上了。 LCD12864 液晶驅(qū)動(dòng)程序 LCD12864 初始化 LCD12864 初始化流程如圖 23 所示。 圖 23 12864 液晶初始化 下面是初始化代碼: void Init_12864() //LCD12864 初始化 { delay(40)。 //大于 40MS 的延時(shí)程序 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì)) 25 RES=0。 //復(fù)位 delay(1)。 //延時(shí) RES=1。 //復(fù)位置高 Write12864_Cmd_Dat(0x30,0)。 //基本指令集 delay(100)。 //大于 100uS 的延時(shí)程序 Write12864_Cmd_Dat(0x30,0)。 //基本指令集 delay(37)。 //大于 37uS 的延時(shí)程序 Write12864_Cmd_Dat(0x0C,0)。 //開顯示 delay(100)。 //大于 100uS 的延時(shí)程序 Write12864_Cmd_Dat(0x01,0)。 //清屏 delay(10)。 //大于 10mS 的延時(shí)程序 Write12864_Cmd_Dat(0x06,0)。 //光標(biāo)從右向左加 1位移動(dòng) delay(100)。 //大于 100uS 的延時(shí)程序 } 寫數(shù)據(jù)到 LCD12864 功能函數(shù) //寫一字節(jié)數(shù)據(jù)或?qū)懨畹?LCD void Write12864_Cmd_Dat(char data1,bit DI) //DI=0 命令, DI=1 數(shù)據(jù) { WR=0。 RS=DI。 delay(1)。 P0=data1。 E=1。 delay(1)。 E=0。 } //從地址 addr_12864 開始,寫字符串到 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)。 } } 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì)) 26 //在地址 addr,寫一個(gè)字符到 LCD void writedat(uchar addr ,uchar dat) { Write12864_Cmd_Dat(addr,0)。 Write12864_Cmd_Dat(dat,1)。 } HS0038 紅外解碼程序模塊 紅外遙控器編碼介紹 在進(jìn)行紅外解碼之前首先要對(duì)本項(xiàng)目采用的紅外遙控器編碼方式進(jìn)行簡要介紹。遙控器發(fā)送一組完整數(shù)據(jù)(見圖 24),首先是 9ms 高電平和 低電平組成的前導(dǎo)碼,緊接著是 8位地址碼及其反碼,最后便 是 8位操作碼及其反碼。具體的編碼方式為脈寬調(diào)制的串行碼,用 的高電平和 的低電平表示二進(jìn)制 0,以 的高電平和 的低電平表示二進(jìn)制 1,編碼形式如圖 25所示。 圖 24 遙控器發(fā)送一組完整數(shù)據(jù) 圖 25 遙控器編碼的 0 和 1 泰山學(xué)院本科畢業(yè)論文(設(shè)計(jì)) 27 紅外解碼程序流程及重要代碼分析 本項(xiàng)目 中紅 外遙控器作為控制單片機(jī)運(yùn)行的按鍵,為了更好的實(shí)現(xiàn)按鍵功能紅外接收端接在了單片機(jī)的外部中斷 0引腳,另外遙控器編碼采用脈寬調(diào)制方式,為了更精確的記錄脈寬時(shí)間需要啟用定時(shí)器功能,所以程序開始要進(jìn)行中斷和定時(shí)器的初始化。初始化代碼如下: void Timer0init() { TMOD=0x02。 //定時(shí)器方式 2 , 8 位自動(dòng)重裝 TH0=0x00。 TL0=0x00。 ET0=1。 //定時(shí)器中斷允許 EA=1。 TR0=1。 //開定時(shí)器 } void Int0init() { IT0=1。 //下降沿觸發(fā) EX0=1。 EA=1。 //開總中斷 } 中斷觸發(fā)方式采用下降沿觸發(fā),中斷程序只需要記錄兩
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1