IO实验3——中断按键LED
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void LED_Up(uint x);//单只LED灯依灯上移点亮函数声明
void main()
{
ExInt_Init();//外部中断初始化
LED=0x00;//8个LED全亮
while(1)
{
DelayMS(250);
LED=~LED;//8个LED闪烁
}
}
//*****************************************************************************
IT0=1;//设置外部中断为边沿触发方式
IT1=1;//设置外部中断为边沿触发方式
}
//*********************************************************************************
//函数名:ExInt0_ISR
//函数功能:每次按键都会触发中断,中断发生时8个LED将变成从上到下依次点亮LED,
//函数功能:每次按键都会触发中断,中断发生时8个LED将变成从下到上依次点亮LED,
//循环三圈后恢复成8个LED将闪烁状态,产生LED状态由按键控制的效果
//*********************************************************************************
void ExInt1_ISR() interrupt 2
{
uchar Save_LED=LED;//保护现场,将中断前LED的状态保存
EA=0;//关中断
EA=1;//开中断
LED_Up(3);//单只LED依次灯上移点亮3圈
EA=0;//关中断
LED=Save_LED;//恢复现场,恢复LED中断前的状态
//函数名:LED_Up
//函数功能:单只LED依次灯上移点亮
//形式参数:uint x;上移点亮x圈
//*********************************************************************************
void LED_Up(uint x)
1、基本内容
IF (已经准备有protues仿真文件和HEX文件的)
(1)进行仿真演示。
(1)认真理解并读懂程序,将所给程序在KEIL中编译,产生HEX文件;
(2)将程序烧写到实验箱中的单片机中;
(3)连接实验箱中的硬件:
序号
单片机(A2区)
LED灯、按键(D1区)
备注
1
J61(P10~P17)
J52(LED1~ LED8)
{
uchar i,j;
for(i=0;i<x;i++)//单只LED依次灯上移点亮x圈
{
LED=0x7f;//最下边的LED亮
for(j=0;j<8;j++)
{
DelayMS(250);//延时函数调用
LED=(LED>>1)|0x80;//上移1位后,将MSB设为1,点亮上一个LED
}
}
}
五、实验结果截图
for(j=0;j<120;j++);//循环体为空循环
}
//*********************************************************************************
//函数名:LED_Down
//函数功能:单只LED依次灯下移点亮
//形式参数:uint x;下移点亮x圈
//功能:外部中断0、中断1控制LED
//实验箱上D1区J52接P1
//实验箱上D1区J53接P3
//*****************************************************************************
#include<reg51.h>/*包含头文件REG51.H*/
#define uchar unsigned char
#define uint unsigned int
#define LED P1/*定义8个LED接至P1口*/
void ExInt_Init();//外部中断初始化函数声明
void DelayMS(uint x);//延时函数声明
void LED_Down(uint x);//单只LED灯依次下移点亮函数声明
实验报告三:IO实验3——中断按键LED
一、实验目的:
了解单片机中断系统的结构以及与中断有关的寄存器、中断的开放与禁止,以及中断程序的编写技巧。
二、实验准备内容:
1、认真理解并读懂程序,根据程序画出protues的仿真原理图。
2、把protues文件和编译生成的HEX文件带到实验室。
三、实验内容及要求
//*********************************************************************************
void DelayMS(uint x)
{
uint j,k;//定义无符号字符型变量j和k
for(k=0;k<x;k++)//双重for循环语Hale Waihona Puke Baidu实现软件延时
2
J57(P30~P37)
J53(KEY1~ KEY8)
只有K3,K4有作用
(4)运行程序,在实验箱中实现程序功能。
四、实验程序
//*****************************************************************************
//程序:ex3.c
//函数名:ExInt_Init
//函数功能:外部中断初始化
//*****************************************************************************
void ExInt_Init()
{
IE=0x85;//允许外部中断、开放
IP=0x01;//外部中断为最高优先级
EA=1;//开中断
}
//*********************************************************************************
//函数名:DelayMS
//函数功能:软件延时函数
//形式参数:uint x;x控制空循环的外循环次数,共循环x*120次
for(j=0;j<8;j++)
{
DelayMS(250);//延时函数调用
LED=(LED<<1)|0x01;//下移1位后,将LSB设为1,点亮下一个LED
}
}
}
//*********************************************************************************
//*********************************************************************************
void LED_Down(uint x)
{
uchar i,j;
for(i=0;i<x;i++)//单只LED依次灯下移点亮x圈
{
LED=0xfe;//最上边的LED亮
LED_Down(3);//单只LED依次灯下移点亮3圈
LED= Save_LED;//恢复现场,恢复LED中断前的状态
}
//*********************************************************************************
//函数名:ExInt1_ISR
//循环三圈后恢复成8个LED将闪烁状态,产生LED状态由按键控制的效果
//*********************************************************************************
void ExInt0_ISR() interrupt 0
{
uchar Save_LED=LED;//保护现场,将中断前LED的状态保存
(1)protues仿真图
(2)实验箱运行效果图
六、实验心得体会
回顾起此实验至今我仍感慨颇多,从理论到实践在这段时间里可以说得是苦多于甜,但是可以学到很多很多的东西,比如课本的知识,以及软件的运用,不仅巩固了以前所学过的知识而且学到了很多在书本上所没有学到过的知识。而且我明白了理论到实际的转变是有一定难度的,仅仅学习理论知识不用来实践是不够的,只有把理论知识与实践结合起来,从实践中得到感悟体会,提高自己的实际动手能力和独立思考的能力。虽然实验的过程中遇到各种各样的问题,可以说是困难重重,,遇到各种问题也很正常,但是当这些问题被解决的时候往往有一种从心底散发出来的自豪感,在实验的过程中发现了自己的不足之处,加以改进……经过这次实验的种种困难挫折,我更加熟练的会使用软件来解决问题。
void main()
{
ExInt_Init();//外部中断初始化
LED=0x00;//8个LED全亮
while(1)
{
DelayMS(250);
LED=~LED;//8个LED闪烁
}
}
//*****************************************************************************
IT0=1;//设置外部中断为边沿触发方式
IT1=1;//设置外部中断为边沿触发方式
}
//*********************************************************************************
//函数名:ExInt0_ISR
//函数功能:每次按键都会触发中断,中断发生时8个LED将变成从上到下依次点亮LED,
//函数功能:每次按键都会触发中断,中断发生时8个LED将变成从下到上依次点亮LED,
//循环三圈后恢复成8个LED将闪烁状态,产生LED状态由按键控制的效果
//*********************************************************************************
void ExInt1_ISR() interrupt 2
{
uchar Save_LED=LED;//保护现场,将中断前LED的状态保存
EA=0;//关中断
EA=1;//开中断
LED_Up(3);//单只LED依次灯上移点亮3圈
EA=0;//关中断
LED=Save_LED;//恢复现场,恢复LED中断前的状态
//函数名:LED_Up
//函数功能:单只LED依次灯上移点亮
//形式参数:uint x;上移点亮x圈
//*********************************************************************************
void LED_Up(uint x)
1、基本内容
IF (已经准备有protues仿真文件和HEX文件的)
(1)进行仿真演示。
(1)认真理解并读懂程序,将所给程序在KEIL中编译,产生HEX文件;
(2)将程序烧写到实验箱中的单片机中;
(3)连接实验箱中的硬件:
序号
单片机(A2区)
LED灯、按键(D1区)
备注
1
J61(P10~P17)
J52(LED1~ LED8)
{
uchar i,j;
for(i=0;i<x;i++)//单只LED依次灯上移点亮x圈
{
LED=0x7f;//最下边的LED亮
for(j=0;j<8;j++)
{
DelayMS(250);//延时函数调用
LED=(LED>>1)|0x80;//上移1位后,将MSB设为1,点亮上一个LED
}
}
}
五、实验结果截图
for(j=0;j<120;j++);//循环体为空循环
}
//*********************************************************************************
//函数名:LED_Down
//函数功能:单只LED依次灯下移点亮
//形式参数:uint x;下移点亮x圈
//功能:外部中断0、中断1控制LED
//实验箱上D1区J52接P1
//实验箱上D1区J53接P3
//*****************************************************************************
#include<reg51.h>/*包含头文件REG51.H*/
#define uchar unsigned char
#define uint unsigned int
#define LED P1/*定义8个LED接至P1口*/
void ExInt_Init();//外部中断初始化函数声明
void DelayMS(uint x);//延时函数声明
void LED_Down(uint x);//单只LED灯依次下移点亮函数声明
实验报告三:IO实验3——中断按键LED
一、实验目的:
了解单片机中断系统的结构以及与中断有关的寄存器、中断的开放与禁止,以及中断程序的编写技巧。
二、实验准备内容:
1、认真理解并读懂程序,根据程序画出protues的仿真原理图。
2、把protues文件和编译生成的HEX文件带到实验室。
三、实验内容及要求
//*********************************************************************************
void DelayMS(uint x)
{
uint j,k;//定义无符号字符型变量j和k
for(k=0;k<x;k++)//双重for循环语Hale Waihona Puke Baidu实现软件延时
2
J57(P30~P37)
J53(KEY1~ KEY8)
只有K3,K4有作用
(4)运行程序,在实验箱中实现程序功能。
四、实验程序
//*****************************************************************************
//程序:ex3.c
//函数名:ExInt_Init
//函数功能:外部中断初始化
//*****************************************************************************
void ExInt_Init()
{
IE=0x85;//允许外部中断、开放
IP=0x01;//外部中断为最高优先级
EA=1;//开中断
}
//*********************************************************************************
//函数名:DelayMS
//函数功能:软件延时函数
//形式参数:uint x;x控制空循环的外循环次数,共循环x*120次
for(j=0;j<8;j++)
{
DelayMS(250);//延时函数调用
LED=(LED<<1)|0x01;//下移1位后,将LSB设为1,点亮下一个LED
}
}
}
//*********************************************************************************
//*********************************************************************************
void LED_Down(uint x)
{
uchar i,j;
for(i=0;i<x;i++)//单只LED依次灯下移点亮x圈
{
LED=0xfe;//最上边的LED亮
LED_Down(3);//单只LED依次灯下移点亮3圈
LED= Save_LED;//恢复现场,恢复LED中断前的状态
}
//*********************************************************************************
//函数名:ExInt1_ISR
//循环三圈后恢复成8个LED将闪烁状态,产生LED状态由按键控制的效果
//*********************************************************************************
void ExInt0_ISR() interrupt 0
{
uchar Save_LED=LED;//保护现场,将中断前LED的状态保存
(1)protues仿真图
(2)实验箱运行效果图
六、实验心得体会
回顾起此实验至今我仍感慨颇多,从理论到实践在这段时间里可以说得是苦多于甜,但是可以学到很多很多的东西,比如课本的知识,以及软件的运用,不仅巩固了以前所学过的知识而且学到了很多在书本上所没有学到过的知识。而且我明白了理论到实际的转变是有一定难度的,仅仅学习理论知识不用来实践是不够的,只有把理论知识与实践结合起来,从实践中得到感悟体会,提高自己的实际动手能力和独立思考的能力。虽然实验的过程中遇到各种各样的问题,可以说是困难重重,,遇到各种问题也很正常,但是当这些问题被解决的时候往往有一种从心底散发出来的自豪感,在实验的过程中发现了自己的不足之处,加以改进……经过这次实验的种种困难挫折,我更加熟练的会使用软件来解决问题。