实验任务:
用一位数码管,显示骰子的点数(点数控制在1~6之内),用一个按键完成掷骰子的操作。按键作为外部中断,每按一次按键后,首先控制数码管从a段到f段循环跑2圈,然后生成一个随机点数并在数码管上显示。
实验工具、器材:keil、proteus、AT89C51芯片、共阳数码管、按键
实验原理:
1、外部中断
单片机在自主运行时通常为死循环程序,为了中断死循环,需要外部干预,故在某一时刻响应一个外部事件,让单片机正在运行的程序打断,转去执行相应的中断程序。执行完中断程序,再回来原来中断的地方执行原来的程序。
8051单片机有/INT0和/INT1两条外部中断请求输入线,用于输入两个外部中断源的中断请求信号,并允许外部中断源以低电平或下降沿触发方式来输入中断请求信号。/INT0和/INT1中断的入口地址分别是0003H和0013H。如果外部的中断请求信号产生后可能反时间后才能撤销,则为了避免在中断服务程序里反时间无谓等待,可以选择下降沿触发。下降沿触发是“一次性”的,每次中断只会有1个下降沿,因此中断处理程序执行完后可以立即返回主程序,而不必等待中断请求信号恢复为高电平。
2、随机数的产生
rand()函数可以用来产生随机数,而rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767),要定义的变量类型,int整形的是32767。
硬件电路说明:
将数码管接在AT89C51单片机的I/O口,按键接在P3.2端口即外部中断INT0。当按键按下,会产生一个下降沿,所以外部中断0,由IT0选择下降沿有效的方式;按键按下后中断发生,数码管a—f段逐段点亮,循环两圈,然后产生1-6中的一个随机数,在数码管上显示。
程序
#include <reg51.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define
51单片机数码骰子:外部中断与随机数应用

这篇博客介绍了一个使用51单片机和外部中断实现数码骰子的实验。通过按键触发外部中断,数码管进行a到f段的循环显示,之后生成1-6的随机数并显示。实验涉及了8051单片机的中断原理、下降沿触发以及rand()函数生成随机数的方法。硬件部分包括数码管连接单片机I/O口,按键接在P3.2(INT0)以产生中断请求。
最低0.47元/天 解锁文章
1825

被折叠的 条评论
为什么被折叠?



