找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1223|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

為什么我的隨機數(shù)生成程序運行幾次以后就不正常了?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1006994 發(fā)表于 2022-12-28 13:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
RTRT,我對著按鍵狠搓個一百次左右后就會保持在一個數(shù)字不變,但是過一會又會恢復(fù)正常功能……“左右”是因為每次出現(xiàn)這種情況要按的次數(shù)都不一定……不過基本上是在100次以上的樣子。
我用的隨機數(shù)生成方法是srand()+rand()函數(shù),在main()里用遞增生成一個種子。不知道究竟哪里出問題了……
我用的開發(fā)板是普中-3的開發(fā)板。單片機的型號是STC89C52RC
附代碼:
  1. #include <REGX52.H>
  2. #include <stdlib.h>

  3. #define BUT1 P3_1
  4. #define MAX 255
  5. #define MIN 1

  6. unsigned char key_old = 1;
  7. unsigned char key_flag = 0;
  8. unsigned char key_now = 1;
  9. unsigned char keyup = 1;

  10. unsigned char down_count = 0;
  11. unsigned char up_count = 0;

  12. void configTimer0();
  13. unsigned int random(unsigned int xxx);

  14. void main()
  15. {
  16.         unsigned int seed = 0;
  17.         unsigned char LED = 0xFF;
  18.        
  19.         configTimer0();
  20.        
  21.         while (1)
  22.         {
  23.                 if (seed < 65530)
  24.                 {
  25.                         seed+=1;
  26.                 }
  27.                 else
  28.                 {
  29.                         seed=0;
  30.                 }
  31.                 if (down_count >= 2)
  32.                 {
  33.                         LED=random(seed);
  34.                         seed = 0;
  35.                        
  36.                         P2=LED;
  37.                         down_count = 0;
  38.                         keyup = 0;
  39.                 }
  40.                 if (up_count >= 2)
  41.                 {
  42.                         up_count = 0;
  43.                         keyup = 1;
  44.                 }
  45.         }
  46. }

  47. void configTimer0()
  48. {
  49.     TMOD=0x01; //0000 0001
  50.     TH0 = (65536 - 1000) / 256; //delay 1ms
  51.     TL0 = (65536 - 1000) % 256;
  52.     TR0 = 1;
  53.     ET0 = 1;
  54.     EA = 1;
  55. }

  56. unsigned int random(unsigned int xxx)
  57. {
  58.         unsigned int value;
  59.   srand(xxx);
  60.   value = rand() % (MAX + 1 - MIN)+ MIN;               //get a random num (MIN-MAX)
  61.   return value;
  62. }


  63. void timer0() interrupt 1
  64. {
  65.         static int count = 0;
  66.         if (count >= 10)
  67.         {
  68.                 // detect key
  69.                 key_now = BUT1;
  70.                 key_flag = (key_now ^ key_old) ^ key_flag;
  71.                 key_old = key_now;
  72.                 if(key_flag && keyup)
  73.                 {
  74.                         down_count += 1;
  75.                 }
  76.                 else if (!keyup && !key_flag)
  77.                 {
  78.                         up_count += 1;
  79.                 }
  80.         }
  81.        
  82.         TH0 = (65536 - 1000) / 256;
  83.   TL0 = (65536 - 1000) % 256;
  84.         count+=1;
  85. }
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:883242 發(fā)表于 2023-1-3 16:05 | 只看該作者
開一個定時器,隨機種子用定時器的值。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表