历史上的今天
今天是:2024年11月26日(星期二)
2019年11月26日 | 基于LPC1768的俄罗斯方块源代码,配合3.2寸TFT屏幕
2019-11-26 来源:51hei
程序运行后,用板子上的五向按键控制。
单片机源程序如下:
#include #include #include "lcd_api.h" #include "ili_lcd_general.h" #include "LPC17xx.h" typedef struct //方块结构体,包括类型,状态,坐标,颜色 { uint8_t type; //方块的类型(LJITOSZ) uint8_t state; //方块的状态(0、90、180、270°旋转) int16_t x,y; //方块的坐标 uint8_t colorType; //颜色类型 }BOX; const uint8_t box[56]= //方块数组,包括七种方块,每种四种状态 { 0x80,0x0e,0x46,0x04,0x70,0x01,0x20,0x62,/*J*/ 0x20,0x0e,0x44,0x06,0x70,0x04,0x60,0x22,/*L*/ 0x60,0x0c,0x64,0x02,0x30,0x06,0x40,0x26,/*s*/ 0xc0,0x06,0x62,0x04,0x60,0x03,0x20,0x46,/*z*/ 0x40,0x0e,0x64,0x04,0x70,0x02,0x20,0x26,/*T*/ 0x44,0x44,0xf0,0x00,0x22,0x22,0x00,0x0f,/*I*/ 0xc0,0x0c,0x66,0x00,0x30,0x03,0x00,0x66,/*O*/ }; uint8_t map[10][20]; //地图数组,包括二十行十列,存方块的颜色类型 const int colors[]={0,Blue,Red,Magenta,Green,Yellow}; //颜色数组,声明要用到的颜色 BOX this,next; // 定义两个结构变量,当前方块和下个方块 uint16_t score=0; //全局变量总分 uint8_t toButtom,downTimes; //标记是否落到底 void mapInit(){ //初始化地图 lcd_Initializtion(); DrawYLine(161,0,319,Red); WriteChineseString(176,32,0,3,White,Black); WriteChineseString(176,160,3,3,White,Black); WriteEnglishString(176,192,"00000",White,Black); } void showScore(){ //显示总分函数 WriteEnglishWord(176,192,score/10000+48,White,Black); WriteEnglishWord(184,192,(score/1000)%10+48,White,Black); WriteEnglishWord(192,192,(score/100)%10+48,White,Black); WriteEnglishWord(200,192,(score/10)%10+48,White,Black); WriteEnglishWord(208,192,score%10+48,White,Black); } void delay(uint8_t k){ //延时函数 int i,j; for(j=0;j } } void disBox(BOX b){ //显示方块函数,参数是一个BOX uint8_t i,j,k,l; i=b.type*8+b.state*2; l=box[i]; for(j=0;j<2;j++){ for(k=0;k<4;k++){ if(l&0x01){ DrawBox(b.x+k,b.y+j,colors[b.colorType]); if(b.x!=11){ map[b.x+k][b.y+j]=b.colorType; } } l>>=1; } } l=box[i+1]; for(j=0;j<2;j++){ for(k=0;k<4;k++){ if(l&0x01){ DrawBox(b.x+k,b.y+j+2,colors[b.colorType]); if(b.x!=11){ map[b.x+k][b.y+j+2]=b.colorType; } } l>>=1; } } } void clearBox(){ //清除方块函数 uint8_t i,j,k,l; i=this.type*8+this.state*2; l=box[i]; for(j=0;j<2;j++){ for(k=0;k<4;k++){ if(l&0x01){ CoverBox(this.x+k,this.y+j); map[this.x+k][this.y+j]=0; } l>>=1; } } l=box[i+1]; for(j=0;j<2;j++){ for(k=0;k<4;k++){ if(l&0x01){ CoverBox(this.x+k,this.y+j+2); map[this.x+k][this.y+j+2]=0; } l>>=1; } } } void clearNext(){ //清除下一个函数 uint8_t x,y; for(x=11;x<15;x++){ for(y=5;y<9;y++){ CoverBox(x,y); } } } void createNext(){ //创建下一个函数 clearNext(); next.x=11; next.y=5; next.colorType=rand()%5+1; //随机颜色 next.type=rand()%7; //随机种类 next.state=rand()%4; //随机状态 disBox(next); } int16_t checkCrack(){ //检测是否碰撞
史海拾趣
|
手册上只说了超过设定值,告警标志位会置位,但是如何查询到呢?单片机在那个Alarm Search(ECh)命令发出后,18B20里面也没有寄存器可以读到报警位啊? 现在只能用软件方式查询,当前温度值与实现设定好的TH,TL的比较关系,从而判断是否超过了温 ...… 查看全部问答> |
|
24系列存储器内部没有型号标志信息,在我的板上装有不同型号的24IC,写个程序来判断该24系列IC的地址、存储容量和页写缓冲。各位大虾给个思路啊… 查看全部问答> |
|
我碰到了一个奇怪的问题。我的设计中用到的FPGA是stratix II GX,我的程序在这个FPGA中一直运行正常,两天前,我将它放到高低温箱中作测试,在高低温箱中只是做了常温测试,前两个小时运行正常,突然FPGA就运行不正常了,经过检查发现:FPGA中的PLL ...… 查看全部问答> |
|
实现功能:我用串口接收PC端一串数据 然后在把数组中的数据发送给串口 传到PC 遇到问题:串口接收正常 但是发送每次只能发送一两个数据 环境 :串口5 中断接收 请大家帮忙分析下原因 谢谢! ...… 查看全部问答> |
|
用点阵做了一个时钟程序 用timer0 控制点阵刷新 用timer2 使用异步时钟32768计时 现在遇到一个问题 做了一个滚动字幕 希望每十分钟显示一次 那么应该每十分钟关闭一次timer0 的溢出中断 在 ...… 查看全部问答> |
|
我发现很郁闷的问题。我下载了程序到里面,直接上电,发现晶振不启振。上了好几次电。都是不起振。 然后我用仿真的方法,看代码是怎么回事,rtc配置的地方单步走,发现晶振又启振了 而且很正常。我试试了两块板子,都是这种情况。 很郁闷 ...… 查看全部问答> |
|
interrupt[PORT2_VECTOR] void Port2(void) { LcdMain(); } 这个是我的中断服务程序,可是编译出错,显示 Error[Pe077]:this declaration has no storage class or type specifier Error[Pe065]:expected a ";" Warning[Pe012]:parsin ...… 查看全部问答> |




