我正在尝试使用 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;}
}
}