Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1846|回复: 8

20光信本1高译婕组:打地鼠游戏

[复制链接]

2

主题

3

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2022-11-3 20:39:01 | 显示全部楼层 |阅读模式
仿真负责人:高译婕
  1. #include<reg51.h>
  2. #include<stdlib.h>
  3. unsigned char holenum;        //保存随机生成的洞号
  4.   /*unsigned char code hole[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//P3口控制的洞*/
  5. unsigned char temp;                //随机数种子
  6. unsigned char result;        //随机数临时变量
  7. unsigned char score=0;        //保存临时分数
  8. unsigned char num;                //1秒钟判断变量
  9. unsigned char time;                //保存时间(30秒倒计时)
  10. unsigned char flag2;
  11. unsigned char flag4;        //1标识关卡时间到
  12. unsigned char flag5;        //1标志暂停
  13. unsigned int flag=0;
  14. unsigned int stop=0;
  15. unsigned char flag1;        //1标识得分,led全灭,不进行scankey操作
  16. unsigned char KeyValue=8;
  17. unsigned char randomValue=9;
  18.          #define key_port P3
  19.   sbit key1=P2^4;
  20.   sbit key2=P2^3;//打到地鼠指示灯
  21.   #define key1_on 0
  22.   #define key2_off 0
  23.   sbit  Speak=P2^6;
  24. void delayms(unsigned int xms)        //延时xms 毫秒
  25. {
  26.         unsigned int i,j;
  27.         for(i=xms; i>0; i--)
  28.         for(j=110; j>0; j--);
  29. }
  30.           /*void playBuzzer()
  31. {
  32.           unsigned int i;
  33.         if(flag2==1)  //得分响
  34.         {
  35.            for(i=0;i<20;i++)
  36.             {
  37.                 delayms(1);
  38.               }
  39.         Buzzer=0;delayms(500);Buzzer=1;delayms(100);          }} */
  40. void         delay(unsigned int z)
  41.   {
  42.   unsigned int x,y;
  43.   for(x=110;x>0;x--)
  44.   for(y=z;y>0;y--);

  45.   }
  46. void playBuzzer()
  47. {
  48.           unsigned i;
  49.         if(P3==0x00)  //得分响
  50.         {
  51.            for(i=0;i<20;i++)
  52.             {        Speak=1;
  53.                     delayms(1);                        
  54.                     Speak=0;
  55.                         delayms(1);
  56.               }
  57.         Speak=1;delayms(500);                  
  58.         }
  59.         else
  60.         {
  61.                
  62.         }

  63. }


  64. void scankey()                                        //扫描按键,判断是否得分{   
  65.     {
  66.     if(P3==0x00)//打中地鼠
  67.     {         
  68. //                delayms(10);
  69.                 /*flag1=1;   //标志得分不进行scankey
  70.                 flag2=1;*/
  71.                
  72.                 score=score+1;
  73.         while(P3==0x00);
  74. //                P3=0x00;
  75. }                                       

  76.    
  77.         
  78. }

  79.   unsigned char random()                //随机数
  80. {
  81.         temp++;
  82.         result=rand()%8+1;
  83.         
  84.         return result;

  85. }


  86. void displayhole()                          //hole地鼠显示
  87. {
  88.         P3=0x88;
  89.         holenum=random();
  90.         if(holenum==0)
  91.                 holenum++;
  92.                
  93.         switch(holenum)
  94.         {
  95.                 case 0:     break;
  96.                 case 1:     P3=0x01;
  97.                             delay(2000);
  98.                
  99.                             break;
  100.                 case 2:                          //1号洞亮
  101.                         
  102.                                 P3=0x02;
  103.                                 delay(2000);
  104.                                 break;           
  105.                 case 3:                                 //2号洞亮
  106.                                 
  107.                                 P3=0X08;
  108.                                 delay(2000);
  109.                                 break;           
  110.                 case 4:                                 //3号洞亮
  111.                                 
  112.                                 P3=0X04;
  113.                                 delay(2000)  ;
  114.                                 break;           
  115.                 case 5:                                 //4号洞亮
  116.                                 
  117.                                 P3=0X10;
  118.                                 delay(2000);
  119.                                 break;           
  120.                 case 6:                                 //5号洞亮
  121.                         
  122.                                 P3=0X20;
  123.                                 delay(2000);
  124.                                 break;           
  125.                 case 7:                                 //6号洞亮
  126.                                 
  127.                                 P3=0X40;
  128.                                 delay(2000);
  129.                                 break;           
  130.                 case 8:                                //7号洞亮
  131.                         
  132.                                 P3=0X80;
  133.                                 delay(2000);
  134.                                 break;           
  135.          
  136.         }  
  137. }


  138.     void Gameinit()
  139.     {
  140.     flag1=0;//scankey标识
  141.     score=0;
  142.     }

  143. void main()
  144. {
  145.    TMOD = 0x10;
  146.    EA=1;
  147.    ET1=1;
  148.    TH1=(65536-50000)/256;
  149.    TL1=(65536-50000)%256;
  150.    TR1=1;
  151.    Gameinit();
  152.    if(key1==key1_on)
  153.    {
  154.         delay(2);
  155.         if(key1==key1_on)
  156.         {
  157.             while(1)
  158.             {   
  159. //                scankey();
  160.                         
  161.                 random();
  162.                 displayhole();        
  163.                 if(score>=8)
  164.                 {
  165.                 P3=0xff;  delayms(1);        
  166.                 break;
  167.                 }
  168.                 else if(stop==1)
  169.                 {
  170.                 break;
  171.                 }   
  172. //   if(key2==key2_off)
  173. //   {break;}
  174.             }

  175.     }
  176. }
  177. }

  178. void timer1(void) interrupt 3
  179. {
  180.   TH1=(65536-50000)/256;
  181.    TL1=(65536-50000)%256;
  182.    scankey();
  183.    flag++;
  184.    if(flag==600)
  185.    {
  186.      stop=1;
  187.    }        
  188. }

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-4 22:38:08 | 显示全部楼层
代码规范性有待提高,总的看来做的不错
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-8 23:23:04 | 显示全部楼层



论文还是要好好写呀。。。。不能太敷衍。。。。好好改,改好再答辩,除了我标出来的,其他地方也好好看看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-24 10:41:51 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-11-24 22:25:39 | 显示全部楼层
本帖最后由 2022601932 于 2022-11-24 22:39 编辑

这次一定行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-24 23:41:59 | 显示全部楼层
图注有些混乱,改了就差不多了,可以打印了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-11-25 19:18:22 | 显示全部楼层
演讲PPT

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-25 23:59:55 | 显示全部楼层
好,结贴勿回
回复

使用道具 举报

2

主题

3

帖子

30

积分

新手上路

Rank: 1

积分
30
 楼主| 发表于 2023-3-14 13:05:20 | 显示全部楼层
1.按键如何产生随机函数?答:利用random函数,来产生随机数控制LED小灯随机亮。
2.仿真中P2.3P2.4两个开关代表什么?答:P2.3代表游戏开始,P2.4代表游戏暂停中断。
3.如何解决电源问题?答:使用电源线采取直接充电形式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-6-8 10:58 , Processed in 0.039813 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表