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

上传人:scccc 文档编号:13254930 上传时间:2021-12-20 格式:DOC 页数:8 大小:109.50KB
返回 下载 相关 举报
用单片机产生随机数的两种方法.doc_第1页
第1页 / 共8页
用单片机产生随机数的两种方法.doc_第2页
第2页 / 共8页
用单片机产生随机数的两种方法.doc_第3页
第3页 / 共8页
用单片机产生随机数的两种方法.doc_第4页
第4页 / 共8页
用单片机产生随机数的两种方法.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《用单片机产生随机数的两种方法.doc》由会员分享,可在线阅读,更多相关《用单片机产生随机数的两种方法.doc(8页珍藏版)》请在三一文库上搜索。

1、方法一:定时器直接随机取值 每按一次按键生成一个随机数,这个随机数实际是把定时器的值给取出来 了,并不能算绝对的随机、方法二才是真正意义上的随机。仿真如下:U1XTAL2RSTPSEN ALE EA12 >XTM1ATWC51 <TkT>.1829 .30"31 .一POOLED PO 1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0-7/AD7P2.03P2AMP2 2/A10 P2.3/A11P2.4/A12P2.6/A13 P2.«/A14 P2.7/A15ABCDEFG DP12 34-P1.0 P1.

2、1P1.2 ?1.3P1.4P1.4P1.6P1.7P3.0/RXDP3.1/TXDP3.2/TN1DP3.3/IMTTP3.4TT0P3.5/T1P3.6A/VRP3.7D#include<reg51.h>sbit k1 = P1A0;unsigned int sum1,sum2;unsigned char led11=Ox3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X40;void delay(unsigned int i)unsigned int j,k;ford = O;j<i; j+)for(k = 0; k &

3、lt; 120; k+); void display()P2 = Iedsum1 % 10;P3 = Oxfe;delay ;P3 = Oxff;P2 = ledsum1 /10 % 10;P3 = Oxfd;delay(2);P3 = Oxff;P2 = ledsum2% 10;P3 = Oxfb;delay(2);P3 = Oxff;P2 = ledsum2/10% 10;P3 = 0xf7;delay(2);P3 = Oxff;void main()TMOD = 0X01;THO = OXOO;TLO = 0X00;EA= 1;ET0 = 1;TR0= 1;while(1)if(k1 =

4、 0)while(k1 = 0);sum1 = TLO;sum2 = THO;display();void init() interrupt 1THO = OXOO;TLO = 0X00;方法二:用定时器加rand()随机函数来实现单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取 随机数的话,那侮次上电随机的结果都是一样的。然后是0到9不取复的 随机数,程序中用了循环來判断是否和前而取的随机数相同,相同则进入 卜次取随机数,不同则存入数组。程序如下:#in clude<reg52.h>#include<stdlib.h> 包含rand()随机函数的头文件un

5、signed char t,k,i,j,a,f,n10;t是计时变k是按键标志,i是数纽下标,f是陳机数重复标志,n10 是“放随机数的数组for(j = 0; j < i; j+)与前而的随机数比较t = 0;i = 0;f=0;k = 0;TMOD = 0x02;设置定时器0为工作方式2TH0 二 7;TLO = 7;EA= 1;ET0 = 1;TR0= 1;EX0 = 1;IT0 = 1;装初值开总中断开定时器0中断启动定时0开外部中断0,同按键的效果一样卜降沿触发void main()while(1)while(k)外部中断0触发循环if(!i)匸0时取第一个随机数放入数组n0s

6、rand(t);/随机数初始化a = (char)(rand() % 10); 取随机数(09)n0 = a;i+;elsewhile(i< 10)srand(t);存入数组数组卜标加1放剩卜的9个随机数/随机数初始化for(j = 0; j < i; j+)与前而的随机数比较for(j = 0; j < i; j+)与前而的随机数比较a = (char)(rand() % 10); /取随机数for(j = 0; j < i; j+)与前而的随机数比较if(nj = a) f = 1;if(f)f=0;continue;ni = a;i+;与前而的随机数相同标志置1有重复执行标志清0结束本次循环不同则存入数组中数组下标加1void interO() interrupt 0 外部中断 0for(j = 0; j < i; j+)与前而的随机数比较k= 1;按键标志置1,主函数执行取随机数void timeO() interrupt 1 定时器 0 中断t+;时间加1if(t = 100)t = 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1