嵌入式課程設計報告

2021-09-18 21:40:31 字數 3268 閱讀 1899

題目:觸控螢幕五子棋遊戲程式設計

基於mx1下的lcd觸控控制以及rs232串列埠通訊

學院自動化

專業自動化

年級 09級

姓名施紅星

2011 年 12月 9 日

根據選作實驗二觸控螢幕的控制提供的例程以及相關驅動,在c語言下適當修改了硬體驅動程式,並根據嵌入式的開發方式,利用相關介面實現在mx1開發板下實現觸控螢幕五子棋遊戲,並且通過rs232在超級終端中顯示每乙個動作的狀態。

傳統五子棋的棋具與圍棋相同,棋子分為黑白兩色,棋盤為15×15,棋子放置於棋盤線交叉點上。兩人對局,各執一色,輪流下一子,先將橫、豎或斜線的5個或5個以上同色棋子連成不間斷的一排者為勝。

由於螢幕大小限制以及顯示效果要求,一下設計的五子棋為紅藍兩色,棋盤為7*7,紅棋先行,其他規則不變。

具體實施步驟二中**分析中有詳細解說,執行結果參照步驟三。

#include "includes.h包含與uc/os-ii相關的系統呼叫的標頭檔案 */

#include "mx1_aitc.h包含與中斷控制器相關的標頭檔案 */

#include "irq.h包含與中斷管理相關的標頭檔案 */

#include "mx1_uart.h包含與串列埠通訊的標頭檔案 */

#include "mx1_lcdc.h包含與lcd顯示的標頭檔案 */

#include "mx1_asp.h包含與觸控螢幕控制相關的標頭檔案 */

#include "mx1_gpio.h包含與io介面功能選擇相關的標頭檔案 */

#include "string.h包含與字串輸出相關的標頭檔案 */

#include "stdio.h包含與c語言支援的標頭檔案 */

#include "error.h包含與錯誤輸出相關的標頭檔案 */

/* 用於時鐘中斷 */

extern void osstarttimetick( void );

extern void ostickisr( void );

extern int osheng(char a[7]);

extern int xsheng(char a[7]);

extern int he(char a[7]);

#define stk_size_task 256分配給任務的堆疊大小 */

#define prio_task 3任務的優先順序

os_stk stktask[stk_size_task為任務分配堆疊空間 */

void getin(d_point pixelpoint,d_point *chess) /* 觸控螢幕輸入後點位處理函式*/

/* 整體思路為:把捕捉到的輸入點落入棋盤的哪乙個格仔進行處理。首先,將lcd螢幕顯示的棋盤矩形橫豎分別七等分,同時,把棋盤劃分為乙個7*7點陣,按照0.

0到7.7排列。然後,根據捕獲到輸入觸點所落入棋盤落入格仔將其轉化為7*7的數點,其中新建了一點數點型變數chess,用作中間傳值變數,儲存處理結果*/

else

}/*下面是重頭戲,整個程式的靈魂,go_chess()函式解析:

在該函式中,首先定義兩個點,捕獲輸入點pixelpoint以及量化處理點chess;,然後乙個記錄陣列char a[7][7],整體思路為,首先利用pixelpoint捕獲輸入點位,然後通過getin函式實現量化處理為棋盤上的棋子chess,為了保證按照五子棋的規則走,又建立了記錄陣列a,用做下棋過程的記錄,a的狀態有三種:0,1,9,分別代表該位置沒下棋,落了紅棋子和落了黑棋子。初始化時,棋盤為空,a為0,當開始下棋時,紅棋先走,如果該位置無棋子(a==0),則落子,有子(a==1|| a==9)則報錯等待下一次重新獲得新棋子,下完紅棋后判斷紅旗是否獲勝,獲勝結束,否則則輪到藍棋,藍棋按照紅棋模式,下完後判斷藍棋是否獲勝,獲勝則結束,否則判斷棋盤是否下滿,下滿和棋程式結束,否則回到紅棋狀態*/

//o為紅棋,x為藍棋

int go_chess()

{ d_point pixelpoint,chess;

char a[7][7];

int x,y,x1,y1,i,j,k;

for(i=0;i<7;i++)

for(j=0;j<7;j++)

a[i][j]=0;

while(1)//用迴圈語句執行o,x交替下子,這些while語句看起來似乎是個死迴圈~實際上都會經過break結束

k=0;

while(k==0)//用迴圈語句保證必須讓o子下了才輪到x子

a: tp_getpixelinput( &pixelpoint, 50000 );

print("觸控座標: (%d, %d)\r\n", pixelpoint.x, pixelpoint.y );

print( "紅方落子\r\n");

getin(pixelpoint,&chess);

x=chess.x;

y=chess.y;

if(a[x][y]==1||a[x][y]==9)//判斷是否已有子

print( "已有子請重下\r\n");//如果沒有在迴圈語句中,判斷已有子後就直接下x子去了,實際上o子還沒下,如果不明白自己去掉while試試

goto a;

else

print( "紅方落子成功: (%d, %d)\r\n", chess.x, chess.y );

a[x][y]=1;

x1=30*x;

y1=30*y;

mx1_lcdc_drawcircle( x1,y1,12, 15, 15, ls_solid, fs_dotdot );

k=1;

break;

if(osheng(a))//判斷o子是否已經獲勝

print( "紅方獲勝\r\n");

break;

while(k==1)//下x子

b: tp_getpixelinput( &pixelpoint, 50000 );

print("觸控座標: (%d, %d)\r\n", pixelpoint.x, pixelpoint.y );

print( "藍方落子\r\n");

getin(pixelpoint,&chess);

x=chess.x;

y=chess.y;

if(a[x][y]==1||a[x][y]==9)

print( "已有子請重下\r\n");

goto b;

else

print( "藍方落子成功: (%d, %d)\r\n", chess.x, chess.y );

嵌入式系統課程設計報告 模版

專業 班級 學院 二 一二年六月 目錄第一章 概述3 1.1研究動機3 1.2研究進度3 1.3專題成果概述3 第二章 實驗平台的構建3 2.1wince的燒寫3 2.2microsoft activesync的同步6第三章 系統設計9 3.1介面要求9 3.2功能要求9 第四章 實作完成9 4.1...

嵌入式系統課程設計題目

2016.5 共同要求 在lcd上顯示設計題目 設計者名字 主設計者在前 常用外設引腳 led led0 上邊 led3 下邊 分別接pf5 pf9引腳,低電平點亮 按鈕 k0 上邊 k3 下邊 分別接pa0 pc13 pa8 pd3引腳,另一端均接地,按下為低電平。蜂鳴器 蜂鳴器beep接pb10...

嵌入式系統基礎課程設計報告

河南機電高等專科學校 嵌入式系統基礎 課程設計報告 設計題目 智慧型循跡小車 系部 電子通訊工程系 專業 醫電 班級 091 學生姓名 程瑞 學號 090411114 成績2011年 06月 嵌入式系統基礎 課程設計任務書 1 時間 2011年06月14日 2011年06月25日 2.課程設計單位 ...