历史上的今天
返回首页

历史上的今天

今天是:2025年06月04日(星期三)

正在发生

2020年06月04日 | 单片机产生随机数的方法

2020-06-04 来源:elecfans

随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个随机数表,然后进行取数据。也是可以的。

单片机产生随机数的方法

KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现随机数的产生。C语言中有三个通用的随机数发生器,分别为 rand函数, random函数, randomize 函数;但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a);在调用rand函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。


单片机产生随机数的两种方法


方法一:定时器直接随机取值

每按一次按键生成一个随机数,这个随机数实际是把定时器的值给取出来了,并不能算绝对的随机、方法二才是真正意义上的随机。


方法二:用定时器加rand()随机函数来实现

单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0 到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入,下次取随机数,不同则存入数组。

推荐阅读

史海拾趣

Hitachi Metals公司的发展小趣事

面对数字化浪潮的冲击,Hitachi Metals积极拥抱变革,致力于数字化转型。公司推出了全球级别的物联网平台Lumada,该平台能够为客户提供从企业扩建、价值核查到设备和系统管理的全方位解决方案。Lumada平台的成功应用不仅提升了日立金属自身的运营效率和管理水平,还为客户带来了显著的价值增长。通过Lumada平台,日立金属与全球范围内的合作伙伴建立了更加紧密的联系,共同推动电子行业的数字化转型进程。

Hitachi Chemical Co America Ltd公司的发展小趣事

面对数字化浪潮的冲击,Hitachi Metals积极拥抱变革,致力于数字化转型。公司推出了全球级别的物联网平台Lumada,该平台能够为客户提供从企业扩建、价值核查到设备和系统管理的全方位解决方案。Lumada平台的成功应用不仅提升了日立金属自身的运营效率和管理水平,还为客户带来了显著的价值增长。通过Lumada平台,日立金属与全球范围内的合作伙伴建立了更加紧密的联系,共同推动电子行业的数字化转型进程。

HIT(日立)公司的发展小趣事
对于可能产生热量的元件(如可控硅),应采取适当的散热措施,防止元件过热损坏。
Atmel (Microchip)公司的发展小趣事

随着产品的不断完善和技术的不断进步,Atmel开始积极拓展全球市场。公司通过建立遍布全球的办事处和销售网络,将产品销往世界各地。同时,Atmel还注重品牌建设,通过优质的产品和服务,赢得了客户的信任和好评。这使得Atmel在全球微控制器市场中逐渐崭露头角。

Anvo-Systems公司的发展小趣事

Anvo-Systems公司自成立以来,一直致力于电子技术的研发与创新。某年,公司成功研发出一款具有高效能源利用率的智能家居控制系统,该产品迅速在市场上获得了广泛关注。通过不断优化产品性能和用户体验,Anvo-Systems逐步扩大了市场份额,并与多家知名家电品牌建立了合作关系。这一技术突破不仅提升了公司的知名度,也为公司的持续发展奠定了坚实基础。

Anaren公司的发展小趣事

随着公司业务的不断扩展,Anvo-Systems开始实施国际化战略。公司先后在亚洲、欧洲和北美等地设立了研发中心和生产基地,以更好地满足不同地区的市场需求。同时,Anvo-Systems积极参与国际电子展会和技术交流活动,与全球同行建立了广泛的合作关系。这一全球化布局不仅提升了公司的竞争力,也为公司的长期发展打开了新的空间。

问答坊 | AI 解惑

电容式触摸ic

TCH05B---五键电容式触摸感应按键芯片                                             &nb ...…

查看全部问答>

我爱龙芯之话题篇

**************************************************************************************************************** 我爱龙芯之话题篇--------谈“完全独立自主”和“引进先进技术” 龙芯,作为我们中国人自己的CPU,从它的问世之日起,就 ...…

查看全部问答>

急问一个问题????????????

在生成nk时怎么把一个应用程序放到某目录下?? 比如放到\\Program Files下,我只知道在.bib中把文件放在/Windows下,然后.dat中创建链接…

查看全部问答>

请教MAX7219驱动8个LED显示全亮的问题!

关于max7219的显示 我是电子爱好者,近日有个MAX7219的片子,用89C2051 想编个程序显示看看,结果不可以,我感觉没有问题,但我要显示的8个led一上电就全亮,再就没有熄灭过,怎么回事呢,软件问题还是硬件问题,百思不得其解,请问哪位大虾给各指 ...…

查看全部问答>

菜鸟求助:使用CCeSocket提示未定义

提示: \\testDlg.cpp(83) : error C2065: \'CCeSocket\' : undeclared identifier 难道要包含什么头文件吗?…

查看全部问答>

具有挑战的问题EVC

在EVC怎么实现空心字,小弟刚接触EVC,请各位高手帮忙!小弟不胜感激!!…

查看全部问答>

求救LM3S8962网络接口连接问题

我根据TI的评估板画了板子,网络部分和他们画的一样的,如附件所示,可是网络调不通,连接灯不亮。而且焊了R4,R5,R8,R9这四个电阻后片子发热严重,有点烫手。去网上查了下,貌似有很多接法,周立功的好像是R4,R5,R8,R9上没接3.3V,还有的只接了一个 ...…

查看全部问答>

用了STM32的USB库,发现法国人确实不是搞软件的料。

用过很多库,还是美国人提供的库感觉最流畅。 法国人搞软件? 一边凉快去吧。…

查看全部问答>

560仿真器连不上2812

错误提示如下: Error connecting to the target: Error 0x80000240/-505 Fatal Error during: Initialization, OCS,  This error was generated by TI\'s USCIF driver.  Unknown error title. <-505> The explanation i ...…

查看全部问答>