msp430单片机实现猜数字游戏

余年寄山水
851次浏览
2021年01月01日 03:48
最佳经验
本文由作者推荐

七夕图片浪漫-高三数学教学计划

2021年1月1日发(作者:卜商)


Msp430猜数字游戏设计

设计任务:
1. 先以一组四位数字为原版;
2. 游戏参与者依次输入所猜测的四位数字,单片机根据 所说入的四
位数字,进行提示xAyb,x为数字位置都正确的个数,y为数字正
确位置不正确 的个数;
3. 设置按键显示正确结果。

设计方案:
根据第一个实验 设计进行改变,在其基础上添加比较compare()
子函数,运行时调用次子函数进行比较。之后显 示结果。

设计目的:
体验单片机的趣味性。


程序代码:
#include

#define uchar unsigned char
#define uint unsigned int
unsigned char yuanshu[4]={9,4,7,3}; 设置原数组



unsigned char leddata[27]
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
=

0x80,0x 90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8f,0xbf,0x89,0x b9
,0xff,0x86,0xaf,0xcf,0xc7,0x91,0x8c};
unsigned char time[8] = {0,10,0,11,0,0,0,0};初始数码管


unsigned char getkey(void);

unsigned int qiushu();

long compare();

void qingping(void);

void fenjie();

void delay(unsigned int asdf)
{
for(uint asd=0;asd}



;



************************* 主函数************************
void main(void)
{
uchar flag=0,i=9;
WDTCTL = WDTPW + WDTHOLD; 关闭看门狗
P5DIR|=BIT7;
P5OUT&=~BIT7;
P4DIR=0xff;
P2DIR=0xff;
P1DIR=0x0F;
P1OUT=0xff;

while(1)
{ long p,q,r;

i=getkey();


if(i<10)
{
time[4]=time[5];
time[5]=time[6];
time[6]=time[7];
time[7]=i;

}
else {
switch(i)
{
case 12:
time[4]=yuanshu[0];
time[5]=yuanshu[1];
time[6]=yuanshu[2];
time[7]=yuanshu[3];
break;
case 13:time[0]=17;
p=qiushu();
qingping();
flag=13;
显示原数



break;
case 14:time[0]=18;
p=qiushu();
qingping();
flag=14;
break;
case 15:time[0]=19;
p=qiushu();
qingping();
flag=15;
break;
case 10: time[0] = 5;
time[1] = 1;
time[2] = 24;
time[3] = 24;
time[4] = 25;
time[5] = 26;
time[6] = 1;
time[7] = 9;
break;
显示silly pig





case 11:{q=compare(); 调用compare函数
p=q10%10;
r=q%10;
time[0]=p;
time[2]=r;break;
if((r>9999)||(r<0)) {
qingping();
time[5]=21;
time[6]=21;
time[7]=22;
}
else fenjie(r);}
break;

}}



for(uchar j=0;j<=7;j++)
{
P4OUT=0x80>>j;
P2OUT=leddata[time[j]];
显示


delay(200);
}
}

}end of main

long compare() 添加比较compare()子函数
{
uchar i,j,a=0,b=0,x,s;
for(i=4;i<=7;i++)
{
if(yuanshu[i-4]==time[i])
a++;
}
for(i=0;i<=4;i++)
{
for(j=4;j<=7;j++)
if(yuanshu[i]==time[j])
b++;

}


s=b-a;
x=a*10+s;
return(x);
}





unsigned int qiushu() 转化成相应的十进制整数
{unsigned int y;

y=time[2 ]*100000+time[3]*10000+time[4]*1000+time[5]*100+ti m
e[6]*10+time[7];
return y;
}

void qingping(void) 清除屏幕
{unsigned int a;
for(a=7;a>1;a--)
time[a]=0;
}

void fenjie(long r) 提取十进制整数各位数值,并显示


{
time[7]=r%10;
time[6]=r10%10;
time[5]=r100%10;
time[4]=r1000%10;
time[3]=r10000%10;
time[2]=r100000%10;
}


long factorial(long a)
{
long x,i;
x=a;
for(i=1;i {
x=x*(a-i);
}
return(x);
}



uchar getkey(void) 获取键值
{
uchar z,x=16;
P1OUT=0x00;

if((!(P1IN&BIT6))||(!(P1IN& BIT7))||(!(P1IN&BIT5))||(!(P1IN&
BIT4)))
{
delay(10000);

if((!(P1 IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN &
BIT4)))
{

for(z=0;z<=1;z++)
{
P1OUT=~BIT0;
if(!(P1IN&BIT7))
{x=3;break;}
P1OUT=~BIT0;
if(!(P1IN&BIT6))


{x=7;break;}
P1OUT=~BIT0;
if(!(P1IN&BIT5))
{x=11;break;}
P1OUT=~BIT0;
if(!(P1IN&BIT4))
{x=15;break;}
line 1
P1OUT=~BIT1;
if(!(P1IN&BIT7))
{x=2;break;}
P1OUT=~BIT1;
if(!(P1IN&BIT6))
{x=6;break;}
P1OUT=~BIT1;
if(!(P1IN&BIT5))
{x=10;break;}
if(!(P1IN&BIT4))
{x=14;break;}
line3


P1OUT=~BIT3;
if(!(P1IN&BIT6))
{x=4; break;}
P1OUT=~BIT3;
if(!(P1IN&BIT7))
{x=0; break;}
P1OUT=~BIT3;
if(!(P1IN&BIT5))
{x=8; break;}
P1OUT=~BIT3;
if(!(P1IN&BIT4))
{x=12; break;}
line 2
P1OUT=~BIT2;
if(!(P1IN&BIT6))
{x=5; break;}
P1OUT=~BIT2;
if(!(P1IN&BIT7))
{x=1; break;}
P1OUT=~BIT2;


if(!(P1IN&BIT5))
{x=9; break;}
P1OUT=~BIT2;
if(!(P1IN&BIT4))
{x=13; break;}}

while((!(P1IN&BIT6))||(!(P1I N&BIT7))||(!(P1IN&BIT5))||(!(P1
IN&BIT4)))
for(uchar j=0;j<=7;j++)
{
P4OUT=0x80>>j;
P2OUT=leddata[time[j]];
delay(500);
}
delay(20000);
while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BI T5))||(!(P1
IN&BIT4)))
for(uchar j=0;j<=7;j++)
{
P4OUT=0x80>>j;
P2OUT=leddata[time[j]];


delay(500);
}
delay(20000);

}
}
return (x);
}





金陵十三钗影评-你的微笑


西安外国语大学排名-个人实习总结


3月14号是什么节日-赏月


出租房屋怎么写-六一儿童


六年级上册语文试卷-调岗申请书


挽留的句子-我爱我的祖国歌词


广州钓鱼-时间的味道


唱-豆汁儿