基于51单片机随机数产生.doc_第1页
基于51单片机随机数产生.doc_第2页
基于51单片机随机数产生.doc_第3页
基于51单片机随机数产生.doc_第4页
基于51单片机随机数产生.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于51单片机随机数产生一:系统主要功能与设计方案 功能:可以根据需要产生给定范围内的任何数字(0-999),显 示 于数码管上。 设计方案:利用51单片机内部的定时器与中断结合,来模仿随机数的产生;单片机编程上电后,定时器便启动开始计数,计数范围可以 预先设置,其设置的上限值被储存在24c02中;当中断0口产生低电平,进入中断函数读取定时器所跑的数值,经处理送入数码管显示。二:电路的硬件 电路搭建如下图,这里我们采用74ls595来驱动数码管,另外,为了防止电流过大这里串联一个75欧电阻用于限流;当操控启动按键后,三个数码管开始跑数字,操控“选择”锁定当前显示的数字,达到随机数产生的目的;考虑到,不同的人对随机数产生的范围要求不同,这里,通过操控“储存,加1,加10,”预设的上限值存储在24c02中。三:软件设计#include #include #define uchar unsigned char #define uint unsigned int #define delay _nop_() /* 定义空指令 */ sbit ds0= P20; /74ls595移位寄存器sbit st0=P21;sbit sh0=P22;sbit ds1= P23;sbit st1=P24;sbit sh1=P25;sbit ds2= P26;sbit st2=P27;sbit sh2=P07;sbit p30=P30;/启动sbit p31=P31; / 加1 sbit p32=P32; / 选择sbit p35=P35; /存储sbit p36=P36;/加10 sbit scl=P00; /I2C 时钟 sbit dat=P01; /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 =0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6 ; /共阴 void delay1 (uint Z) uint x,y; for(x=Z;x0;x-) for(y=110;y0;y-); void write0(unsigned char a)unsigned char i;st0=0;for (i=0;i=1; st0=1;void write1(unsigned char a)unsigned char i;st1=0;for (i=0;i=1; st1=1;void write2(unsigned char a)unsigned char i;st2=0;for (i=0;i=1; st2=1; void init () scl=1; dat=1; a=0; p30=1; p31=1; p32=1;p35=1;p36=1;bb=0; temp=0; TMOD=0x02;TH0=0x00;TL0=0x00;EA=1;ET0=1;TR0=1;IT0=1;EX0=1; void start24() dat=1; delay; scl=1; delay; delay; delay; delay; delay; dat=0;delay; void stop24() dat=0; delay; delay; scl=1; delay; delay; dat=1; delay;delay;delay;delay;delay;void respons24()uchar i;scl=1; delay;while (dat=1)&(i255);scl=0;delay;delay;delay;void write24(uchar a) uchar i,temp; temp=a; scl=0; delay; delay; for (i=0;i8;i+) temp=temp1; dat=CY; delay;delay;delay;delay; delay; scl=1; delay; delay;delay;delay; scl=0; delay;delay; dat=1;/释放总线 delay; delay;delay;delay;uchar read24()uchar i,j,k;scl=0;delay;delay;delay;delay;dat=1;/释放总线delay;delay;delay;for (i=0;i8;i+) scl=1; delay;delay;delay;delay; j=dat; k=(k1)|j; delay;scl=0;delay;delay;delay;delay;return k; void writein(uchar address,uchar date) start24(); write24(0xa0); respons24(); write24(address); respons24(); write24(date); respons24(); stop24(); uchar readout(uchar address) start24(); write24(0xa0); respons24(); write24(address); respons24(); start24(); write24(0xa1); respons24(); temp=read24(); return temp; void main () init () ;/初始化 temp=readout(0);/ 读取24c02内数值 delay1(20);/ 等待读出 cc=(temp&0xf0)/16; dd=(temp&0x0f)%16; temp=cc*16+dd; while (1) if(p31=0) /加1while(p31!=1)flag=0; flag1=1; flag2=0; if(flag1=1) temp+; x=temp/100;y=temp%100/10;z=temp%10; write0(tabz);write1(taby);write2(tabx); flag1=0; if(p36=0)/加10while(p36!=1) flag=0;flag1=0;flag2=1; if(flag2=1) temp=f*10; x=temp/100;y=temp%100/10;z=temp%10; write0(tabz);write1(taby);write2(tabx); flag2=0; f+; if (p30=0)/启动 while (p30!=1); flag=1; if (flag=1) write0(tabj); delay1 (20); write1(tab10-j); delay1 (30);write2(tabj); delay1 (30);j+;if (j=9)j=0; if(p35=0) /存储用户设置的随机数产生范围到24c02 while(p35!=1) flag=0;flag1=0;flag2=0;flag3=1; if(flag3=1) xx=temp;writein(0,(xx/16)4|(xx%16);delay1(2000); flag3=0; flag=1; vo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论