电子设计实验
--------------------王允臣-------------
需求:
本游戏电路是模拟掷骰子,可供两人游戏。游戏规则:本游戏电路是模拟掷
骰子,可供两人游戏。游戏者每按动一次按键可得到1-6范围内的两个数,并按
下列规则决定胜负。
1.第一场比赛,游戏者每人各按一次按键,所得两数之和为7和11者胜;
若无人取胜,则进行第二场比赛;
2.第二场比赛,游戏者每人各按一次按键,所得两数之和与第一场比赛相
同者获胜,所得两数之和为7或11者负,若无人获胜或负,则重复进行,直至
出现胜者或负者为止;
功能要求:用两个计数器建立投骰子读数电路,读数锁存并用数码管显示。
两计数器读数之和应显示并存储,以便于第二场比赛结果相比较。比赛结果可以
用发光二极管或数码管指示。
显示模块如果硬件不同可以修改。。。
#include
#include
//#include
//#include
#defineucharunsignedchar//宏定义用uchar代替unsignedchar
#defineuintunsignedint
sbitsmg_d=P3^6;//定义控制数码管数据的573的锁存端
sbitsmg_w=P3^5;//定义控制数码管公共端的573的锁存端
#definesmg_dataP1//定义之后可以用DATA_573代替P0
sbitkey=P3^7;
sbitbeep=P3^4;
uintmem11,mem12,sum1,sum1_pre,sum1_next;
uintmem21,mem22,sum2,sum2_pre,sum2_next;
uinttotal=1;
uintstate;//标志状态,是否已按下,1按下之后置为1,2按下之后置为0
uintfirst;//first为1说明是第一次按键
uintover;
uintwin1,win2;
uintled;
uintii=0;
uinttime=0;
uints=0;
uintcount_led;
//*****************共阳数码管段码表****************************************
constunsignedchartable[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
//******************函数声明************************************************
voidLED1();
voidLED2();
voiddelay(uintz);
voiddelay_50us(unsignedintt);//50US基准延时函数
voiddisplay(unsignedchardis_data,unsignedchardis_bit);//数码管显示函数
//**************************************************************************
voidInit(){
mem11=0;mem12=0;sum1=0;sum1_pre=0;sum1_next=0;
mem21=0;mem22=0;sum2=0;sum2_pre=0;sum2_next=0;
key=1;
state=0;
first=1;
over=0;
win1=0;win2=0;
count_led=0;
led=0;
total=0;
}
voidInit_Timer0(void){
TMOD|=0x11;
TH0=0x00;
TL0=0x00;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;//50ms
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
}
voidmain(){
Init();
Init_Timer0();
while(1){
while(key==0);
while(key!=0){
//if(total<=15){display(total,1);display(16,2);}
display(total,1);
display(time,2);
//if(total>15){
//display(total/10,1);
//display(total%10,2);
//}
display(sum2,3);
display(mem22,4);
display(mem21,5);
display(sum1,6);
display(mem12,7);
display(mem11,8);
if(over==0){//没结束
if(key==0){//按键按下
delay(20);
if(key==0){//消抖
total++;
if(state==0){//第一个选手按的
mem11=TL0%5+1;
delay(1);
mem12=TL0%5+1;
sum1=mem11+mem12;
state=1;
if(first==1){//第一次比赛?
sum1_pre=sum1;
}el{
sum1_next=sum1;
}
while(key==0);
while(key!=0){
display(total,1);
display(16,2);
display(sum2,3);
display(mem22,4);
display(mem21,5);
display(sum1,6);
display(mem12,7);
display(mem11,8);
}
delay(20);
while(key!=0){
display(total,1);
display(16,2);
display(sum2,3);
display(mem22,4);
display(mem21,5);
display(sum1,6);
display(mem12,7);
display(mem11,8);
}
mem21=TL0%5+1;
delay(1);
mem22=TL0%5+1;
sum2=mem21+mem22;
state=0;
if(first==1){//第一次比赛?
sum2_pre=sum2;
}el{
sum2_next=sum2;
}
if(first==1){//第一次比赛?
if(sum1==7||sum1==11){win1=1;}el{win1=0;}
if(sum2==7||sum2==11){win2=1;}el{win2=0;}
}el{//不是第一次比赛
if(sum1_next==sum1_pre){win1=1;}el{win1=0;}
if(sum2_next==sum2_pre){win2=1;}el{win2=0;}
}
if(win1+win2==1){
over=1;
}//两个人都获胜,则视为平局
if(first!=1){
sum1_pre=sum1_next;
sum2_pre=sum2_next;
}
if(first==1)first=0;
}//state==0
}//消抖
}//key=0
}//over=0
}
}
}
voiddisplay(unsignedchardis_data,unsignedchardis_bit)
{
unsignedchari=1;//数码管位选变量
smg_d=1;//使能控制数码管数据口573
smg_data=table[dis_data];//送显示断码
smg_d=0;//锁存数据
dis_bit--;
i<<=dis_bit;
smg_w=1;//使能控制数码管公共端的573
smg_data=i;//第i个数码管亮
smg_w=0;//锁存数据
delay_50us(30);
}
//*************************************************************************
voiddelay(uintz)//延时子函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddelay_50us(unsignedintt)
{
unsignedcharj;
for(;t>0;t--)
{
for(j=19;j>0;j--);
}
}
voidtime0()interrupt1//定时器0中断
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(win1+win2==1&&count_led<3)beep=~beep;
}
voidtime1()interrupt3//定时器1中断
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
count_led++;
ii++;
if(ii==20){
ii=0;
time++;
if(win1+win2==1)s++;
}
//if(count_led==5){
led=~led;
if(win1+win2==1&&s<5){
if(win1==1)if(led==0)P2=0xf0;elP2=0xff;
if(win2==1)if(led==0)P2=0x0f;elP2=0xff;
}elif(win1+win2==1&&s>5){
P2=_crol_(0xfe,s%8);
}
count_led=0;
//}
}
本文发布于:2023-03-11 03:24:53,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678476294210373.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:掷骰子.doc
本文 PDF 下载地址:掷骰子.pdf
留言与评论(共有 0 条评论) |