實現(xiàn)4個功能 1.可設置上限的抽獎方式一 2.4位隨機數(shù)抽獎 3.倒計時 4.正計時
IMG_20190523_232200.jpg (5.2 MB, 下載次數(shù): 43)
下載附件
2019-5-23 23:25 上傳
單片機代碼如下(詳細代碼見附件):
#include <reg52.h>
#include "main.h"
#include "delay.h"
#include "keyscan.h"
#include "disp.h"
#include "key_scan.h"
#include <stdio.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09, //0 1 2 3 4 5 6 7 8 9
0x11,0xc1,0x63,0x85,0x61,0x71}; //SBUF送顯斷碼表 //A b C d E F
uchar code table_LED[]={0X7F,0X3F,0X1F,0X0F,0X07,0X03,0X01,0X00,0XFE,0XFC,0XF8,
0XF0,0XE0,0XC0,0X80,0X00,0X00,0X00,0X00,0X00 };
/*************函數(shù)聲明*****************************/
void work0();
void work3();
void work4();
char w0,w2;
uchar w1,w3,t1;
char t,y,o,p,m,n,msta;
uchar f,g;
void main (){
/****************初始化各參數(shù)**********************/
char j;/*o,p,m,n,msta*/
char q,w,e,r,/*t,*/y; //工作方式0送顯變量
int max,temp;
uchar z,x,c,v;
f=g=1; //循環(huán)控制變量初始化
o=-1;n=8,msta=0,t=-1;/*m=0;*/ //初始化工作方式0閃爍標志位及跳轉信號參數(shù)
q=0;w=2;e=3;r=4; //工作方式0參數(shù)初始化
//z=x=c=v=0; //抽獎機參數(shù)初始化
SBUF=table[0];
cs4=0;
for(j=0;j<20;j++)
{delay(100);
P0=table_LED[j];}
cs4=1;
/****************進入主循環(huán)**********************/
while(1)
{
switch(msta)
{
//工作方式0
case 0:
{
delay(5);
key_scan();
disp(q,w,e,r,t,y);
keyscan(1);
keyscan(2);
if(ktz2==1)//個位開始閃爍?
{ y=1;
o++; //閃爍指針下調
switch(o)
{ case 0: t=0;break;
case 1: t=1;break;
case 2: t=2;break;
case 3: t=3;break;
}
if(o==4)
{ o=-1;
y=0;}
}
//0~7按鍵的翻譯
if(key1>0)
{
for(p=0;p<=8;p++)
{
if(key1&0x01)
{
switch(t)
{ case 0: r=m;break;
case 1: e=m;break;
case 2: w=m;break;
case 3: q=m;break;}}
key1>>=1;
m++;}
m=0;}
//8~11按鍵的翻譯
if(key2>0)
{
for(p=0;p<=2;p++)
{
if((key2&0x01)==1)
{switch(t)
{ case 0: r=n;break;
case 1: e=n;break;
case 2: w=n;break;
case 3: q=n;break;}}
key2>>=1;
n++;}
n=8;}
//檢測跳轉信號
if(k0==1)
SBUF=table[8];
if( ktz1==1)
{ msta=1;
SBUF=table[1];
max=q*1000+w*100+e*10+r;
}
break; }
//工作方式1 可設置上限抽獎
case 1:
{temp=rand()%(max+1);
z=temp/1000%10;
x=temp/100%10;
c=temp/10%10;
v=temp/1%10;
delay(5);
disp(z,x,c,v,0,0);
// delay(3);
// v++;
// if (v>9)
// {c++;v=0;}
// if(c>9)
// {x++;c=0;}
// if(x>9)
// {z++;x=0;}
// if(z>9)
// z=0;
//
// if((z==q)&&(x==w)&&(c==e)&&(v==r)) //將最大值送顯后清零
// {for(i=0;i<4;i++)
// { disp(z,x,c,v,0,0);
// delay(3); }
// z=x=c=v=0; }
//檢測跳轉信號
keyscan(1);
keyscan(2);
if(ktz1==1)
{msta=3;
SBUF=table[2]; }
if(ktz2==1)
msta=2;
break;}
case 2: //工作方式1抽獎結果送顯
{
delay(5);
disp(z,x,c,v,0,0);
keyscan(2);
if(ktz2==1)
msta=1;
break; }
//工作方式2 抽獎
case 3:
{ //取隨機數(shù)
q=rand()%10;
w=rand()%10;
e=rand()%10;
r=rand()%10;
delay(5);
disp(q,w,e,r,0,0);
keyscan(1);
keyscan(2);
//檢測跳轉信號
if(ktz1==1)
{msta=5;SBUF=table[3];w3=w2=9;w0=9;w1=5;}
// if(ktz1==1)
// { msta=0; SBUF=table[0];q=0;w=2;e=3;r=4;}
if(ktz2==1)
msta=4;
break;}
case 4: //工作方式2抽獎結果送顯
{
delay(5);
disp(q,w,e,r,0,0);
keyscan(2);
if(ktz2==1)
msta=3;
break;
}
case 5: //99分59秒倒計時
{
if(w3==0&&w2==0&&w1==0&&w0==0)
{while(g){
keyscan(1);
delay(5);
disp(0,0,0,0,0,0);
f++;
if(ktz1==1)
{g=0;msta=6;SBUF=table[4];}
if(f==200)
{P2=0xff;
f=0;
delay(1000);}}
}
work3();
break;}
case 6: //正計時
{
work4();
if(w3==9&&w2==9&&w1==5&&w0==9)
{while(g)
{ keyscan(1);
delay(5);
disp(9,9,5,9,0,0);
f++;
if(f==200)
{P2=0xff;
f=0;
delay(1000);}
keyscan(1);
if(ktz1==1)
{g=0;}
}}
if(ktz1==1)
{
q=0;w=2; e=3;r=4;
msta=0;
SBUF=table[0];
}
break;}
}
}}
/**************************************
子函數(shù)
***************************************/
void work0(){
t1++;
if(t1==200)
{ w0--;
t1=0;}
if(w1==0&&w0==-1)
{w1=5;
w0=9;
w2--;}
if(w0==-1)
{w0=9;
w1--;}
if(w2==-1)
{w2=9;
w3--;
}
disp(w3,w2,w1,w0,0,0);
return;}
//倒計時
void work3(){
delay(5);
while(f){
delay(5);
keyscan(1);
keyscan(2);
key_scan();
disp(w3,w2,w1,w0,t,y);
if(ktz2==1)//個位開始閃爍?
{ y=1;
o++; //閃爍指針下調
switch(o)
{ case 0: t=0;break;
case 1: t=1;break;
case 2: t=2;break;
case 3: t=3;break;
}
if(o==4)
{ o=-1;
y=0;}
}
//0~7按鍵的翻譯
if(key1>0)
{
for(p=0;p<=8;p++)
{
if(key1&0x01)
{
switch(t)
{ case 0: w0=m;break;
case 1: w1=m;break;
case 2: w2=m;break;
case 3: w3=m;break;}}
key1>>=1;
m++;}
m=0;}
//8~11按鍵的翻譯
if(key2>0)
{
for(p=0;p<=2;p++)
{
if((key2&0x01)==1)
{switch(t)
{ case 0: w0=n;break;
case 1: w1=n;break;
case 2: w2=n;break;
case 3: w3=n;break;}}
key2>>=1;
n++;}
n=8;}
if(ktz1==1)
{ f=0;delay(20);}
}
keyscan(1);
if(ktz1==1)
{msta=6;SBUF=table[4];w3=w2=w1=w0=0;}
work0();
keyscan(2);
if(ktz2==1)
f=1;
return;
}
//正計時
void work4(){
uchar t;
keyscan(1);
keyscan(2);
delay(5);
disp(w3,w2,w1,w0,0,0);
t++;
if(t==200)
{
t=0;
w0++;}
if(w0==10)
{w0=0;
w1++;
if(w1==6)
{w1=0;
w2++;}
if(w2==10)
{w2=0;
w3++;}
}
if(ktz1==1)
{msta=0;SBUF=table[0];}
if(ktz2==1)
{ f=1;
while(f)
{ keyscan(1);
keyscan(2);
delay(5);
disp(w3,w2,w1,w0,0,0);
if(ktz2==1)
f=0;
if(ktz1==1)
w0=w1=w2=w3=0;}}
return;}
全部資料51hei下載地址:
小系統(tǒng)實驗.zip
(68.24 KB, 下載次數(shù): 16)
2019-5-23 23:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|