隨機(jī)排布:任一順序的0~9的排列,如:8,3,1,5,4,0,9,7,6,2
用單片機(jī)生成一個(gè)隨機(jī)排列,然后輸出到P2口。
請(qǐng)大神指點(diǎn)啊
程序(有問題)如下:
#include<stdio.h>
#include<REG52.H>
unsigned short rtab[10] = {3, 9, 4, 1, 5, 0, 7, 8, 2, 6};
unsigned short divider[9] = {2, 3, 5, 7, 11, 13, 17, 19, 23};
unsigned short skip[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; //skip是在rtab中的偏移
unsigned short temp[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; //暫存skip
unsigned short result[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; //存放隨機(jī)排布
unsigned int count=1;
void test() //如果count能夠被divider整除,那么skip++。
{
int i;
for(i=0;i<=8;i++)
{
if(count%divider==0)
{
if(skip>=9-i) //skip[]的進(jìn)制分別是10,9,8,.....,3,2
skip=0;
else
skip++;
break;
}
}
}
void timer1_int() interrupt 3 using 2 //計(jì)時(shí)器1中斷程序,令count非溢出地加1
{
if(count>=65531)
count=1;
else
count++;
test();
}
void swap(unsigned short x,unsigned short y) //將x,y對(duì)換
{
unsigned short tep;
tep=x;
x=y;
y=tep;
}
void refresh() //刷新,產(chǎn)生隨機(jī)排布result[10];
{
//TR1 = 0;
int i=0;
for(i=0; i<=8; i++ )
temp=skip;
//TR1=1;
for(i=0;i<=8;i++) //問題:該循環(huán)中,swap()不能實(shí)現(xiàn)rtab[temp]與rtab[9-i]的對(duì)換
{
result=rtab[temp];
swap(rtab[temp],rtab[9-i]); //保證下次取到的數(shù)rtab[temp[i+1]]不與已經(jīng)取到的數(shù)result[0~i]重復(fù)
}
result=rtab[0];
}
void display() //將result數(shù)組的內(nèi)容依次輸出到P2口
{
int i;
for(i=0; i<=9;i++ )
{
P1=i;
P2=result;
}
}
void int0_service() interrupt 2 using 3 //有鍵被按下時(shí),調(diào)用外部中斷1程序
{
switch(P1)
{
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':P2=P1;/*save(P1);*/refresh();display();break;
// case'c':clear();break; //清除一位
case'r':refresh();display();break; //刷新
// case'e':enter();P2=enter;break; //確定
default:/*P2=error;*/break; //顯示出錯(cuò)
}
}
void main()
{
TMOD |= 0x20; //timer 1, mode 2, 8-bit reload
TH1 = 221; //初始值
EA = 1; //開所有中斷
ET1 = 1; //開計(jì)時(shí)器1溢出中斷
EX1 = 1; //開外部中斷1
PX1 = 1; //設(shè)外部中斷1為高優(yōu)先級(jí)
PT1 = 0; //設(shè)計(jì)時(shí)器1中斷為低優(yōu)先級(jí)
TR1 = 1; //計(jì)時(shí)開始
while(1) //當(dāng)按下確定鍵時(shí),開始程序
{
if(P1=='e')
break;
}
refresh();
while(1)
{
display();
}
}
|