⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51_2_ansi.c

📁 单片机控制实现几个小游戏:贪吃蛇、俄罗斯方块、推箱子
💻 C
字号:
#ifndef __C51_2_ANSI_C__
#define __C51_2_ANSI_C__
#include "C51_2_ANSI.h"

void cpu_inti(void)
{
//处理器初始化
	TRISA=0x00;TRISB=0xFF;TRISC=0x00;TRISD=0x00;//口线初始化
	GIE=1;//中断允许
	TMR1H=DISPLAY_TIME_H;//显示器刷新初始化
	TMR1L=DISPLAY_TIME_L;
	T1CON=1;//开启时钟
	TMR1IE=1;//开启时钟中断
	PEIE=1;	//开启时钟外部中断
	OPTION=0x7F;//B口弱上拉有效
	PORTB=0X00;//B口输入配置初始化
	INTE=1;INTEDG=0;//外部中断允许
	INTF=0;		//清外部中断
	T0CS=0;PSA=1;T0IE=0;//开启时钟,用于随机数
//处理器初始化
}

void interrupt display_refresh(void) //中断服务程序	//键盘中断,25uS注意这里算法要尽量简单,否则影响主机延时时间
{	
	if (TMR1IE && TMR1IF) //判时钟中断
	{
			TMR1IF=0;//清除时钟中断
			TMR1H  = DISPLAY_TIME_H;  // load timer 1 high byte下次刷新
			TMR1L  = DISPLAY_TIME_L;  // load timer 1 low byte
			display_enable=DISPLAY_OFF;		//关闭显示
			if(buffer_y==15)
				{//此处刷了一屏
					buffer_y=0;//显示完一屏重新开始
					if((flash_status==FLASH_YES_TIME)&(!flash_time))flash_status=NO_FLASH;
					flash_ctrl+=flash_fre_ctrl;flash_time--;
				}
			else 
			buffer_y++;
			if(flash_status)
				if(flash_ctrl>FLASH_WIDTH)//闪烁的代码
					r595_send_data(displaybuffer_16mux16[buffer_y]&~flash_displaybuffer[buffer_y]);
				else 
					r595_send_data(displaybuffer_16mux16[buffer_y]|flash_displaybuffer[buffer_y]);
			else//不闪烁的代码
				r595_send_data(displaybuffer_16mux16[buffer_y]);//送显示数据
			PIONT_Y=buffer_y;						//显示第buffer_y行
			LED_EN_PORT=SEG_7_LED_EN[LED_cur]|EN_LED;
			LEDPORT=seg_7_led_buffer[LED_cur];
			if(LED_cur==3)LED_cur=0; else LED_cur++;
	}
	keywords=rand_int();
	if (INTE && INTF) //判外部中断,即键盘中断
	{
		INTF=0;		//清外部中断
		keywords=PORTB&0b01111110;//线选取键值0111 1110
		switch(Current_game)//根据游戏选择要处理的键盘程序
		{
			case DEFAULTS:
				defaults_key();	//游戏选择,默认状态
				break;		
			case SNAKE:
				key_snake();	//贪食蛇键盘处理
				break;		
			case BRICK:
				key_brick();	//俄罗斯方块键盘处理
				break;
			case HIT_BRICK:
				key_hit();		//打砖块键盘处理
				break;
			case LOSTWAY:
				lostway_key();	//迷宫键盘处理
				break;
			default:
				//出现错误,这里可写错误修正,或者错误报告
				Current_game=DEFAULTS;//回到初始态
				break;
		}
	}
}

uint16_t rand (void)//时钟随机函数,需要在人为随机处调用
{				//随机变量有两个字节,可以得到65536之间随机
static char rand_temp_1,rand_temp_2;//随机变量1,2
rand_temp_2=rand_temp_1;//存储下一个1号变量
rand_temp_1=RAND_TIME;
return rand_temp_1*rand_temp_2;
}

uint16_t rand_int(void)//时钟随机函数,需要在人为随机处调用,中断用
{				//随机变量有两个字节,可以得到65536之间随机
static char rand_temp_1,rand_temp_2;//随机变量1,2
rand_temp_2=rand_temp_1;//存储下一个1号变量
rand_temp_1=RAND_TIME;
return rand_temp_1*rand_temp_2;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -