0

我正在尝试使用 pic 16f877a 和编译器 MikroCpro for pic 模拟一个简单的 pacman 游戏,但我有两个问题,希望有人能提供帮助:1-我不知道如何创建随机水果。我试图使用这段代码:

#include <time.h>
#include <stdlib.h>
srand(time(NULL));
int r = rand(); 

但我不能包括 time.h 所以我只是在固定位置显示水果。

2-以下代码在 pic 模拟器 IDE 上运行良好,但实际上一个怪物在 lcd 而不是水果上不断闪烁。怪物本身动作很好。

// LCD module connections
sbit LCD_RS at PORTD.B2;
sbit LCD_EN at PORTD.B3;
sbit LCD_D4 at PORTD.B4;
sbit LCD_D5 at PORTD.B5;
sbit LCD_D6 at PORTD.B6;
sbit LCD_D7 at PORTD.B7;

sbit LCD_RS_Direction at TRISD.B2;
sbit LCD_EN_Direction at TRISD.B3;
sbit LCD_D4_Direction at TRISD.B4;
sbit LCD_D5_Direction at TRISD.B5;
sbit LCD_D6_Direction at TRISD.B6;
sbit LCD_D7_Direction at TRISD.B7;
// End LCD module connections


char k =0;
char j =1;
const char MonsterMouthOpened[] = {31,23,30,28,24,28,30,31};
const char MonsterMouthClosed[] = {31,23,31,31,24,31,31,31};
const char fruit[] = {0,4,14,31,14,4,0,0};

void MonsterMouth1(char pos_row, char pos_char) {
  char i;
    Lcd_Cmd(64);
    for (i = 0; i<=7; i++) Lcd_Chr_CP(MonsterMouthOpened[i]);
    Lcd_Cmd(_LCD_RETURN_HOME);
    Lcd_Chr(pos_row, pos_char, 0);
}

void MonsterMouth2(char pos_row, char pos_char) {
  char i;
    Lcd_Cmd(64);
    for (i = 0; i<=7; i++) Lcd_Chr_CP(MonsterMouthClosed[i]);
    Lcd_Cmd(_LCD_RETURN_HOME);
    Lcd_Chr(pos_row, pos_char, 0);
}


  void fruit1(char pos_row, char pos_char) {
  char i;
    Lcd_Cmd(64);
    for (i = 0; i<=7; i++) Lcd_Chr_CP(fruit[i]);
    Lcd_Cmd(_LCD_RETURN_HOME);
    Lcd_Chr(pos_row, pos_char, 0);
}
void main(){

  Lcd_Init();                        // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

   while(1)
   {
   if (j==1)
   {
     if(k<8)
    { 
     fruit1(j,8);
     //delay_us(1);
     delay_ms(100);
     }
     else if (k>8)
    {
     fruit1(2,8 );
     //delay_us(1);
     delay_ms(100);
    }
   }
   else if (j==2)
   {
      if(k<8)
    {
     fruit1(j,8);
     //delay_us(1);
     delay_ms(100);
     }
     else if (k>8)
    {
     fruit1(1,8 );
     //delay_us(1);
     delay_ms(100);
    }
   }

   MonsterMouth1(j, k)  ;      
  // delay_us(1);
  delay_ms(100);

   MonsterMouth2(j, k)  ;       
   //delay_us(1);
   delay_ms(100);

   k++;
   Lcd_Cmd(_LCD_CLEAR);

   if((k==16)&&(j==1)) {k=0;
   j=2;}
     else if ((k==16)&&(j==2)) {k=0;
   j=1;}
    }
  }
4

0 回答 0