如何用KEIL C实现随机数字的产生

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用KEIL C实现随机数字的产生相关的知识,希望对你有一定的参考价值。

现在需要用KEIL C实现随机将0-9这10个数字赋值到KEY1-10这10个对象上去。要求每次都不重复,请问如何实现?希望提供现有的程序,我会追分的!

3楼巨好的方法,支持。

但好像不使用KEIL C产生的!

不过KEIL C中也有随机函数rand();
/*  TEST.c                            */
#include <stdlib.h>

void main(void)

    char i, j, k;
    i = 0x5f;
    j = rand();
    k = 0xf5;


反编译结果,随机数放在R7中
;==========================================================================
Q0003:             MOV   R4,08H                       ;0003   AC 08
                   MOV   R5,09H                       ;0005   AD 09
                   MOV   R6,0AH                       ;0007   AE 0A
                   MOV   R7,0BH                       ;0009   AF 0B
                   MOV   R0,#0FH                      ;000B   78 0F
Q000D:             MOV   A,R7                         ;000D   EF
                   MOV   C,ACC.2                      ;000E   A2 E2
                   MOV   A,R4                         ;0010   EC
                   JB    ACC.6,Q0015                  ;0011   20 E6 01
                   CPL   C                            ;0014   B3
Q0015:             ANL   A,R5                         ;0015   5D
                   ANL   A,R6                         ;0016   5E
                   ANL   A,R7                         ;0017   5F
                   CPL   A                            ;0018   F4
                   JNZ   Q001F                        ;0019   70 04
                   MOV   R4,A                         ;001B   FC
                   MOV   R5,A                         ;001C   FD
                   MOV   R6,A                         ;001D   FE
                   MOV   R7,A                         ;001E   FF
Q001F:             MOV   A,R7                         ;001F   EF
                   RRC   A                            ;0020   13
                   MOV   R7,A                         ;0021   FF
                   MOV   A,R6                         ;0022   EE
                   RRC   A                            ;0023   13
                   MOV   R6,A                         ;0024   FE
                   MOV   A,R5                         ;0025   ED
                   RRC   A                            ;0026   13
                   MOV   R5,A                         ;0027   FD
                   MOV   A,R4                         ;0028   EC
                   RRC   A                            ;0029   13
                   MOV   R4,A                         ;002A   FC
                   DJNZ  R0,Q000D                     ;002B   D8 E0
                   MOV   08H,R4                       ;002D   8C 08
                   MOV   09H,R5                       ;002F   8D 09
                   MOV   0AH,R6                       ;0031   8E 0A
                   MOV   0BH,R7                       ;0033   8F 0B
                   MOV   A,R6                         ;0035   EE
                   ANL   A,#7FH                       ;0036   54 7F
                   MOV   R6,A                         ;0038   FE
                   RET                                ;0039   22
;==========================================================================

参考资料:http://www.21icbbs.com/club/bbs/ShowAnnounce.asp?v=&ID=1586858

参考技术A 你去天空下载个IJKJ编辑器
http://shangyou.sznews.com
也就是想使用单片机来实现随机数吗~???
我也考虑过这个问题~~~
你可以考虑使用计数器来实现随机数的产生,因为计数器可以计数到1ms,这样的数是不可能依靠人的反应来精确的,所以可以当作是随机数...
具体的我没有实现,你可以考虑一下...
普通的随机数用 线性同余 算法就行了。 可以查看VC的库函数的实现。
就是 类似, 随机数=(种子*a +b)% c
在网上搜一下 “线性同余” 的实现就可以了,直接查看VC库中的随机函数实现也可以的啦。
3楼巨好的方法,支持。
但好像不使用KEIL C产生的!
不过KEIL C中也有随机函数rand();
/* TEST.c */
#include <stdlib.h>

void main(void)

char i, j, k;
i = 0x5f;
j = rand();
k = 0xf5;

