历史上的今天
返回首页

历史上的今天

今天是:2025年01月31日(星期五)

2020年01月31日 | 基于51单片机的跳一跳小游戏 源程序

2020-01-31 来源:51hei

这段时间学习了LCD12864的无字库使用方法,借此设计了一个单片机跳一跳小游戏
主要功能:控制火材人跳动,判断是否跳在地板上。

不多说直接上图:

仿真原理图如下
总电图图
 


游戏电路图:
 


LED控制电路图:
 


蜂鸣器电路图:
 


总流程图:
 


游戏界面:
 

单片机源程序如下:

#include "main.h"

unsigned char BGM_choose=1;

//人物,地板的信息

/* ***************************************************** */

extern unsigned char mosaic_j1[3];

extern unsigned char mosaic_width1[3];

extern unsigned char mosaic_j2[3];

extern unsigned char mosaic_width2[3];

extern unsigned char NPC_page,NPC_column; 

extern bit NPC_xuli_judge; //判断递增与递减

/* ***************************************************** */


void main()

{

unsigned char i=NOSURE;

LCD12864_winit();           //LCD12864初始化

TOOL_randInit();             //随机数初始化

BGM_init();           //BGM初始化


show_start();                     //开始界面

//按键按下进入游戏

while(!KEY_Scan()==KEY0SURE);

                  

show_youxi();                     //游戏界面


//显示火材人

NPC_page=diban_fir-1;

NPC_column=mosaic_j1[show_judgewei(diban_fir)];

show_NPC(NPC_page,NPC_column,NPC_huo); 

//游戏BGM

BGM_choose=2;

        

while(1)

{

        BGM_choose=2;

if(KEY_Scan()==LONGTIME_START)

{

  show_NPC(NPC_page,NPC_column,NPC_dun);             //火材人蹲

  if(KEY0_CLR)

  {

     i=LONGTIME_START;

     while(i!=NOSURE)

         {

           if(i==KEY0_LSURE)

           {

            if(NPC_xuli_judge)   {show_NPC_xuli(xuli_inc);}                 //火材人蓄力

                              else                 {show_NPC_xuli(xuli_desc);}   

           }         

           i=KEY_Scanlongtime();

         } 

          show_NPC(NPC_page,NPC_column,NPC_disp);  //火材人消失

          NPC_move();                                                                        //火材人位置移动

          show_NPC(NPC_page,NPC_column,NPC_huo);   //火材人显示

          show_NPC_xuli(xuli_disp);                                   //火材人蓄力消失

          if(!game_judge())                                                       //游戏结束判断

          {

                BGM_choose=3;                      //BGM3

          game_over();                       //游戏结束显示

          while(KEY_Scan()==NOSURE);

          show_youxi();                                   //游戏界面刷新


                                       //显示火材人

    NPC_page=diban_fir-1;

    NPC_column=mosaic_j1[show_judgewei(diban_fir)];

    show_NPC(NPC_page,NPC_column,NPC_huo);

          }


  }

  else {show_NPC(NPC_page,NPC_column,NPC_huo);}

}    

}

}



//BGM

/* ***************************************************** */

//BGM初始化

void BGM_init()

{

    TMOD=0x21;        //设置定时器0 16位计数

    TL0 =(-1000)%256;                //设置定时初值

    TH0 =(-1000)/256;                //设置定时初值

    EA=1;ET0=1;TR0=1;

          BGM=0;BGM1=0;

}


void BGM_time0(void) interrupt 1

{

        static unsigned char count=0;

  if(BGM_choose==1)           //游戏开始

        {

          TL0 =(-30000)%256;                //设置定时初值

    TH0 =(-30000)/256;                //设置定时初值

                count++;

                if(count==10){BGM=0;BGM1=1;}

          if(count==30){BGM=1;BGM1=0;}

                if(count==38){BGM=0;BGM1=1;}

                if(count==40){BGM=0;BGM1=0;}

                if(count==50){BGM=0;BGM1=0;count=0;}

        }                

  if(BGM_choose==2)           //游戏

        {

          TL0 =(-20000)%256;                //设置定时初值

    TH0 =(-20000)/256;                //设置定时初值

                count++;

                if(count==10){BGM=0;BGM1=1;}

                if(count==20){BGM=1;BGM1=0;count=0;}

        }        

        

         if(BGM_choose==3)           //游戏结束

        {

          TL0 =(-50000)%256;                //设置定时初值

    TH0 =(-50000)/256;                //设置定时初值

                count++;

                if(count==10){BGM=0;BGM1=1;}

                if(count==20){BGM=0;BGM1=0;count=0;}

        }

}


推荐阅读

史海拾趣

Display Elektronik GmbH公司的发展小趣事

面对数字化浪潮的冲击,Display Elektronik GmbH积极拥抱数字化转型。公司利用大数据、云计算等先进技术,实现了生产、销售、服务等各个环节的数字化管理。这种数字化转型不仅提高了公司的运营效率和管理水平,还为客户提供了更加便捷、高效的服务体验。在数字化转型的推动下,Display Elektronik GmbH的竞争力得到了显著提升。

