掷骰子

更新时间:2023-03-11 03:24:54 阅读: 评论:0

手绘花盆-竞职演讲

掷骰子
2023年3月11日发(作者:得力考勤机)

电子设计实验

--------------------王允臣-------------

需求:

本游戏电路是模拟掷骰子,可供两人游戏。游戏规则:本游戏电路是模拟掷

骰子,可供两人游戏。游戏者每按动一次按键可得到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 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图