反编译结果,随机数放在R7中
;==========================================================================
Q0003: MOV R4,08H ;0003 AC 08
MOV R5,09H ;0005 AD 09
MOV R6,0AH ;0007 AE 0A
MOV R7,0BH ;0009 AF 0B
MOV R0,#0FH ;000B 78 0F
Q000D: MOV A,R7 ;000D EF
MOV C,ACC.2 ;000E A2 E2
MOV A,R4 ;0010 EC
JB ACC.6,Q0015 ;0011 20 E6 01
CPL C ;0014 B3
Q0015: ANL A,R5 ;0015 5D
ANL A,R6 ;0016 5E
ANL A,R7 ;0017 5F
CPL A ;0018 F4
JNZ Q001F ;0019 70 04
MOV R4,A ;001B FC
MOV R5,A ;001C FD
MOV R6,A ;001D FE
MOV R7,A ;001E FF
Q001F: MOV A,R7 ;001F EF
RRC A ;0020 13
MOV R7,A ;0021 FF
MOV A,R6 ;0022 EE
RRC A ;0023 13
MOV R6,A ;0024 FE
MOV A,R5 ;0025 ED
RRC A ;0026 13
MOV R5,A ;0027 FD
MOV A,R4 ;0028 EC
RRC A ;0029 13
MOV R4,A ;002A FC
DJNZ R0,Q000D ;002B D8 E0
MOV 08H,R4 ;002D 8C 08
MOV 09H,R5 ;002F 8D 09
MOV 0AH,R6 ;0031 8E 0A
MOV 0BH,R7 ;0033 8F 0B
MOV A,R6 ;0035 EE
ANL A,#7FH ;0036 54 7F
MOV R6,A ;0038 FE
RET ;0039 22
;==========================================================================
参考资料:http://www.21icbbs.com/club/bbs/ShowAnnounce.asp?v=&ID=1586858
KEIL C 不是嵌入式的C语言工具么,那应该也支持标准库啊
<stdlib.h> 的 rand(),srand() 就是产生随即数用的
参考技术B 普通的随机数用 线性同余 算法就行了。 可以查看VC的库函数的实现。

就是 类似, 随机数=(种子*a +b)% c

在网上搜一下 “线性同余” 的实现就可以了,直接查看VC库中的随机函数实现也可以的啦。
参考技术C 也就是想使用单片机来实现随机数吗~???
我也考虑过这个问题~~~

你可以考虑使用计数器来实现随机数的产生,因为计数器可以计数到1ms,这样的数是不可能依靠人的反应来精确的,所以可以当作是随机数...

具体的我没有实现,你可以考虑一下...
参考技术D KEIL C 不是嵌入式的C语言工具么,那应该也支持标准库啊

<stdlib.h> 的 rand(),srand() 就是产生随即数用的

如何用C语言编写个1到100的随机取数程序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
int y,i;
srand((unsigned) time(NULL));
for ( i=0;i<10;i++ ) //下面生成10个随机数并打印

y=rand()%99+1; //生成0~99之间的一个随机数+1=1~100之间的随机数
printf("%d\n",y);

参考技术A #include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char **argv)

int random_number = 0;
srand((unsigned)time(NULL)); //初始化种子;
random_number = rand()%100 + 1; //用rand()生成0-RAND_MAX之间的整数,取余100再加1即从1到100的整数;
printf("%d", random_number);//打印结果;
参考技术B #include<stdio.h>
int main()

int num;
srand(time(0));
num=rand()%100;

printf("取出的数num=%d\n",num);
return 0;

以上是关于如何用KEIL C实现随机数字的产生的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言产生一定范围内的随机数?

如何用rand函数产生一个随机数?

如何用C语言生成时间的随机数

如何用VB产生一个每次都不一样的随机数啊,用rnd的话只能产生一个固定的数字

如何用C语言 写一个随机数生成器的程序

如何用C语言编写个1到100的随机取数程序