资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机打地鼠代码/*单片机为at89s52,显示用12864液晶显示屏。黄书敏2012.5*/#include#include#include#define uchar unsigned char#define uint unsigned int#include stdlib.h#define FSOC 12000000L / 晶振频率#define TIMS1 (65536-FSOC/12/1000*5) / 每5ms溢出#define TIMS0 (65536-200) /计数器每中断200次溢出一次 /全局变量/uchar score = 0; /分数 uint top = 0; /最高分 uchar level = 1; / 关数 uchar life = 3; / 生命数 uchar pos = 0 ; /地鼠/地雷位置 uchar prepos = 0; /上一只地鼠/地雷位置 uchar flag = 0; /地鼠or地雷标志位 uint count; /计时器 uchar remtime = 33 ; /每局剩余秒数 30ssbit triger = P33 ; /单片机P33口接P34口 /函数声明/void DelayUs2x(uint t);void DelayMs(uint t);void delay_50us(uint t);void delay_1s(uint t);void delay_0_5s(uint t);void CheckBusy(void);void write_12864com(uchar com);void write_12864date(uchar date) ;void initinal(void) ;void ClrScreen();void Set_Cursor(uchar x, uchar y) ;void writeCGRAM(uchar pos,uchar code *pic) ;void displayCGRAM(uchar x,uchar y,uchar pos) ;void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s) ;void LCD_PutGraphic(unsigned char code *img); /显示满屏图片void showpic(uchar x,uchar y,uchar code *pic);void show_welcome() ;void show_life(uchar life) ;void show_level(uchar level) ;void show_time(uchar time) ;void show_score(uint score) ;void IniScreen() ;void show_mouse(uchar pos); /在指定位置显示老鼠void show_strike(uchar pos) ; /在指定位置显示锤子void show_bomb(uchar pos); /在指定位置显示炸弹void show_squre(uchar pos); /在指定位置显示方框void show_level_up(uchar level,uint score);void show_gameover(uint score);void show_congratulation(uint score);void show_win_newrecord(uint score, uint top);void show_lose_newrecord (uint score,uint top) ; /void Timers_Init() ; void Timer1reset() ;void Timer0reset() ;void Timer0_ISR() ; /中断处理函数void Timer1_ISR() ;void close_timers() ;void delay_ms(uint t);unsigned char Key_Scan() ;uint long_delay (uchar s) ;uint StarAGame() ;void level_going() ;unsigned char end() ; /12864显示屏函数是队友写的,未经允许不做公开/ / /定时器/void Timers_Init() /配置Timer1为计时器,timer0为计数器,timer1每5ms送出一个interrupt 3 , 使count+,timer0+ TMOD = 0x15; TH0 = TIMS08; TL0 = TIMS0; ET0 = 1; /打开定时器0中断 TH1 = TIMS18; TL1 = TIMS1; ET1 = 1; /打开定时器1中断 EA = 1; /打开总中断 IT0 = 0; triger = 1 ; void Timer0reset() TR0 = 1 ; /timer0允许记时 remtime = 33 ;void Timer1reset() TR1 = 1 ; /timer1允许计时 count = 0 ;void Timer0_ISR() interrupt 1 / 用于每局30s计时 remtime- ; /时间减一秒 show_time(remtime-3); /打印时间 TH0 = TIMS08; TL0 = TIMS0; void Timer1_ISR() interrupt 3 /用于每只老鼠时间计时,具体时间依关数不同。 triger = 0; triger = 1; count+; TH1 = TIMS18; TL1 = TIMS1; void close_timers() TR0 = 0; TR1 = 0; /矩阵键盘/ void delay_ms(uint t) uint i; for(;t0;t-) i = 120; while (i-) ; unsigned char Key_Scan() unsigned char X=0,Y=0,key=255; P1 = 0x0f; if(P1!=0x0f) delay_ms(10); /消抖 if(P1!=0x0f) X = P1; P1 = 0xf0; Y = P1; key = X|Y; switch(key) case 0xee: key=12; break; /对键值赋值 case 0xde: key=8; break; case 0xbe: key=4; break; case 0x7e: key=0; break; case 0xed: key=13; break; case 0xdd: key=9; break; case 0xbd: key=5; break; case 0x7d: key=1; break; case 0xeb: key=14; break; case 0xdb: key=10; break; case 0xbb: key=6;break; case 0x7b: key=2;break; case 0xe7: key=15;break; case 0xd7: key=13;break; case 0xb7: key=7;break; case 0x77: key=3;break; default: key = 255;break; while(P1!=0xf0); return key; /游戏进行时/uint long_delay (uchar s) /延时函数 uchar i,j; while(s-) for(i=0;i10;i+)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号