您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > IO实验3——中断按键LED
实验报告三:IO实验3——中断按键LED一、实验目的:了解单片机中断系统的结构以及与中断有关的寄存器、中断的开放与禁止,以及中断程序的编写技巧。二、实验准备内容:1、认真理解并读懂程序,根据程序画出protues的仿真原理图。2、把protues文件和编译生成的HEX文件带到实验室。三、实验内容及要求1、基本内容IF(已经准备有protues仿真文件和HEX文件的)(1)进行仿真演示。(1)认真理解并读懂程序,将所给程序在KEIL中编译,产生HEX文件;(2)将程序烧写到实验箱中的单片机中;(3)连接实验箱中的硬件:序号单片机(A2区)LED灯、按键(D1区)备注1J61(P10~P17)J52(LED1~LED8)2J57(P30~P37)J53(KEY1~KEY8)只有K3,K4有作用(4)运行程序,在实验箱中实现程序功能。四、实验程序//*****************************************************************************//程序:ex3.c//功能:外部中断0、中断1控制LED//实验箱上D1区J52接P1//实验箱上D1区J53接P3//*****************************************************************************#includereg51.h/*包含头文件REG51.H*/#defineucharunsignedchar#defineuintunsignedint#defineLEDP1/*定义8个LED接至P1口*/voidExInt_Init();//外部中断初始化函数声明voidDelayMS(uintx);//延时函数声明voidLED_Down(uintx);//单只LED灯依次下移点亮函数声明voidLED_Up(uintx);//单只LED灯依灯上移点亮函数声明voidmain(){ExInt_Init();//外部中断初始化LED=0x00;//8个LED全亮while(1){DelayMS(250);LED=~LED;//8个LED闪烁}}//*****************************************************************************//函数名:ExInt_Init//函数功能:外部中断初始化//*****************************************************************************voidExInt_Init(){IE=0x85;//允许外部中断、开放IP=0x01;//外部中断为最高优先级IT0=1;//设置外部中断为边沿触发方式IT1=1;//设置外部中断为边沿触发方式}//*********************************************************************************//函数名:ExInt0_ISR//函数功能:每次按键都会触发中断,中断发生时8个LED将变成从上到下依次点亮LED,//循环三圈后恢复成8个LED将闪烁状态,产生LED状态由按键控制的效果//*********************************************************************************voidExInt0_ISR()interrupt0{ucharSave_LED=LED;//保护现场,将中断前LED的状态保存LED_Down(3);//单只LED依次灯下移点亮3圈LED=Save_LED;//恢复现场,恢复LED中断前的状态}//*********************************************************************************//函数名:ExInt1_ISR//函数功能:每次按键都会触发中断,中断发生时8个LED将变成从下到上依次点亮LED,//循环三圈后恢复成8个LED将闪烁状态,产生LED状态由按键控制的效果//*********************************************************************************voidExInt1_ISR()interrupt2{ucharSave_LED=LED;//保护现场,将中断前LED的状态保存EA=0;//关中断EA=1;//开中断LED_Up(3);//单只LED依次灯上移点亮3圈EA=0;//关中断LED=Save_LED;//恢复现场,恢复LED中断前的状态EA=1;//开中断}//*********************************************************************************//函数名:DelayMS//函数功能:软件延时函数//形式参数:uintx;x控制空循环的外循环次数,共循环x*120次//*********************************************************************************voidDelayMS(uintx){uintj,k;//定义无符号字符型变量j和kfor(k=0;kx;k++)//双重for循环语句实现软件延时for(j=0;j120;j++);//循环体为空循环}//*********************************************************************************//函数名:LED_Down//函数功能:单只LED依次灯下移点亮//形式参数:uintx;下移点亮x圈//*********************************************************************************voidLED_Down(uintx){uchari,j;for(i=0;ix;i++)//单只LED依次灯下移点亮x圈{LED=0xfe;//最上边的LED亮for(j=0;j8;j++){DelayMS(250);//延时函数调用LED=(LED1)|0x01;//下移1位后,将LSB设为1,点亮下一个LED}}}//*********************************************************************************//函数名:LED_Up//函数功能:单只LED依次灯上移点亮//形式参数:uintx;上移点亮x圈//*********************************************************************************voidLED_Up(uintx){uchari,j;for(i=0;ix;i++)//单只LED依次灯上移点亮x圈{LED=0x7f;//最下边的LED亮for(j=0;j8;j++){DelayMS(250);//延时函数调用LED=(LED1)|0x80;//上移1位后,将MSB设为1,点亮上一个LED}}}五、实验结果截图(1)protues仿真图(2)实验箱运行效果图六、实验心得体会回顾起此实验至今我仍感慨颇多,从理论到实践在这段时间里可以说得是苦多于甜,但是可以学到很多很多的东西,比如课本的知识,以及软件的运用,不仅巩固了以前所学过的知识而且学到了很多在书本上所没有学到过的知识。而且我明白了理论到实际的转变是有一定难度的,仅仅学习理论知识不用来实践是不够的,只有把理论知识与实践结合起来,从实践中得到感悟体会,提高自己的实际动手能力和独立思考的能力。虽然实验的过程中遇到各种各样的问题,可以说是困难重重,,遇到各种问题也很正常,但是当这些问题被解决的时候往往有一种从心底散发出来的自豪感,在实验的过程中发现了自己的不足之处,加以改进……经过这次实验的种种困难挫折,我更加熟练的会使用软件来解决问题。
本文标题:IO实验3——中断按键LED
链接地址:https://www.777doc.com/doc-5172835 .html