【正文】
模的地址 94H 傳給內(nèi)存 ,并記錄 人物位置所在坐標(biāo) case 1:a=0x94。j++)//掃描 9列 {Follow_Action[i][j]=Customs[Custom1][i][j]。 for(i=0。//更新步數(shù)顯示 if(Custom==18)Custom=1。break。//如果 a=0則直接跳出函數(shù) for(j=0。}// 得到關(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。} //得到步數(shù)的個(gè)位數(shù)據(jù) 關(guān)數(shù)更新代碼設(shè)計(jì) void New_Custom() {Set_xy(1,18)。 //得到步數(shù)的百位數(shù)據(jù) Set_xy(7,18)。//更新地圖顯示 Cust++。//選關(guān)時(shí)將時(shí)間、步數(shù)歸零 New_Step()。 //設(shè)置十位數(shù)字顯示的位置 Write_8_Data(0x10+Time%100/10,0xc4)。 {F=0。 TH1=0x3c。//開(kāi)啟中斷總開(kāi)關(guān),允許外部中斷 0、 1 中斷 TMOD=0x11。Point(x0i,y0j,n)。Point(x0+i,y0+j,n)。 j++。 Point(x0,y0,n)。 Write_Data2(tempamp。point=0xf7y%8。a++)//992 字節(jié) 16 Write_8_Data(Tab[a],INC_WR)。 Set_CGRAM()。//從最左上角開(kāi)始 for(a=0。 Write_8_Data(Addr+1,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_Data2(Map_Wide,0,GRH_WID)。} CGRAM 偏置地址設(shè)置函數(shù) void Set_CGRAM() {Write_Data2(1,0,CGR_POS)。a=x*20+y。//判斷是否能自動(dòng)寫(xiě) Write_Com(AUT_WR)。 // 為指令、狀態(tài)操作條件 Pin=Com。 //將指令送數(shù)據(jù)線 _WR=0。 _WR=1。 //為下次寫(xiě)做裝備 Enable()。//判斷是否可讀寫(xiě) _CD=0。 //將指令送數(shù)據(jù)線 _WR=0。//寫(xiě)操作 _WR=1。 void Write_Data1(unsigned char Data1,unsigned char Com) 13 {Enable()。3)==3)break。//讀操作條件 _RD=1。 液晶屏驅(qū)動(dòng)代碼設(shè)計(jì) [5] 讀狀態(tài)程序 unsigned char Read_State()//返回液晶顯示屏的當(dāng)前狀態(tài) {unsigned char a。 復(fù)位信號(hào)從單片機(jī)的 RST 引腳輸入,復(fù)位操作有上電自動(dòng)復(fù)位、按鍵電平復(fù)位和外部脈沖復(fù)位三種方式,本電路采用了按鍵電平復(fù)位,電路圖如圖 3.。N3=1/0 圖形顯示啟用 /禁用 光 標(biāo) 形狀選擇 無(wú) 1 0 1 0 0 N2 N1 N0 0xA00xA7 表示光標(biāo)占的行數(shù) 屏讀 無(wú) 1 1 1 0 0 0 0 0 屏讀 數(shù) 據(jù) 一次讀、寫(xiě)方 式 設(shè)置 D1 1 1 0 0 0 0 0 0 數(shù)據(jù)寫(xiě),地址加 1 1 1 0 0 0 0 0 1 數(shù)據(jù)讀,地址加 1 1 1 0 0 0 0 1 0 數(shù)據(jù)寫(xiě),地址減 1 1 1 0 0 0 0 1 1 數(shù)據(jù)讀,地址減 1 1 1 0 0 0 1 0 0 數(shù)據(jù)寫(xiě),地址不變 1 1 0 0 0 1 0 1 數(shù)據(jù)讀,地址不變 數(shù) 據(jù) 自動(dòng)讀、寫(xiě)方 式 設(shè)置 無(wú) 1 0 1 1 0 0 0 0 自動(dòng)寫(xiě)設(shè)置 1 0 1 1 0 0 0 1 自動(dòng)讀設(shè)置 1 0 1 1 0 0 1 0 自動(dòng)寫(xiě)結(jié)束 1 0 1 1 0 0 1 1 自動(dòng)讀結(jié)束 屏拷貝 無(wú) 1 1 1 0 1 0 0 0 屏拷貝 位操作 無(wú) 1 1 1 1 N3 N2 N1 N0 N3=1 置 1 N3=0 清 表二 T6963C 指令集 晶振、復(fù)位電路 晶振電路 單片機(jī)的晶振電路如圖 2所示,其中 XTAL1 和 XTAL2 分別為片內(nèi)振蕩電路的輸入輸出端。D1 低字節(jié) 。它可以用于文字,圖形和結(jié)合文本模式及其他各種屬性的功能。該控制器有一個(gè) 8位并行數(shù)據(jù)總線,控制線的讀取或?qū)懭胪ㄟ^(guò)微控制器接口實(shí)現(xiàn),可以直接連接到 TMPZ80 微處理器中。第四,就編程語(yǔ)言方面來(lái)說(shuō),編寫(xiě)這樣一個(gè)簡(jiǎn)單的小游戲不需要什么高級(jí)的語(yǔ)言, C 語(yǔ)言或匯編語(yǔ)言就足以完成, C 語(yǔ)言是一種通用型的語(yǔ)言,編程靈活、可讀性強(qiáng)、移植性好;匯編語(yǔ)言是一種直接面向硬件的基礎(chǔ)語(yǔ)言,最接近機(jī)器語(yǔ)言,執(zhí)行速度快(本游戲采用 C語(yǔ)言編寫(xiě))。那么推箱子這種小游戲能否在單片機(jī)上編出來(lái)呢?答案是肯定的。 T6963C core。s hardware ponents of the circuit, as a part of the software programming. In the hardware circuitry, including the main active part of the crystal, the direction and control of some of the liquid crystal display and other parts of the singlechip wiring design。 論文主要分為兩大塊:一塊為游戲的硬件電路組成部分,一塊為軟件程序設(shè)計(jì)部分。 1 本科畢業(yè)論文(設(shè)計(jì)) 題 目: 基于單片機(jī)的推箱子游戲設(shè)計(jì) 學(xué)生姓名: 徐衛(wèi) 學(xué)號(hào): P30914093 院(系): 電子信息工程 專業(yè): 微電子 入 學(xué)時(shí)間: 2021 年 9 月 導(dǎo)師姓 名: 楊宗立 職稱 /學(xué)位: 講師 導(dǎo)師所在單位: 安徽大學(xué) 完成時(shí)間: 2021 年 5 月 2 基于 PROTEUS 的推箱子游戲的設(shè)計(jì) 摘 要 本論文主要介紹了基于單片機(jī)的推箱子游戲的規(guī)則、硬件結(jié)構(gòu)、軟件代碼的編寫(xiě)及工作原理、基于 T6963C內(nèi)核的液晶模塊 PG160128A的詳細(xì)介紹以及指令集。本設(shè)計(jì)已通過(guò)了實(shí)驗(yàn)仿真,運(yùn)行穩(wěn)定,基本上沒(méi)有規(guī)則方面的錯(cuò)誤。 關(guān)鍵詞: 單片機(jī);推箱子; PG160128A; T6963C 內(nèi)核;指令集 3 Design Of PROTEUS Sokoban Game Based On[1] Abstract This paper introduces the singlechip based on the rules of the game Sokoban, the structure of hardware, software code writing and working principle, based on the core T6963C LCD module PG160128A, as well as details of the instruction set. Simulate the system under Windows Sokoban game, an arbitrary number of related options, in turn increase the difficulty of the game a few stepbystep record time of the game record, sound button, lowpower system can achieve online debugging and so on. The system is based on its singlechip control of the core, consisting of active crystal clock circuit clock signal sent through the arrow keys to select the singlechip control system to control mobile mand characters, the control system after receiving an order to make a Series to determine the necessary, to control the movement of people and boxes. This design has been adopted by the simulation experiments, stable, rules virtually no mistakes. The main thesis is divided into two blocks: one for the game39。 PG160128A。所以我們現(xiàn)在見(jiàn)到的游戲多是在基于電腦這種高速執(zhí)行指令的平臺(tái)上運(yùn)行的,脫離了它就什么事都做不了了。第三,游戲地圖相對(duì)比較小、畫(huà)面簡(jiǎn)單,只有箱子、人物和正確位置箱子等幾個(gè)圖形,這些在一塊稍大的液晶屏上就足以顯示,用不著電腦顯示屏。 PG160128A 液晶屏介紹 [2] PG160128A 為一個(gè) 128 行 160 列的點(diǎn)陣液晶屏,他能顯示各種字符、圖形、漢字,基于 T6963C 內(nèi)核控制,自帶字符庫(kù),同時(shí)用戶也可以自己建立漢字、圖形庫(kù),其在 Proteus 中的元器件圖形如下: 7 圖 1 PG160128 各引腳的功能描敘如下表: 引腳序列 引腳名稱 引腳功能描述 1 FG 信號(hào)設(shè)計(jì)引腳,此引腳為一個(gè)輸出引腳,在電路連接時(shí)懸空 2 VDD 電源引腳,外接 5V工作電壓 3 VSS 地引腳 ,接地 4 CON 功能不詳,在電路連接時(shí)懸空 5 WR 寫(xiě)信號(hào)腳,當(dāng)引腳為低電平時(shí)數(shù)據(jù)寫(xiě)入 T6963C 中 6 RD 讀信號(hào)腳,當(dāng)引腳為低電平時(shí)數(shù)據(jù)從 T6963C 中 讀出 7 CE 使能信號(hào)腳,正常工作時(shí)此腳接地,當(dāng)為高電平時(shí) CPU不能與 T6963C通信 8 C/D 指令、數(shù)據(jù)信號(hào)腳:當(dāng)引腳為高電平且 WR = L 時(shí)可以寫(xiě)入指令;當(dāng)引腳為高電平且 RD = L 時(shí)可以讀 T6963C 狀態(tài);當(dāng)引腳為低電平且WR = L時(shí)可以寫(xiě)入數(shù)據(jù);當(dāng)引腳為低電平且 RD = L 時(shí)可以讀出數(shù)據(jù) 11~18 D0~D7 數(shù)據(jù)引腳,用于液晶屏與單片機(jī)之間的數(shù)據(jù)通信 10 RST 復(fù)位引腳,低電平有效,起復(fù)位作用,器件內(nèi)部集成了上拉電阻,正 常工作時(shí)此引腳接電源 19 FS1 字形選擇引腳 FS1,用于選擇字形,當(dāng)為高電平時(shí)是 5*8點(diǎn)陣字體,當(dāng)為低電平時(shí)是 8*8 點(diǎn)陣字體 8 表一 PG160128 引腳功能表 T6963C 及其指令集介紹 T6963C[3] T6963C 是一個(gè) LCD 控制器,可設(shè)計(jì)為用于液晶顯示器控制驅(qū)動(dòng)芯片和數(shù)據(jù)顯示的存取器。該器件支持非常廣泛的字符格式,液晶顯示器允許通過(guò)編程設(shè)置選擇不同的組合。D2 高字節(jié) 顯 示 區(qū)域設(shè)置 D1/D2 0 1 0 0 0 0 0 0 文本區(qū)首址 。N2=1/0文本顯示啟用 /禁用 。 10 X T A L 1X T A L 2X1CRY S T A LC13 0 p FC23 0 p F 圖 2 晶振電路 復(fù)位電路 復(fù)位操作是單片機(jī)的基本操作,單片機(jī)在進(jìn)入運(yùn)行前和在運(yùn)行過(guò)程中程序出錯(cuò)或操作失誤使系統(tǒng)不能正常運(yùn)行時(shí),需要進(jìn)行復(fù)位操作,復(fù)位操作后,程序?qū)?0000H 開(kāi)始重新執(zhí)行。 GRWRDCDP D0D