首页 LPC1114和51单片机打地鼠程序

LPC1114和51单片机打地鼠程序

举报
开通vip

LPC1114和51单片机打地鼠程序//打地鼠程序,P1的0-7位连接LED阴极,P2的0-7位连接按键,按键另一端接地#include #include #include #define unit8 unsigned char #define unit16 unsigned int #define LED LPC_GPIO1->MASKED_ACCESS[0xff] //定义P1的0-7位为输出 #define KEY LPC_GPIO2->MASKED_ACCESS[0xff] //定义P2的0-7位为输入 unit8 le...

LPC1114和51单片机打地鼠程序
//打地鼠程序,P1的0-7位连接LED阴极,P2的0-7位连接按键,按键另一端接地#include #include #include #define unit8 unsigned char #define unit16 unsigned int #define LED LPC_GPIO1->MASKED_ACCESS[0xff] //定义P1的0-7位为输出 #define KEY LPC_GPIO2->MASKED_ACCESS[0xff] //定义P2的0-7位为输入 unit8 level,KEY_reply,key_flag,score_copy,key_flag2; char score; unit8 KEY_temp; unit8 LED_temp;//定义分数,等级,按键的返回值,对错标志,暂存变量等 void Set48MHzClock(void); void delay(unit8 tmscl); void LedOutputCfg(void); unit8 key_check(void); void SystemInit(void); int main() { SystemInit();//系统初始化 while(1) { level=score/2; delay(10-level); LED=~(1<<(rand()%8)); LED_temp=LED; delay(10-level); if(key_flag==0x01&&key_flag2==0) { score+=1; if(score==19) score=18; key_flag=0; key_flag2=0 ; } else { score-=1; if(score<=0) score=0; } LED=0xff; } //延迟函数 void delay(unit8 tmscl) { unit8 a; unit16 b; unit8 c; for(c=0;c<=tmscl;c++) for(a=0;a<50;a++) for(b=0;b<25;b++) { if(key_check()!=0XFF&&(key_check()==LED_temp)) { key_flag|=0x01; LED=0xff; } else if(key_check()!=0XFF&&(key_check()!=LED_temp)) key_flag2=1; else key_flag|=0; } } //系统初始化,包括时钟和IO口设置 void SystemInit(void) { Set48MHzClock(); LedOutputCfg(); } void Set48MHzClock(void) { LPC_SYSCON->PDRUNCFG = LPC_SYSCON->PDRUNCFG & 0xFFFFFF5F; LPC_SYSCON->SYSPLLCLKSEL = 1; LPC_SYSCON->SYSPLLCLKUEN = 0; LPC_SYSCON->SYSPLLCLKUEN = 1; LPC_SYSCON->SYSPLLCTRL = (3 + (1<<5)); while(LPC_SYSCON->SYSPLLSTAT == 0); LPC_SYSCON->MAINCLKSEL = 3; LPC_SYSCON->MAINCLKUEN = 0; LPC_SYSCON->MAINCLKUEN = 1; return; } void LedOutputCfg(void) LPC_SYSCON->SYSAHBCLKCTRL = LPC_SYSCON->SYSAHBCLKCTRL | (1<<16) | (1<<6); LPC_IOCON->R_PIO1_0 = (0x01) | (0<<3) | (0<<5); LPC_IOCON->R_PIO1_1 = (0x01) | (0<<3) | (0<<5); LPC_IOCON->R_PIO1_2 = (0x01) | (0<<3) | (0<<5); LPC_IOCON->SWDIO_PIO1_3 = (0x01) | (0<<3) | (0<<5); LPC_IOCON->PIO1_4 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO1_5 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO1_6 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO1_7 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_0 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_1 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_2 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_3 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_4 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_5 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_6 = (0x00) | (0<<3) | (0<<5); LPC_IOCON->PIO2_7 = (0x00) | (0<<3) | (0<<5); LPC_GPIO1->DIR = LPC_GPIO0->DIR | (0xff); //LED P1口作为输出 LPC_GPIO1->DIR = LPC_GPIO0->DIR & (0x00); //KEY P2口作为输入 LPC_GPIO0->MASKED_ACCESS[0xff] = 0; //起初LED输出清零return; } unit8 key_check(void) { static unit8 KEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7,KEY0; KEY0=KEY&0x01; KEY1=KEY&0X02; KEY2=KEY&0X04; KEY3=KEY&0X08; KEY4=KEY&0X10; KEY5=KEY&0X20; KEY6=KEY&0X40; KEY7=KEY&0X80; if((KEY0==0||KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0||KEY6==0||KEY7==0)) { if(KEY0==0) KEY_reply=~0x01; else if(KEY1==0) KEY_reply=~0x02; else if(KEY2==0) KEY_reply=~0x04; else if(KEY3==0) KEY_reply=~0x08; else if(KEY4==0) KEY_reply=~0x10; else if(KEY5==0) KEY_reply=~0x20; else if(KEY6==0) KEY_reply=~0x40; else if(KEY7==0) KEY_reply=~0x80; } else KEY_reply=~0x00; return KEY_reply; } #include #include #include #define unit8 unsigned char #define unit16 unsigned int // p3.4,p3.5,p3.6,p3.7 #define LED P1 #define KEY P3 unit8 level,KEY_reply,key_flag,score_copy,key_flag2; char score; unit8 KEY_temp; unit8 LED_temp; unit8 key_check(unit8 KEY_reply ); void delay(unit8 tmscl); void main() { while(1) { level=score/2; delay(10-level); LED=~(1<<(rand()%4+4))|0x0f; LED_temp=LED; delay(10-level); if(key_flag==0x01&&key_flag2==0) { score+=1; if(score==19) score=18; key_flag=0; key_flag2=0 ; } else { score-=1; if(score<=0) score=0; } LED=0xff; } } void delay(unit8 tmscl) { unit8 a; unit16 b; unit8 c; for(c=0;c<=tmscl;c++) for(a=0;a<50;a++) for(b=0;b<25;b++) { if(key_check()!=0XFF&&(key_check()==LED_temp)) { key_flag|=0x01; LED=0xff; } else if(key_check()!=0XFF&&(key_check()!=LED_temp)) key_flag2=1; else key_flag|=0; } } unit8 key_check(unit8 KEY_reply ) { static KEY1,KEY2,KEY3,KEY4; KEY1=KEY&0x80 ; KEY2=KEY&0X40; KEY3=KEY&0X20; KEY4=KEY&0X10; if((KEY1==0||KEY2==0||KEY3==0||KEY4==0)) { if(KEY1==0) KEY_reply=~0x80; else if(KEY2==0) KEY_reply=~0x40; else if(KEY3==0) KEY_reply=~0x20; else if(KEY4==0) KEY_reply=~0x10; } else KEY_reply=~0x00; return KEY_reply; } // void serial() interrupt 4 //{ // SBUF=P1; // a=SBUF; // flag=1; // RI=0; //}
本文档为【LPC1114和51单片机打地鼠程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_682974
暂无简介~
格式:doc
大小:29KB
软件:Word
页数:14
分类:工学
上传时间:2019-02-25
浏览量:12