标题:
为什么我的随机数生成程序运行几次以后就不正常了?
[打印本页]
作者:
heispeg
时间:
2022-12-28 13:46
标题:
为什么我的随机数生成程序运行几次以后就不正常了?
RTRT,我对着按键狠搓个一百次左右后就会保持在一个数字不变,但是过一会又会恢复正常功能……“左右”是因为每次出现这种情况要按的次数都不一定……不过基本上是在100次以上的样子。
我用的随机数生成方法是srand()+rand()函数,在main()里用递增生成一个种子。不知道究竟哪里出问题了……
我用的开发板是普中-3的开发板。单片机的型号是STC89C52RC
附代码:
#include <REGX52.H>
#include <stdlib.h>
#define BUT1 P3_1
#define MAX 255
#define MIN 1
unsigned char key_old = 1;
unsigned char key_flag = 0;
unsigned char key_now = 1;
unsigned char keyup = 1;
unsigned char down_count = 0;
unsigned char up_count = 0;
void configTimer0();
unsigned int random(unsigned int xxx);
void main()
{
unsigned int seed = 0;
unsigned char LED = 0xFF;
configTimer0();
while (1)
{
if (seed < 65530)
{
seed+=1;
}
else
{
seed=0;
}
if (down_count >= 2)
{
LED=random(seed);
seed = 0;
P2=LED;
down_count = 0;
keyup = 0;
}
if (up_count >= 2)
{
up_count = 0;
keyup = 1;
}
}
}
void configTimer0()
{
TMOD=0x01; //0000 0001
TH0 = (65536 - 1000) / 256; //delay 1ms
TL0 = (65536 - 1000) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
}
unsigned int random(unsigned int xxx)
{
unsigned int value;
srand(xxx);
value = rand() % (MAX + 1 - MIN)+ MIN; //get a random num (MIN-MAX)
return value;
}
void timer0() interrupt 1
{
static int count = 0;
if (count >= 10)
{
// detect key
key_now = BUT1;
key_flag = (key_now ^ key_old) ^ key_flag;
key_old = key_now;
if(key_flag && keyup)
{
down_count += 1;
}
else if (!keyup && !key_flag)
{
up_count += 1;
}
}
TH0 = (65536 - 1000) / 256;
TL0 = (65536 - 1000) % 256;
count+=1;
}
复制代码
作者:
Hephaestus
时间:
2023-1-3 16:05
开一个定时器,随机种子用定时器的值。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1