基于单片机随机分配车位的随机函数

2019-07-16 05:50发布

ti, simsun, sans-serif">有十六个空车位,定义一个随机函数,随机分配车位,若车位有车的话,随机函数不分配,定义四个单片机I/O口,分别为p1.0 p1.1 p1.2 p1.3代表十六个空车位(0000~1111),这个随机函数怎么写啊 用c语言  谢谢各位高手帮忙
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
samdi
1楼-- · 2019-07-16 10:09
用个do while循环试试
ax918
2楼-- · 2019-07-16 12:19
说一下我的思路,可能有不对的地方,调用随机数产生函数rand(),rand()%16得到一个不大于16的随机数,然后取出端口的状态,看看这两个数字是否不同,相同则重新产生随机数,不同则送出这个数字。随机数产生函数的使用,从网上就能查到。其实总共才16个数字,可以利用从0到16来循环,看哪一个数字没有被占用就分配。
cch6213
3楼-- · 2019-07-16 17:16
以前写的随机点闪led的程序,希望对楼主有帮助
  1. #include <stdlib.h>
  2. #include <reg52.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit led0=P1^0;
  6. sbit led1=P1^1;
  7. sbit led2=P1^2;
  8. sbit led3=P1^3;
  9. sbit led4=P1^4;
  10. sbit led5=P1^5;
  11. sbit led6=P1^6;
  12. sbit led7=P1^7;
  13. void delay(uint z)
  14. {
  15. uint x,y;
  16. for(x=z;x>0;x--)
  17. for(y=110;y>0;y--);
  18. }
  19. void main()
  20. {
  21. int led;
  22. P1=0xff;
  23. while(1)
  24. {
  25. led=rand()%8;
  26. switch(led)
  27. {
  28. case 0:
  29. led0=0;
  30. break;
  31. case 1:
  32. led1=0;
  33. break;
  34. case 2:
  35. led2=0;
  36. break;
  37. case 3:
  38. led3=0;
  39. break;
  40. case 4:
  41. led4=0;
  42. break;
  43. case 5:
  44. led5=0;
  45. break;
  46. case 6:
  47. led6=0;
  48. break;
  49. case 7:
  50. led7=0;
  51. break;
  52. }
  53. delay(500);
  54. P1=0xff;
  55. }
  56. }
复制代码
kushuku
4楼-- · 2019-07-16 21:42
 精彩回答 2  元偷偷看……
cch6213
5楼-- · 2019-07-17 00:43
只需要改几个地方
  1. led=rand()%16;
  2. switch(led)
  3. {
  4. case 0:
  5. P1&=0xf0;//假设4-16线译码器连P1低4位
  6. break;
  7. case 1:
  8. P1&=0xf1;//假设4-16线译码器连P1低4位
  9. break;
  10. .
  11. .
  12. case 15:
  13. P1&=0xff;
  14. break;       
  15. }
复制代码

一周热门 更多>