微机原理实训报告书猜数字游戏.docx
《微机原理实训报告书猜数字游戏.docx》由会员分享,可在线阅读,更多相关《微机原理实训报告书猜数字游戏.docx(19页珍藏版)》请在冰点文库上搜索。
微机原理实训报告书猜数字游戏
猜数字游戏
1任务
设计并制作单片机游戏开发平台,包括单片机控制器,显示设备,片外程序存储器,通过平台开发猜数字游戏,具体任务要求如下:
主要组成部分:
游戏开发平台、猜数字游戏的开发、显示设备。
基本要求
1单片机驱动显示屏轮流显示几副游戏图画。
2驱动片外程序存储器读写游戏画面。
3可以通过按键控制显示不同画面。
发挥部分
1单片机实现猜数字游戏。
2可以显示游戏规则。
3合理配置单片机RAM作为显存,开发猜数字游戏,并将程序储存在片外的ROM中。
4其它
2方案设计与论证
考虑到游戏开发系统具有支持猜数字游戏并驱动液晶显示屏,信息编辑、信息转换,信息显示,多种功能。
我们进行了如下方案分析:
2.1处理器的选择方案
采用单片机实现,用程序流程控制实现本系统的功能要求。
我们知道MSP430系列是一个16位的、具有精简指令集的、超低功耗的混合型单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式和较高的处理速度,可以保证编制出高效率的源程序,由于引进了Flash型程序存储器和JTAG技术,不仅使开发工具变得简便,而且价格也相对低廉,能够满足系统的要求。
而在我们学习过单片机中对MCS-51系列的单片机较熟悉,可编程、工作可靠、价格经济、能耗少可以满足驱动视频信号的要求。
考虑到本系统需要编写的程序较多,所以采用具有8kb程序存储器的AT89S52单片机。
我们对c语言较为熟练,所以采用c语言编写程序。
2.2输入设备选择方案
采用自己制作的按键(并集成在开发品台上)输入,采用行列扫描式键盘,并设置专用功能键。
优点是可以方便的设置,缺点是如果按键做的太多则需要扩展I/O口。
本功能实现不需要太多按键,故以上可满足要求。
2.3显示设备的选择
考虑到带中文字库的WGM-12864H是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,完全满足游戏品台的要求且使我们游戏的开发过程更加方便。
3总体设计方案框图
3.1系统的总体结构如下图所示:
本系统的硬件核心是单片机,关键的技术是程序流程的控制和软件编码、解码技术,。
3.2系统工作原理
游戏开发系统由按键控制程序流程,开发平台控制系统的工作方式,并处理数据,将数据送至显示屏显示。
4系统的电路设计及硬件实现
4.1系统的电路图设计
图4-1
4.2单片机的介绍
AT89S52单片机是系统中的控制核心,它是个低电压,高性能CMOS8位单片机,AT89S52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
其封装及引脚图如图4-3:
主要功能特性:
兼容MCS51指令系统
8k可反复擦写(>1000次)FlashROM
32个双向I/O口
256x8bit内部RAM
3个16位可编程定时/计数器中断
时钟频率0-24MHz
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗空闲和掉电模式
软件设置睡眠和唤醒功能
图4-3
WGM-12864H是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
0
1
返回指令:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
0
0
1
X
光标或整体移位指令
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
1
S/C
R/L
X
X
S/CR/L操作
00光标左移,AC减1
01光标右移,AC加1
10所有显示左移
11所有显示右移
光标显示及光标闪烁指令
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
0
0
0
0
1
D
C
B
D=1整体显示打开D=0整体显示关闭
C=1光标显示开C=0不显示光标
B=1光标闪烁B=0光标不闪烁
5系统软件的设计(功能的实现)
5.1控制游戏平台的实现
本系统的功能主要是由平台上的按键通过游戏平台,逐步实现各个功能。
软件的设计思路是单片机时刻扫描键盘,如有键按下,进入到解码程序,入到程序散转表,去执行各个功能控制程序。
程序流程图如图5-1:
图5-1
6程序代码
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineDATP0
#defineINPUTP1
voidWRI(uchara);
voidWRD(ucharb);
voiddisplay_picture();
voiddisplay_word(ucharrow1,ucharline1,uchar*p,uintfirst,ucharlast);
voiddelay(uintc);
voidclose();
voidkey();//判断键值子程序
bitstart_key();//扫描键盘子程序
voidnumber_key();//扫描键盘子程序
voidE_START(void);
voidE_EXIT(void);
voidbegin(void);
sbitRS=P2^0;
sbitE=P2^1;
sbitE_close=P3^0;
ucharcodebuf[1024]={
0x00,0x00,0x1F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xFF,0xFF,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,
0x00,0x00,0x7F,0xFF,0xFF,0x80,0x00,0x00,0x07,0x00,0x00,0x60,0x00,0x00,0xF8,0x00,
0x00,0x00,0x7F,0xFF,0xFF,0xC0,0x00,0x03,0x87,0x80,0x00,0x60,0x00,0x00,0x7F,0xC0,
0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x00,0x03,0xCF,0xC0,0x00,0x79,0xC0,0x01,0xFC,0xE0,
0x00,0x00,0xFF,0xFF,0xFF,0xF0,0x00,0x3F,0xFE,0x00,0x00,0x7F,0xC0,0x0F,0xFD,0xE0,
0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0x1F,0x00,0x07,0xFB,0xC0,0x0C,0x1F,0xE0,
0x00,0x0F,0xFF,0xFF,0xFF,0xF8,0x00,0x0F,0x3F,0x00,0x0F,0xFE,0xC0,0x0C,0x1F,0x00,
0x00,0x3F,0xFF,0xFF,0xFF,0xF8,0x00,0x1F,0x3F,0xF0,0x0F,0xED,0x80,0x1C,0x7E,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0xFC,0x00,0x1E,0x3F,0xF8,0x0F,0xFF,0x00,0x1D,0xEE,0x00,
0x00,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x3F,0xFB,0x00,0x03,0xEF,0x80,0x19,0xDC,0x00,
0x01,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x77,0xFF,0x80,0x0F,0xF9,0xE0,0x18,0x78,0x00,
0x03,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x0E,0x1F,0xC0,0x3F,0xF0,0x60,0x00,0x7F,0x00,
0x07,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x1E,0x3F,0xC0,0x3B,0xFF,0xE0,0x00,0xFF,0x80,
0x07,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x3E,0x37,0xC0,0x07,0xF3,0xE0,0x03,0xFF,0x80,
0x0F,0xFF,0xF0,0x0F,0xFF,0xFE,0x00,0x3E,0x3F,0xC0,0x1F,0xFB,0xF8,0x07,0xEE,0x00,
0x1F,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x06,0x3F,0xC0,0x1B,0xDF,0x3C,0x07,0x86,0x00,
0x1F,0xFC,0x00,0x00,0x3F,0xFF,0x00,0x06,0x33,0xC0,0x1B,0xD8,0x1C,0x03,0x06,0x00,
0x1F,0xF8,0x00,0x00,0x0F,0xFF,0x00,0x06,0x33,0xC0,0x0F,0xF0,0x0C,0x03,0x0E,0x00,
0x3F,0xF0,0x00,0x00,0x07,0xFF,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x01,0xCC,0x00,
0x3F,0xC0,0x00,0x00,0x03,0xFF,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0xFC,0x00,
0x3F,0xC0,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,
0x7F,0xBF,0xC0,0x03,0xFC,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0x60,0xE0,0x07,0x06,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xC0,0x30,0x0C,0x01,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7E,0xEF,0x80,0x00,0xF3,0x7F,0x00,0x00,0x00,0x00,0x70,0x00,0x06,0x00,0x00,0x00,
0x7E,0x7F,0xC0,0x03,0xFE,0x3F,0x80,0x00,0x00,0xC0,0xF8,0x00,0x07,0x80,0x00,0x00,
0x7E,0x78,0xE0,0x07,0x0E,0x3F,0xC0,0x00,0x00,0x7F,0xB8,0x00,0x01,0xDE,0x00,0x00,
0x7C,0x6F,0x30,0x0E,0xF7,0x3F,0xE0,0x00,0x00,0x7F,0xFE,0x00,0x01,0xC7,0x00,0x00,
0x3C,0xDF,0xB8,0x0D,0xFB,0x1F,0xFE,0x00,0x00,0x7E,0x7E,0x00,0x00,0xFC,0x00,0x00,
0x3C,0xDF,0xD8,0x0D,0xFF,0x9F,0xFE,0x00,0x06,0x0F,0xFC,0x00,0x1E,0xFC,0x00,0x00,
0x3C,0xDF,0xD8,0x0F,0xFD,0x9F,0xFE,0x00,0x07,0x1F,0xFC,0x00,0x3E,0xF8,0x00,0x00,
0x3C,0xDF,0xD8,0x0D,0xFF,0xBF,0xFC,0x00,0x03,0xFF,0xFE,0x00,0xFF,0xF8,0x00,0x00,
0x1C,0xDF,0xB8,0x0D,0xFB,0x3F,0xF8,0x00,0x03,0xFF,0xFC,0x00,0x3F,0xFC,0x00,0x00,
0x1E,0x6F,0x30,0x0E,0xF7,0x7F,0xF0,0x00,0x03,0xFF,0xB8,0x03,0xFC,0x3C,0x00,0x00,
0x0F,0x78,0xE0,0x07,0x0E,0x7F,0xC0,0x00,0x03,0xFF,0xBE,0x07,0xFC,0x3C,0x00,0x00,
0x0F,0xBF,0xC0,0x03,0xFC,0xFE,0x00,0x00,0x03,0x7F,0xFF,0x06,0x3E,0x78,0x00,0x00,
0x07,0xCF,0x8E,0x30,0xF1,0xF0,0x00,0x00,0x03,0xFB,0xFF,0x06,0x7E,0xF8,0x00,0x00,
0x03,0xE0,0x07,0xF0,0x03,0xE0,0x00,0x00,0x03,0xDF,0xBC,0x07,0xF7,0xDC,0x00,0x00,
0x03,0xF0,0x03,0xE0,0x07,0xC0,0x00,0x00,0x03,0xDF,0x8C,0x03,0xE3,0x0E,0xC0,0x00,
0x01,0xF8,0x00,0x00,0x1F,0x80,0x00,0x00,0x01,0xDD,0x8C,0x00,0x00,0x07,0xC0,0x00,
0x00,0xFE,0x00,0x00,0x7F,0x00,0x00,0x00,0x01,0x81,0xDC,0x00,0x00,0x07,0xC0,0x00,
0x00,0x7F,0xC0,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x03,0xC0,0x00,
0x00,0x7F,0xFE,0x3F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFC,0xFF,0xFF,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0xF9,0xFF,0xFF,0x9F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0xFF,0xFF,0xF3,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0xFF,0xFF,0xF4,0xBF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0xFF,0xFF,0xF0,0x3F,0xF0,0x00,0x1C,0x00,0x00,0x00,0x00,0x03,0xF0,0x18,0x00,
0x0F,0xFF,0xF8,0x88,0x7F,0xF0,0x00,0x32,0x60,0x00,0xC0,0x00,0x01,0x90,0x19,0x80,
0x03,0xFF,0xF0,0x0F,0xFF,0xE0,0x00,0x30,0x60,0x00,0xC0,0x00,0x01,0xA0,0x01,0x80,
0x03,0xFF,0xF0,0x4F,0xFE,0xC0,0x00,0x3C,0xF7,0x3F,0xE0,0x00,0x01,0xEE,0xFB,0xC0,
0x03,0xBF,0xF1,0x9F,0xFC,0xE0,0x00,0x1E,0x69,0x9A,0xC0,0x00,0x01,0xA7,0x19,0x80,
0x03,0xBF,0xF7,0x9F,0xFC,0xE0,0x00,0x06,0x67,0x98,0xC0,0x00,0x01,0x83,0x19,0x80,
0x03,0x3F,0xFF,0xFF,0xFC,0xE0,0x00,0x26,0x6D,0x98,0xC0,0x00,0x01,0x93,0x99,0x80,
0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x1C,0x77,0xFC,0xE0,0x00,0x03,0xFD,0xFD,0xC0,
0x03,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xE1,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x77,0x71,0x80,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x62,0x19,0x80,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
ucharcodeword[16]={"****************"};
ucharcodeword1[10]={"猜数字游戏"};
ucharcodeword2[5]={"Start"};
ucharcodeword3[4]={"Exit"};
uchardata1,k;
ucharshuzu[4];
bitstart_flag;//1开始,0退出
/****************************************/
/****************************************/
/***********猜数字游戏核心程序***********/
/****************************************/
/****************************************/
//关机程序
//----------------------------------------
voidclose(){
E_close=0;//关机
}
//开始游戏
//--------------------------------------------
voidbegin(void)
{ucharxian[5];
ucharm;
ucharn;
for(m=0;m{
shuzu[0]=rand()%10;
}
shuzu[0]=rand()%10;
shuzu[1]=0;
shuzu[2]=0;
shuzu[3]=0;
for(m=1;m<4;m++)
{
Nextnum:
shuzu[m]=rand()%10;
for(n=0;n{
if(shuzu[n]==shuzu[m]){gotoNextnum;}
}
}
xian[0]=shuzu[0]+48;
xian[1]=shuzu[1]+48;
xian[2]=shuzu[2]+48;
xian[3]=shuzu[3]+48;
xian[4]=""+48;
WRI(0x01);//清屏显
display_word(4,1,xian,0,4);//答案显示
}
/****************************************/
/****************************************/
/*************LCD12864驱动程序***********/
/****************************************/
/****************************************/
//绘图程序
voiddisplay_picture()
{//蝴蝶
uchari,j,k;
WRI(0x01);//清屏显示
WRI(0x32);//绘图显示开
WRI(0x0c);//显示打开,光标关,显示反白关
WRI(0x36);//功能设置为扩充指令集
for(k=0;k<2;k++)
{
for(i=0;i<32;i++)
{
WRI(0x80+i);
WRI(0x80+k*8);
for(j=0;j<16;j++)
{
WRD(buf[k*512+i*16+j]);
}
}
}
}
//显示字符程序
//===============================
voiddisplay_word(ucharrow1,ucharline1,uchar*p,uintfirst,ucharlast)
{
uintm;
WRI(0x30);//功能设置为基本指令集
WRI(0x0f);//显示打开,光标关,显示反白关
WRI(0x06);//DDRAM地址计数器(AC)加1
switch(r