}
unsigned int sum1,sum2;
unsigned char
led[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X40};
void init() interrupt 1
{
TH0=0X00;TL0=0X00;
}
void display()
{
P2=led[sum1%10];
P3=0xfe;
delay(2);
P3=0xff;
P2=led[sum1/10%10];
P3=0xfd;
delay(2);
P3=0xff;
P2=led[sum2%10];
P3=0xfb;
delay(2);
P3=0xff;
P2=led[sum2/10%10];
P3=0xf7;
delay(2);
P3=0xff;
}
void main()
{
TMOD=0X01;
TH0=0X00;TL0=0X00;
EA=1;ET0=1;TR0=1;
while(1)
{
if(k1==0){while(k1==0);sum1=TL0;sum2=TH0;}
display();
}
}
方法二:用定时器加 rand()随机函数来实现
单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取
随机数的话,那每次上电随机的结果都是一样的。然后是 0 到 9 不重复的
随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入
下次取随机数,不同则存入数组。
程序如下:
#include
#include //包含 rand()随机函数的头文件
unsigned char t,k,i,j,a,f,n[10];
//t 是计时变量,k 是按键标志,i 是数组下标,f 是随机数重复标志,n[10]
是存放随机数的数组
void init() //初始化函数
{
t=0;
i=0;
f=0;
k=0;
TMOD=0x02;
//设置定时器 0 为工作方式 2
TH0=7;
//装初值
TL0=7;
EA=1;
//开总中断
ET0=1;
//开定时器 0 中断
TR0=1;
//启动定时 0
EX0=1; //开外部中断 0,同按键的效果一样
IT0=1;
//下降沿触发
}
void main()
{
init();
while(1)
{
while(k) //外部中断 0 触发循环
{
if(!i) //i=0 时取第一个随机数放入数组 n[0]
{
srand(t); //随机数初始化
a=(char)(rand()%10); //取随机数(0~9)
n[0]=a;
//存入数组
i++;
//数组下标加 1
}
else
while(i<10) //存放剩下的 9 个随机数
{
srand(t); //随机数初始化
a=(char)(rand()%10);
//取随机数
for(j=0;j
f=1;
//标志置 1
}
if(f) //有重复执行
{
f=0; //标志清 0
continue; //结束本次循环
}
n[i]=a;
//不同则存入数组中
i++;
//数组下标加 1
}
}
}
}
void inter0() interrupt 0 //外部中断 0
{
k=1; //按键标志置 1,主函数执行取随机数
}
void time0() interrupt 1 //定时器 0 中断
{
t++; //时间加 1
if(t==100) t=0;
}