找回密码
 立即注册
查看: 1358|回复: 13

【已解决^o^】STC8H和STC32的随机数是怎么实现真随机的?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-1-10 17:44:17 | 显示全部楼层 |阅读模式
本帖最后由 大明狐 于 2024-1-12 09:55 编辑

////////////////////////////////////////////////////////////////

////    现象1

////////////////////////////////////////////////////////////////


1704877493576.gif



最近在STC8H8K64U上用OLED做小动画的时候,用到了随机数,让画面里的雪花和猫头在随机的位置出现。

程序调用的是 stdlib.h 里的 rand() 函数,而且并没有配置随机数种子。
结果突然发现,每次给单片机重新上电,雪花和猫头并没有在相同的地方出现,而是每次都不一样。
然后单独写了一个随机数显示程序试了一下

                while( i < 8 )
                {
                                RandomNum = rand() % 100;
                                OLED_ShowNum( i % 2 * 64 , i / 2 * 2, RandomNum, 5, 16);
                                i ++;
                }

1704877209819.gif


结果同样也是每次生成的数列都不一样。
这跟印象里的随机函数的用法有很大不同。

同样的程序,再在STC8A、STC32G、STC32F上试了下,同样也是真随机的。
Screenshot_2024-01-10-17-22-57-884_com.miui.media.jpg Screenshot_2024-01-10-17-23-34-453_com.miui.media.jpg Screenshot_2024-01-10-17-23-14-718_com.miui.media.jpg



////////////////////////////////////////////////////////////////
////    现象2
////////////////////////////////////////////////////////////////



然后发现,随机数真随机的这四个单片机,用的都是在官方提供的带USB-HID自动下载功能的程序模板的基础上写的程序。
另外还配置了硬件I2C和硬件SPI。

1、
于是尝试把硬件I2C和硬件SPI改回模拟I2C和模拟SPI,
结果 -> 产生的随机数依旧随机

2、
继续尝试把模板里的
stc32_stc8_usb.h 去掉
P_SW2 = 0x80;   删掉
usb_init 和 EA = 1 也都删掉
结果 -> 产生的随机数依旧随机


3、
新建一个空白工程,运行随机数函数
结果 -> 产生的随机数不随机了





////////////////////////////////////////////////////////////////
////    疑问
////////////////////////////////////////////////////////////////


所以可以确定是某一个功能,导致了随机函数生成的随机数真的变随机了。
但是查资料却找不到具体是那个功能产生的这个效果。
比如可以通过配置哪个寄存器,或者执行哪条命令,可以开启这个真随机数的功能。


以下是能产生随机数的程序源码
20240109_1OLED8H_USB下载_硬件IIC_随机数有效.rar (62.27 KB, 下载次数: 124)


好奇的闹心好几天了,特来求教。









1704876585505.jpg
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-10 17:57:29 | 显示全部楼层
随机数:
1, 启动 T0/T1/T2
2, 轮流 启动  ADC【0 ~ 15】

3, 读 ADC 的值与读 T0/T1/T2的值 简单 运算

点评

不是这个意思老大制造“噪声”来改变随机数种子我能理解。。。 我是说,发现STC8A、8H、32G、32F这几个型号,如果用官方提供的USB-HID自动下载模板工程来写程序,在不通过获取那些随机条件来更改随机数种子seed的情  详情 回复 发表于 2024-1-10 18:07
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-1-10 18:07:17 | 显示全部楼层
神*** 发表于 2024-1-10 17:57
随机数:
1, 启动 T0/T1/T2
2, 轮流 启动  ADC【0 ~ 15】

不是这个意思老大制造“噪声”来改变随机数种子我能理解。。。

我是说,发现STC8A、8H、32G、32F这几个型号,如果用官方提供的USB-HID自动下载模板工程来写程序,在不通过获取那些随机条件来更改随机数种子seed的情况下,就能每次上电都产生不一样的随机数;而用空白模板写,却每次都一样。
但是找不到原因是什么。。。。。
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2025-03-18 17:17:30

14

主题

67

回帖

814

积分

高级会员

积分
814
发表于 2024-1-10 23:53:48 来自手机 | 显示全部楼层
我在抖音上刷到你了,还给你点赞了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-1-11 07:53:28 | 显示全部楼层
8[GLDELPB_83H919OOAO4.png


设置了这个的原因,xdata上电未初始化

点评

果然是这个原因!!!太棒了!!! 在STC8G单片机上试了下也有效果!  详情 回复 发表于 2024-1-11 12:03
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-1-11 11:15:34 | 显示全部楼层
yywf202*** 发表于 2024-1-10 23:53
我在抖音上刷到你了,还给你点赞了

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-1-11 12:03:06 | 显示全部楼层
QQ6243*** 发表于 2024-1-11 07:53
设置了这个的原因,xdata上电未初始化

果然是这个原因!!!太棒了!!!

在STC8G单片机上试了下也有效果!



能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:53
  • 最近打卡:2025-05-01 10:41:47

5

主题

62

回帖

168

积分

注册会员

积分
168
发表于 2024-1-11 12:17:40 | 显示全部楼层
yywf202*** 发表于 2024-1-10 23:53
我在抖音上刷到你了,还给你点赞了

B站上也有。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-02 01:28:16
已绑定手机

40

主题

371

回帖

843

积分

高级会员

积分
843
发表于 2024-1-11 15:11:21 | 显示全部楼层
伪随机数就好了,用个计时器不断地加,然后做加减乘除就好了,没有真随机

点评

又不是为了应用能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐,是我的荣幸。  详情 回复 发表于 2024-1-11 16:25
纸上得到终觉浅,绝知此事要躬行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-01 15:00:39

24

主题

305

回帖

2556

积分

荣誉版主

积分
2556
发表于 2024-1-11 16:25:12 | 显示全部楼层
飞*** 发表于 2024-1-11 15:11
伪随机数就好了,用个计时器不断地加,然后做加减乘除就好了,没有真随机 ...

又不是为了应用能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐,是我的荣幸。
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 1 反对 0

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:35 , Processed in 0.236762 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表