[求助] 51单片机课程大作业,我有个想法……

mengdeyongyuan   2011-11-14 19:48 楼主
我是一名大三学生,我想在课程结束时做一个具有如下功能的单片机:
简单来说,就是猜大小的机器。
提供给用户两个按钮,一个对应大,一个对应小。
而单片机模拟一个骰子,我在存储器内预先放了一堆1~6的随机数,
每当用户按一个按钮(比如大)后,我在两个8段数码管上先显示一下这局游戏单片机内对应的随机数(比如3),然后再显示一下77(代表哭的表情),代表用户猜错了,
接着等待用户按键开始下一局游戏。
不知道我这个实现有没有难度?大不大?
我觉得我这个创意还不错,还望大侠们指点我一下应该用怎样的中断啊,片选信号怎么安排,
另外我想问,单片机能否自己产生随机数,如果能的话,就太好啦,我的程序应该会简单很多!
小女在此谢谢大家啦!

回复评论 (13)

对于单片机来说按键算很低速的设备,不用中断普通io也可以
高速计数任意位都是随机的
点赞  2011-11-14 19:55

回复 沙发 huo_hu 的帖子

这样啊!谢谢 !我等试试哈!
点赞  2011-11-15 07:43

用定时器来初始化srand();再用rand();产生随机数

srand(t); //随机数初始化

a=(char)(rand()%6); //取随机数(0~5)

if(a==0) a=6;

 

void time0() interrupt 1 //定时器0中断

{

t++; //时间加1

}

 

PS:要记得写上#include<stdlib.h>

[ 本帖最后由 孤獨の快樂 于 2011-11-15 11:08 编辑 ]
点赞  2011-11-15 10:47

回复 4楼 孤獨の快樂 的帖子

不错= =就是这样
点赞  2011-11-15 11:25

回复 4楼 孤獨の快樂 的帖子

谢谢
点赞  2011-11-15 19:42
看人家是女生都这么热情啊!
点赞  2011-11-16 09:53

回复 4楼 孤獨の快樂 的帖子

请问为什么要 void  time0() interrupt 1{t++;},interrupt 1是什么意思?是固定的?
点赞  2011-11-21 20:18

回复 8楼 mengdeyongyuan 的帖子

知道了知道啦~明白了
点赞  2011-11-21 20:22

引用: 原帖由 mengdeyongyuan 于 2011-11-21 20:18 发表 请问为什么要 void time0() interrupt 1{t++;},interrupt 1是什么意思?是固定的?

interrupt 0  指明是外部中断0;
interrupt 1  指明是定时器中断0;
interrupt 2  指明是外部中断1;
interrupt 3  指明是定时器中断1;
interrupt 4  指明是串行口中断;

点赞  2011-11-21 21:43

回复 10楼 孤獨の快樂 的帖子

1.请问我这个T0应该在什么工作方式下?是方式2那种自动重装初值的么?初值大概怎么设置啊?
2.
srand(t); //随机数初始化
a=(char)(rand()%6); //取随机数(0~5)
if(a==0) a=6;
以上这3行是放在main函数中么?

3.
void time0() interrupt 1 //定时器0中断子程序
{
t++; //时间加1
}
这个的意思是不是t一直累加,不影响程序呢?
4.
我的中断是不是一直开着?还是在需要产生随机数的时候开?
点赞  2011-11-21 22:41
1.随便什么方式都成啦,反正目的只是为了得到随时间的变量t。srand(t); ,t值不同产生的伪随机数也就不同了,由于t值和时间有关,你也无法预测你按下的时候t的值,所以可以认为产生的是随机数。
2.按键按下去才产生随机数,所以是放在按键函数里
3.反正t超出范围就从自动回到0了,没关系
4.一直开着
点赞  2011-11-22 00:30

回复 12楼 孤獨の快樂 的帖子

恩~哈哈,跟我想的有点一样,程序已经写好啦,就是Proteus的图太难画啦~ 衷心感谢哈,没事儿,就是当时比较急,想直接QQ问你问题呢~
点赞  2011-11-25 22:01

引用: 原帖由 mengdeyongyuan 于 2011-11-25 22:01 发表 恩~哈哈,跟我想的有点一样,程序已经写好啦,就是Proteus的图太难画啦~ 衷心感谢哈,没事儿,就是当时比较急,想直接QQ问你问题呢~

你这个设计感觉也蛮简单的吧

点赞  2011-11-26 02:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复