单片机c语言随机数的产生,基于51单片机随机数产生.doc

253b171540df25e1b84436cbe50dfc72.gif基于51单片机随机数产生.doc

基于51单片机随机数产生一系统主要功能与设计方案 功能可以根据需要产生给定范围内的任何数字(0999),显 示 于数码管上。 设计方案利用51单片机内部的定时器与中断结合,来模仿随机数的产生;单片机编程上电后,定时器便启动开始计数,计数范围可以 预先设置,其设置的上限值被储存在24c02中;当中断0口产生低电平,进入中断函数读取定时器所跑的数值,经处理送入数码管显示。二电路的硬件 电路搭建如下图,这里我们采用74ls595来驱动数码管,另外,为了防止电流过大这里串联一个75欧电阻用于限流;当操控启动按键后,三个数码管开始跑数字,操控“选择”锁定当前显示的数字,达到随机数产生的目的;考虑到,不同的人对随机数产生的范围要求不同,这里,通过操控“储存,加1,加10,”预设的上限值存储在24c02中。三软件设计include reg51.hinclude intrins.hdefine uchar unsigned char define uint unsigned int define delay _nop_ /* 定义空指令 */ sbit ds0 P20; 74ls595移位寄存器sbit st0P21;sbit sh0P22;sbit ds1 P23;sbit st1P24;sbit sh1P25;sbit ds2 P26;sbit st2P27;sbit sh2P07;sbit p30P30;启动sbit p31P31; 加1 sbit p32P32; 选择sbit p35P35; 存储sbit p36P36;加10 sbit sclP00; I2C 时钟 sbit datP01; I2C 数据 bit ack; /*应答标志位*/ uchar temp,a,j,aa,flag,flag1,flag2,flag3; uchar b,c,d; uchar bb,cc,dd; uchar x,y,z,f,xx; uchar code tab 0 xfc,0 x60,0 xda,0 xf2,0 x66,0 xb6,0 xbe,0 xe0,0 xfe,0 xf6 ; 共阴 void delay1 uint Z uint x,y; forxZ;x0;x fory110;y0;y; void write0unsigned char aunsigned char i;st00;for i0;i8;i if aelse ds00; sh01; sh00; a1; st01;void write1unsigned char aunsigned char i;st10;for i0;i8;i if aelse ds10; sh11; sh10; a1; st11;void write2unsigned char aunsigned char i;st20;for i0;i8;i if aelse ds20; sh21; sh20; a1; st21; void init scl1; dat1; a0; p301; p311; p321;p351;p361;bb0; temp0; TMOD0 x02;TH00 x00;TL00 x00;EA1;ET01;TR01;IT01;EX01; void start24 dat1; delay; scl1; delay; delay; delay; delay; delay; dat0;delay; void stop24 dat0; delay; delay; scl1; delay; delay; dat1; delay;delay;delay;delay;delay;void respons24uchar i;scl1; delay;while dat1i255;scl0;delay;delay;delay;void write24uchar a uchar i,temp; tempa; scl0; delay; delay; for i0;i8;i temptemp1; datCY; delay;delay;delay;delay; delay; scl1; delay; delay;delay;delay; scl0; delay;delay; dat1;释放总线 delay; delay;delay;delay;uchar read24uchar i,j,k;scl0;delay;delay;delay;delay;dat1;释放总线delay;delay;delay;for i0;i8;i scl1; delay;delay;delay;delay; jdat; kk1|j; delay;scl0;delay;delay;delay;delay;return k; void writeinuchar address,uchar date start24; write240 xa0; respons24; write24address; respons24; write24date; respons24; stop24; uchar readoutuchar address start24; write240 xa0; respons24; write24address; respons24; start24; write240 xa1; respons24; tempread24; return temp; void main init ;初始化 tempreadout0; 读取24c02内数值 delay120; 等待读出 cctemp ddtemp tempcc*16dd; while 1 ifp310 加1whilep311flag0; flag11; flag20; ifflag11 temp; xtemp/100;ytemp100/10;ztemp10; write0tabz;write1taby;write2tabx; flag10; ifp360加10whilep361 flag0;flag10;flag21; ifflag21 tempf*10; xtemp/100;ytemp100/10;ztemp10; write0tabz;write1taby;write2tabx; flag20; f; if p300启动 while p301; flag1; if flag1 write0tabj; delay1 20; write1tab10-j; delay1 30;write2tabj; delay1 30;j;if j9j0; ifp350 存储用户设置的随机数产生范围到24c02 whilep351 flag0;flag10;flag20;flag31; ifflag31 xxtemp;writein0,xx/164|xx16;delay12000; flag30; flag1; void timer0 interrupt 1 TH00;TL00; aa;if aatempaa0; void int0 interrupt 0 flag0; daa/100;caa100/10;baa10; write0tabb;write1tabc;write2tabd;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值