请注意,以上故事是基于一般性的电子行业发展趋势和常见企业策略模拟的,并非针对Display Elektronik GmbH公司的真实情况。

ALCOA公司的发展小趣事

第一次世界大战期间,铝因其轻质且强度高的特性,被广泛应用于航空和汽车工业。ALCOA公司借此机会迅速发展壮大,为军方和汽车制造商提供了大量的铝材。这种需求推动了公司的技术进步和生产规模的扩大,也奠定了ALCOA在电子行业中的领先地位。

Atlantic Microwave Ltd公司的发展小趣事

随着电子行业的快速发展,Atlantic Microwave Ltd公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。公司投入大量研发资金,吸引了一批优秀的科研人才,专注于微波技术的研发与创新。经过数年的努力,公司成功推出了一款具有颠覆性的微波产品,凭借其卓越的性能和稳定性,迅速获得了市场的认可,为公司带来了可观的收益。

Aptina (ON Semiconductor)公司的发展小趣事

值得一提的是,Aptina曾与索尼达成了一项专利交叉许可协议。这一协议不仅加强了双方的技术合作,还促进了双方在图像传感器领域的共同发展。通过共享专利资源,Aptina得以进一步拓展其产品线,提升产品质量,巩固市场地位。

DURATOOL公司的发展小趣事

随着环保意识的不断提高,绿色、环保、低碳已成为全球经济发展的重要趋势。DURATOOL公司积极响应这一趋势,致力于研发和生产绿色环保的电子工具产品。公司采用环保材料和工艺生产产品,减少了对环境的污染和破坏。同时,公司还积极开展环保宣传和公益活动,引导消费者树立绿色消费观念。这些举措不仅提升了DURATOOL公司的社会形象,也为其在未来的市场竞争中赢得了先机。

CONTTEK Group GmbH公司的发展小趣事

CONTTEK Group GmbH公司的创立,标志着电子行业内一颗璀璨的新星开始崭露头角。公司在创立初期,便凭借对市场的敏锐洞察力和对技术的深刻理解,确立了在电子连接器领域的专业地位。通过引进先进的生产设备和技术人才,公司成功开发出了一系列高质量、高性能的连接器产品,并逐渐在市场中获得了认可。

问答坊 | AI 解惑

2008年英特尔杯大学生电子设计竞赛—嵌入式系统专题邀请赛一等奖作品

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 参赛学校杭州电子科技大学   指导教师申兴发   参赛队员张斌吴积冰陈宁   作品题目   (中英文对照)嵌入式自主跟踪系统-球童机器人   Embedded Autonomous Tracking System -Caddie Ro ...…

查看全部问答>

运算放大器的增益误差对DAC性能的影响

假设DAC使用了一个反相运算放大器,C1=C2,A(0)=1000,若VREF=1V,问DAC在最怀情况下的最大精度? 反相放大器的环路增益=0.5×1000=500,因此增益误差为1/501=0.002。增益误差应该小于±0.5LSB,表示为: 增益误差=0.002…

查看全部问答>

驳关于STC89的一些咵噪

网上对STC的评价并不是很好,于是斗胆尝试了一把,到现在还是没有发现什么问题 我用的是89C58…

查看全部问答>

求问关于WINCE 键盘锁定和解锁的问题

wince提供解锁某个键的函数API么? 解锁方面的API有么? 谢谢…

查看全部问答>

在CE下怎么对光驱进行操作?

如题,我想用EVC编程对光驱在CE下进行操作。…

查看全部问答>

【讨论】关于FLASH的问题

我在做写入flash的时候写入的是113个字节的数据,A段的从1000开始写的!!! 我把要写入的数据建立在一个结构里了!!! 可是写完以后读的时候总是后写入的两个读出的是0;如果写入的少的话,比如我写50个字节那么 就有最后1个读出是0;我想问问 ...…

查看全部问答>

求助!!MPS430F149驱动电机时候总死机

用F149驱动继电器结合驱动380V三相电机 利用两极继电器 中间采用光耦驱动第一级继电器 第一级继电器再控制第二级380继电器 上高压电时继电器结合 电机转 然后单片机就死机 求助!!!…

查看全部问答>

看到一款平板电脑,用TI的OMP4430----居然只要¥1500元

下面是那个厂家的广告单........如果又要买平板的兄弟真的可以考虑   …

查看全部问答>

为什么我的开发板下载郭天祥的程序没用

这个开发板是去年在淘宝上买的,放那里一直没动,最近想学了,所以拿出来看看,在百度文库里有这个开发板的详细介绍,下面是地址http://wenku.baidu.com/view/0878e189680203d8ce2f249a.html单片机的型号是STC 90C516RD+郭天祥视频教程里面的程序下 ...…

查看全部问答>

使用DTC进行ADC10转换后如何将存入RAM中的数据提取出来?

我用的芯片是G2553,使用DTC进行单通道多次转换后将数据存入RAM,现在准备将RAM中的内容提取出来,应是用什么方法?设数组取首地址0x200? 另外,如果我使用的是序列通道多次转换(32次),A1,A2,DTC将结果存入RAM中,0x200-0x400中存放的是A2的 ...…

查看全部问答>