標題:
為什么我的隨機數生成程序運行幾次以后就不正常了?
[打印本頁]
作者:
heispeg
時間:
2022-12-28 13:46
標題:
為什么我的隨機數生成程序運行幾次以后就不正常了?
RTRT,我對著按鍵狠搓個一百次左右后就會保持在一個數字不變,但是過一會又會恢復正常功能……“左右”是因為每次出現這種情況要按的次數都不一定……不過基本上是在100次以上的樣子。
我用的隨機數生成方法是srand()+rand()函數,在main()里用遞增生成一個種子。不知道究竟哪里出問題了……
我用的開發(fā)板是普中-3的開發(fā)板。單片機的型號是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.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1