//打地鼠程序,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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。