完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是这样写的:int a;srand(32676);a=rand();a=32776-a;设定单片机0.5秒刷新一次显示,但是我在用1602显示这个数的时候这个随机数却一直不变,请问一下是什么原因啊?
|
|
相关推荐
3个回答
|
|
全部程序在这里,用单片机的测试的时候,单片机的数字一直不变。
#include #include #define uchar unsigned char #define uint unsigned int ***it rs=P2^6; ***it rw=P2^5; ***it lcden=P2^7; uchar ge,shi,bai,qian,wan,i; uchar code table[]="0123456789"; int a; void delay(uint z) { uint x,y; for(x=100;x>0;x--) for(y=z;y>0;y--); } void makerand() { srand(32667); a=rand(); a=32767-a; bai=a/100; shi=a%100/10; ge=a%10; } void write_com(uchar com) { rs=0; rw=0; lcden=0; delay(5); P0=com; lcden=1; delay(5); lcden=0; } void write_date(uchar date) { rs=1; rw=0; lcden=0; delay(5); P0=date; lcden=1; delay(5); lcden=0; } void lcd_init() { lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void main() { lcd_init(); while(1) { write_com(0x80); makerand(); write_date(table[bai]); delay(5); write_date(table[shi]); delay(5); write_date(table[ge]); delay(5); delay(300); } } |
|
|
|
用定时器加rand()随机函数来实现
单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入下次取随机数,不同则存入数组。 程序如下: #include #include //t是计时变量,k是按键标志,i是数组下标,f是随机数重复标志,n[10]是存放随机数的数组 void init() //初始化函数 { t = 0; i = 0; f = 0; k = 0; TMOD = 0x02; //设置定时器0为工作方式2 TH0 = 7; //装初值 TL0 = 7; EA = 1; //开总中断 ET0 = 1; //开定时器0中断 TR0 = 1; //启动定时0 EX0 = 1; //开外部中断0,同按键的效果一样 IT0 = 1; //下降沿触发 } void main() { init(); while(1) { while(k) //外部中断0触发循环 { if(!i) //i=0时取第一个随机数放入数组n[0] { srand(t); //随机数初始化 a = (char)(rand() % 10); //取随机数(0~9) n[0] = a; //存入数组 i++; //数组下标加1 } else while(i < 10) //存放剩下的9个随机数 { srand(t); //随机数初始化 a = (char)(rand() % 10); //取随机数 for(j = 0; j < i; j++) //与前面的随机数比较 { if(n[j] == a) //与前面的随机数相同 f = 1; //标志置1 } if(f) //有重复执行 { f = 0; //标志清0 continue; //结束本次循环 } n[i] = a; //不同则存入数组中 i++; //数组下标加1 } } } } void inter0() interrupt 0 //外部中断0 { k = 1; //按键标志置1,主函数执行取随机数 } void time0() interrupt 1 //定时器0中断 { t++; //时间加1 if(t == 100) { t = 0; } } |
|
|
|
srand(32667);你这句话本来就是个定定值了,要取随机***
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
377 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
536 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
540 浏览 0 评论
950 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1403 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11760 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:25 , Processed in 0.451047 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号