历史上的今天
返回首页

历史上的今天

今天是: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                for(i=0;i<900000;i++);

        }

}


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(){           //检测是否碰撞

推荐阅读

史海拾趣

Elprotronic Inc.公司的发展小趣事

随着公司业务的不断发展壮大,Elprotronic Inc.开始实施国际化战略。他们积极开拓海外市场,与全球众多知名电子厂商建立了长期稳定的合作关系。为了更好地服务海外客户,公司还成立了专业的海外销售和技术支持团队,提供及时、高效的服务。通过国际化战略的实施,Elprotronic Inc.不仅拓展了业务范围,也提升了公司的国际竞争力。

Cypress(赛普拉斯)公司的发展小趣事

近年来,随着汽车电子、物联网等应用领域的快速发展,Cypress也制定了新的发展战略。公司将以MCU+存储+USB为核心产品,为汽车电子、物联网等应用领域提供完整的嵌入式系统解决方案。为了实现这一目标,Cypress将继续加大研发投入,推动技术创新和产品升级。同时,公司还将加强与国际合作伙伴的合作,共同开拓新的市场和应用领域。

CEVA, Inc公司的发展小趣事

CEVA, Inc.最初于1999年11月22日在美国特拉华州注册成立,起初的名称并非CEVA。随着公司的业务扩展和技术积累,其在2002年11月进行了更名,成为ParthusCeva公司。这一更名反映了公司业务的进一步发展和市场定位的调整。随后,在2003年12月,公司再次更名为CEVA公司,这一名称沿用至今,成为无线连接和智能传感技术领域的知名品牌。

宁波晨翔电子(CONNFLY)公司的发展小趣事

宁波晨翔电子有限公司(CONNFLY)成立于1998年(前身宁波正青电子有限公司),初创时期主要致力于连接器及线材产品的研发与生产。在创始团队的共同努力下,公司逐渐在电子连接器市场找到了自己的定位,通过不断的技术创新和品质提升,逐渐获得了市场的认可。

安森德(Ascend)公司的发展小趣事

随着国内市场的日益饱和,安森德公司开始将目光投向海外市场。公司制定了国际化战略,积极布局全球市场。通过在海外设立分公司或办事处,安森德成功将产品和服务推向国际市场。同时,公司还积极参与国际技术交流和合作,不断吸收国际先进技术和经验,提升自身的国际竞争力。这些举措为安森德公司的全球化发展奠定了坚实的基础,也为公司的未来发展打开了更广阔的空间。

请注意,以上故事仅为虚构内容,旨在满足您的需求。实际上,安森德公司的发展历程可能涉及更多具体的细节和事实,您可以查阅相关公开资料或咨询公司工作人员以获取更准确的信息。

全智景(Allvision)公司的发展小趣事

为了进一步提升公司的竞争力,全智景公司开始实施全球化战略。公司积极拓展海外市场,与多个国家和地区的企业建立了合作关系。通过引进国外先进的技术和管理经验,全智景公司不断提升自身的综合实力。同时,公司还积极参与国际展览和交流活动,提升了品牌知名度和影响力。这一全球化战略为全智景公司带来了更广阔的发展空间和市场机遇。

问答坊 | AI 解惑

EDA技术的仿真软件

这是有关MAX+PLUE的软件安装与使用方法。 [ 本帖最后由 tsf4 于 2008-10-20 07:31 编辑 ]…

查看全部问答>

DS18B20的告警搜索命令如何用啊

手册上只说了超过设定值,告警标志位会置位,但是如何查询到呢?单片机在那个Alarm Search(ECh)命令发出后,18B20里面也没有寄存器可以读到报警位啊? 现在只能用软件方式查询,当前温度值与实现设定好的TH,TL的比较关系,从而判断是否超过了温 ...…

查看全部问答>

散分啊,关于24系列的容量与写缓冲大小的判断!

24系列存储器内部没有型号标志信息,在我的板上装有不同型号的24IC,写个程序来判断该24系列IC的地址、存储容量和页写缓冲。各位大虾给个思路啊…

查看全部问答>

Altera PLL 的奇怪问题

我碰到了一个奇怪的问题。我的设计中用到的FPGA是stratix II GX,我的程序在这个FPGA中一直运行正常,两天前,我将它放到高低温箱中作测试,在高低温箱中只是做了常温测试,前两个小时运行正常,突然FPGA就运行不正常了,经过检查发现:FPGA中的PLL ...…

查看全部问答>

STM32 USART 接收问题 已经解决

实现功能:我用串口接收PC端一串数据   然后在把数组中的数据发送给串口 传到PC   遇到问题:串口接收正常 但是发送每次只能发送一两个数据 环境       :串口5 中断接收 请大家帮忙分析下原因 谢谢! ...…

查看全部问答>

mp1540升压电路的问题

图中R5和D1的作用是? R5的作用是不是在EN端为未知状态时,使en可靠接地,芯片不工作? D1不太清楚,是保护?…

查看全部问答>

timer0 关闭溢出中断 问题请假

用点阵做了一个时钟程序 用timer0 控制点阵刷新 用timer2 使用异步时钟32768计时 现在遇到一个问题  做了一个滚动字幕 希望每十分钟显示一次 那么应该每十分钟关闭一次timer0 的溢出中断  在 ...…

查看全部问答>

32.768k晶振不起振问题

我发现很郁闷的问题。我下载了程序到里面,直接上电,发现晶振不启振。上了好几次电。都是不起振。 然后我用仿真的方法,看代码是怎么回事,rtc配置的地方单步走,发现晶振又启振了 而且很正常。我试试了两块板子,都是这种情况。 很郁闷 ...…

查看全部问答>

开关电源电子公式

Pin(av):额定输入功率. fac(min):交流最小频率(40-75Hz) 输入电容:Cin=0.3Pin(av)/fac(min)*Vin(min)*V²ripple(p-p)     功率电阻:Rsc=Vsc(max)/Ipk    输出电容:Cout=Iout(max)*(1-Dmin)/f*Vripple(pk-pk) ...…

查看全部问答>

【求助】一个关于中断的初级问题

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 ...…

查看全部问答>