实验任务:
用一位数码管,显示骰子的点数(点数控制在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。当按键按下,会产生一个下降沿