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

正文內(nèi)容

畢業(yè)論文----基于單片機(jī)的推箱子游戲設(shè)計(jì)(參考版)

2025-06-10 08:55本頁(yè)面
  

【正文】 在這段時(shí)間里,楊老師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和熱忱的工作作風(fēng)令我十分欽佩,他的指導(dǎo)使我受益非淺。高等教育出版社, 2021 22 周航慈 .單片機(jī)應(yīng)用程序設(shè)計(jì) .北京航空航天大學(xué)出版社, 23 王毅 .單片機(jī)器件應(yīng)用手冊(cè) .人民郵電出版社 ,1994 致謝 歷時(shí)三個(gè)月的畢業(yè)設(shè)計(jì)已經(jīng)告一段落。我認(rèn)為不管做畢業(yè)設(shè)計(jì)也好,還是做其他什么樣的事也好,都要努力去做,還要用心去學(xué),更要有堅(jiān)持不懈的精神,只有這樣才能收獲到最好的果實(shí)。 我相信在這設(shè)計(jì)過(guò)程中的所有酸甜苦辣最終都會(huì)化為甜美的甘泉。 雖然我的這次論文作品并不是很完善,還有很多的不足之處,但是我仍可以肯定地說(shuō),這里面的每一個(gè)圖、每一個(gè)字,都是經(jīng)過(guò)我的大腦 篩選出來(lái)的。隨后畫電路圖,寫程序,仿真都沒少讓我傷透腦筋。其中繪制電路原理圖、編程是考驗(yàn)我的一道難題。其次用單片機(jī)邊游戲是一個(gè)不常見的課題,這方面的資料不是很多,所有的一切只有靠自己去摸索,這是一個(gè)比較漫長(zhǎng)的過(guò)程。 31 5 總結(jié) 在這段設(shè)計(jì)的過(guò)程中,確實(shí)也遇到很多的困難。沒修改之前代碼長(zhǎng)度至少多出現(xiàn)在一半,但我不能說(shuō)現(xiàn)在的就是最精煉的,可能有待改進(jìn)的地方還很多。這樣大大提高了程序的可靠性。既在實(shí)際當(dāng)中由于偶然的原因鍵盤抖動(dòng)而導(dǎo)致引腳電平為低人后瞬間又恢復(fù)為高, 或雖然只是按下按鍵一次然后放掉,結(jié)果在按鍵信號(hào)穩(wěn)定前后,竟出現(xiàn)了一些不該存在的噪聲, 這些情況下按鍵是并沒有真的被按下的 ,如果沒有去抖動(dòng)程序,游戲會(huì)將其當(dāng)做一次正確的按鍵操作去執(zhí)行相應(yīng)功能,這樣就會(huì)引起電路的誤動(dòng)作。選關(guān)鍵用于選擇游戲關(guān)數(shù),在游戲過(guò)程中這個(gè)鍵任何時(shí)候都有效,當(dāng)按下選關(guān)鍵后,游戲地圖返回第一關(guān),再次按下時(shí)游戲進(jìn)入二關(guān),這樣每按下一次鍵游戲關(guān)數(shù)加一,如果游戲到了第 17 關(guān)將自動(dòng)返回第一關(guān)。確定鍵能使界面從初始化顯示切換到游戲界面顯示,上下左右鍵控制箱子的移動(dòng)方向,如果可以移動(dòng)則移動(dòng)方塊同時(shí)跟蹤人物的位置及刷新動(dòng)態(tài)數(shù)組的內(nèi)容。 開機(jī)界面顯示 點(diǎn)擊仿真按鈕,程序調(diào)用初始化函數(shù),進(jìn)入開機(jī)界面顯示,圖片如下: 游戲界面顯示 當(dāng)進(jìn)入開機(jī)界面顯示后,只有確定鍵有效,其他按鍵被鎖定,當(dāng)按下確定鍵后,確定鍵失效,其他鍵鎖定解除,畫面進(jìn)入第一關(guān)游戲界面顯示,關(guān)數(shù)、步數(shù)、 29 時(shí)間開始記錄數(shù)據(jù),圖片如下: 第一關(guān)游戲界面 第四關(guān)游戲界面 第六關(guān)游戲界面 第八關(guān)游戲界面 第十關(guān)游戲界面 第十二關(guān)游戲界面 第十四關(guān)游戲界面 第十七關(guān)游戲界面 30 仿真結(jié)果分析及解決方法 通過(guò)以上給出的仿真波形分析可知,本設(shè)計(jì)中的各項(xiàng)功能夠很好的實(shí)現(xiàn)。這個(gè)文件就是我們要下載到單片機(jī)中的程序文件。編譯或匯編的結(jié)果見如圖所示,上面提示“ 0 個(gè)錯(cuò)誤、 0個(gè)報(bào)警”。通常先點(diǎn)編譯當(dāng)前文件“ Translate current file”,再建立目標(biāo)文件“ Build target”;或直接點(diǎn)重建目標(biāo)文件“ Rebuild all target files”。而在中間左邊項(xiàng)目窗口中的“ Source Group 1”前多了一個(gè)“ +”號(hào)。點(diǎn)“ Add”按鈕,再點(diǎn)“ Close”按鈕。點(diǎn)“ Add”按鈕,再在彈出的對(duì)話框中選擇文件類型,如“ Assembly language file”;再點(diǎn)“ Close”按鈕。具體操作如下:將鼠標(biāo)箭頭移至中間左邊項(xiàng)目窗口中的“ Source Group 1”前的圖標(biāo)上,再單擊鼠標(biāo)右鍵,在彈出的菜單項(xiàng)中選擇“ Add files to Group ‘ Source Group 1’”。 22 建立工程項(xiàng)目流程 1)建立一個(gè)新工程 單擊 Project 菜單,在彈出的下拉菜單中選中 New Project 選項(xiàng),如下圖 2)然后選擇你要保存的路徑 ,輸入工程文件的名字 ,比如保存到 C51 目錄里 ,工程文件的名字為 C51,如下圖所示 ,然后點(diǎn)擊保存 . 3)這時(shí)會(huì)彈出一個(gè)對(duì)話框 ,要求你選擇單片機(jī)的型號(hào) ,你可以根據(jù)你使用的單片機(jī)來(lái)選擇 ,keil c51 幾乎支持所有的 51核的單片機(jī) ,我這里還是以大家用的比較多的 Atmel 的 89C51來(lái)說(shuō)明 ,如下圖所示 ,選擇 89C51之后 ,右邊欄是對(duì)這個(gè)單片機(jī)的基本的說(shuō)明 ,然后點(diǎn)擊確定 . 23 4)完成上一步驟后,屏幕如下圖所示 5)在下圖中,單擊“ File”菜單,再在下拉菜單中單擊“ New”選項(xiàng) ,如果已經(jīng)寫好了 C文件則直接添加為文件,這一步可去掉。//更新人物坐標(biāo) Pass()。 _Display()。 //在上面顯示一個(gè)人物 //如果現(xiàn)在人物位置上面是箱子則更新為空白 (因?yàn)橄渥右呀?jīng)移掉了 ) if(b==3)Follow_Action[x_Coordinate1][y_Coordinate]=0。 Follow_Action[x_Coordinate2][y_Coordinate]=5。//則在上面的上面顯示個(gè)箱子 Follow_Action[x_Coordinate2][y_Coordinate]=3。//箱子可以移動(dòng),步數(shù)加 1 New_Step()。amp。amp。//調(diào)用原來(lái)位置顯示子程序,還原人物本身位置圖形 x_Coordinate。//更新步數(shù) Han_Zi(2*(x_Coordinate1),2*y_Coordinate,0x94)。 //現(xiàn)在人物位置上面是什么 if(b==0||b==4)//如果現(xiàn)在人物位置上面是空白或是叉圖形則顯示一個(gè)人物 {Steps++。//關(guān)數(shù)計(jì)數(shù)器置一,為選關(guān)做準(zhǔn)備 a=Customs[Custom1][x_Coordinate][y_Coordinate]。}}// Counts 數(shù)據(jù)歸零,時(shí)間全局量加 1,讀時(shí)間標(biāo)志置1 方向控制代碼設(shè)計(jì) [8] 游戲共有 4個(gè)方向鍵,每一個(gè)鍵代碼編寫的原理,判斷順序及執(zhí)行何種操作都是一樣的,不同的是方向各不相同,現(xiàn)已向上推箱子為例詳細(xì)說(shuō)明其執(zhí)行過(guò)程。Time++。// 定時(shí)器 1初值設(shè)定 Counts++。}//喇叭引腳電平取反 定時(shí)器 1 中斷計(jì)時(shí)程序 void Time_1_Int() interrupt 3 using 1 {TH1=0x3c。//每次進(jìn)入中斷,發(fā)聲計(jì)數(shù)數(shù)據(jù)加 1 if(Count==150)TR0=Count=0。TL0=64800%256。// 將叉圖形顯示出來(lái) Follow_Action[x_Coordinate][y_Coordinate]=4。// 將空白圖形顯示出來(lái) Follow_Action[x_Coordinate][y_Coordinate]=0。}//如果是 5(箱子和叉重合 )則將地址 90H 傳給內(nèi)存 Han_Zi(2*i,2*j,a)。// 如果是 4(叉 )則將叉字模的地址 88H 傳給內(nèi)存 case 5:a=0x90。// 如果是 3(箱子 )則將箱子字模的地址 8cH 傳給內(nèi)存 case 4:a=0x88。// 如果是 2(墻壁 )則將墻壁字模的地址 84H 傳給內(nèi)存 case 3:a=0x8c。 case 2:a=0x84。y_Coordinate=j。//如果是 0(空白 )則將空白字模的地址 80H 傳給內(nèi)存 //如果是 1(人物 )則將人物字模的地址 94H 傳給內(nèi)存 ,并記錄 人物位置所在坐標(biāo) case 1:a=0x94。//將跟蹤數(shù)組中的數(shù)據(jù)傳給動(dòng)態(tài)內(nèi)存 switch(a)//根據(jù)內(nèi)存中的數(shù)據(jù)做出判斷 {case 0:a=0x80。j++)//掃描 9列 {Follow_Action[i][j]=Customs[Custom1][i][j]。i++)//掃描 8 行 {for(j=0。 for(i=0。//更新關(guān)數(shù)顯示 Dispaly()。//更新步數(shù)顯示 if(Custom==18)Custom=1。//如果 a=1 則將關(guān)數(shù)加一 (因?yàn)樗邢渥佣家淹坪茫梢赃^(guò)關(guān) ) Steps=Time=0。break。j++) //掃描 9列 //如果關(guān)卡數(shù)組表格中此位置是叉圖形或箱子和叉重合后的圖 if(Customs[Custom1][i][j]==5||Customs[Custom1][i][j]==4) //如果動(dòng)作跟蹤數(shù)組里此位置是箱子和叉重合后的圖,則將 a置 1 if(Follow_Action[i][j]==5)a=1。//如果 a=0則直接跳出函數(shù) for(j=0。i8。}// 得到關(guān)數(shù)的個(gè)位數(shù)據(jù) 過(guò)關(guān)代碼設(shè)計(jì) //當(dāng)所有箱子都推到指定位置時(shí),會(huì)調(diào)用過(guò)關(guān)子程序,代碼如下: void Pass() {unsigned char i,j,a=1。// 得到關(guān)數(shù)的十位數(shù)據(jù) Set_xy(1,19)。} //得到步數(shù)的個(gè)位數(shù)據(jù) 關(guān)數(shù)更新代碼設(shè)計(jì) void New_Custom() {Set_xy(1,18)。 //得到步數(shù)的十位數(shù)據(jù) Set_xy(7,19)。 //得到步數(shù)的百位數(shù)據(jù) Set_xy(7,18)。}//如果關(guān)數(shù)等于 18 則回到第一關(guān) (游戲總共 17 關(guān) ) 步數(shù)、關(guān)數(shù)更新代碼設(shè)計(jì) [7] 步數(shù)更新代碼設(shè)計(jì) //當(dāng)按下任意一個(gè)方向鍵,且箱子能移動(dòng)時(shí),會(huì)調(diào)用游戲步數(shù)更新子程序 void New_Step() {Set_xy(7,17)。//更新地圖顯示 Cust++。//將選得的關(guān)傳給關(guān)數(shù)寄存器 New_Custom()。//選關(guān)時(shí)將時(shí)間、步數(shù)歸零 New_Step()。 //設(shè)置個(gè)位數(shù)字顯示的位置 Write_8_Data(0x10+Time%10,0xc4)。 //設(shè)置十位數(shù)字顯示的位置 Write_8_Data(0x10+Time%100/10,0xc4)。//設(shè)置百位數(shù)字顯示的位置 Write_8_Data(0x10+Time/100,0xc4)。 {F=0。 Init_disply()。 TH1=0x3c。 TH0=64800/256。//開啟中斷總開關(guān),允許外部中斷 0、 1 中斷 TMOD=0x11。 }} 初始化代碼設(shè)計(jì) [6] //初始化代碼里包含定時(shí)器 0、 1的相關(guān)參數(shù)設(shè)置,初始化開機(jī)界面顯示等。Point(x0i,y0j,n)。Point(x0+i,y0j,n)。Point(x0+i,y0+j,n)。Point(x0i,y0+j,n)。 j++。i=R。 Point(x0,y0,n)。 //設(shè)置寫地址 Write_Com(point)。 Write_Data2(tempamp。 else pointamp。point=0xf7y%8。 unsigned int temp。a++)//992 字節(jié) 16 Write_8_Data(Tab[a],INC_WR)。 for(a=0。 Set_CGRAM()。a++)//清屏 320 字節(jié) Write_8_Data(0x83,INC_WR)。//從最左上角開始 for(a=0。} 清屏程序 void Clear_LCD() {unsigned int a。 Write_8_Data(Addr+1,INC_WR)。 Write_8_Data(Addr+2,INC_WR)。} 顯示一個(gè)漢字子程序 //x 表示顯示的行 (0~15), y表示顯示的列 (0~19),n 表示字在表格中的位置 void Han_Zi(unsigned char x,unsigned char y,unsigned char Addr) {Set_xy(x,y)。 Write_Com(Disp_Mode)。 Write_Data2(Map_Wide,0,GRH_WID)。 Write_Data2(Txt_Wide,0,TXT_WID)。} CGRAM 偏置地址設(shè)置函數(shù) void Set_CGRAM() {Write_Data2(1,0,CGR_POS)。0xff,a8,ADR_POS)。a=x*20+y。 Write_Com(AUT_WO)。//判斷是否
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1