基与89C51单片机外部中断实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六外部中断实验一

一、实验要求

1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路

2.P1口上拉接8个LED;

3.在Keil软件中编写程序,对LED显示进行控制,显示方式有两种:(1)0、7亮,1、

6亮,2、5亮,3、4亮,0、7亮循环;(2))3、4亮,2、5亮,1、6亮,0、7亮,

3、4亮循环。

4.在P3.2连接一个按键,当按键弹起时引脚为高电平,当按键按下时引脚为低时平

5.编写程序:系统对LED显示进行控制,一开始显示方式为(1),当按下P3.2连接

的按键时,系统在(1)和(2)之间切换显示方式

二、实验目的

1.学习端口输入输出的高级应用

2.掌握LED查表显示法

3.掌握外部中断的工作原理

4.掌握外部中断程序设计

三.实验说明

(条理清晰,含程序的一些功能分析计算)

1.程序中void my_int(void) interrupt 0 using 1

{ flag=!flag;} //中断子程序是中断子程序,就是按键按下中断一次。

2.以下是灯亮的方式改变,即flag取反一次就改变一次。通过i++或i—实现

变化。

while(1)

{ P1=LED[i]; //在P1口显示灯亮的方式

delay_ms(500); //延时0.05s

if(flag) //判断P3^2开关是否按下

{i++;

if(i>=4) //如果灯显示从两边到中间要在回到两边

i=0;}

else{i--;

if(i<0)//同上

i=3;}

四、硬件原理图及程序设计

(一)硬件原理图设计

(二)程序流程图设计

开始

定义变量

i=0;flag=1;

P0=LED[i];

Flag ?

i++; 否 i--;

P3.3按下时进行中

Flag=flag!;

(三)程序设源代码

#include

#define led P0

//1MS延时子程序

void delay_ms(int x){ //延时程序

int i,j;

for(i=0;i

for(j=0;j<120;j++);}

}

char i=0,flag=1; //设定整体变量

char LED[4]={0X7E,0XBD,0XDB,0XE7}; //查表显示的LED代码

void delay_ms(int i);

main(){

EA=1; //开总开关

EX0=1;//开中断小开关

IT0=1;

while(1)

{ P1=LED[i]; //在P1口显示灯亮的方式

delay_ms(500); //延时0.05s

if(flag) //判断P3^2开关是否按下

{i++;

if(i>=4) //如果灯显示从两边到中间要在回到两边

i=0;}

else{i--;

if(i<0)//同上

i=3;}

}

}

void my_int(void) interrupt 0 using 1

{ flag=!flag;} //中断子程序

五.实验总结

3.当我们没用外部中断实现灯亮方式变化时,要判断P3.3口是否按下。这种

方法比较不好,按键要按就点才可以改变。

4.我们仿真图中灯管脚要与程序中的对应。

5.灯亮的间隔时间要设置合适。

实验七外部中断实验二

一、实验要求

1.在数码管动态显示实验中的电路图基础上,绘制两个按钮K1和K2,一端分别与单

片机P3.2和P3.3引脚,当按键弹起时引脚为高电平,当按键按下时引脚为低时平

2.在Keil软件中编写程序, 采用动态显示法,主程序让实现数码管分别显示数字1,

2,3,4,当K1按下时数字顺序向右移一位显示,当K2按下时数字顺序向左移一

位显示

二、实验目的

1.掌握7段数码管的连接方式和动态显示法

2.巩固中断的知识,学会外部中断的使用

3.掌握查表程序、中断服务子程序和延时等子程序的设计

三.实验说明

1.对程序的用查表法显示1234.当要移位时用中断对j++,就是每按下按键就

加一,而另外一个中断j--。

2.查表时我们的表数据是1,2,3,4,1,2,3,4这样就可以实现移位,这

种方法比较简单。

四、硬件原理图及程序设计

(一)硬件原理图设计

(二)程序流程图设计

(三)程序设源代码

#include

sbit P3_2=P3^2;

sbit P3_3=P3^3;

//1MS延时子程序

void delay_ms(int x){ //延时子程序(x)ms

int i,j;

for(i=0;i

for(j=0;j<120;j++);}

}

char TAB[8]={0XF9,0Xa4,0Xb0,0X99,0XF9,0Xa4,0Xb0,0X99}; void delay_ms(int i);

char j=0,a=0,b=0,c=0;

main(){

EA=1;

EX0=1;

IT0=1;

EX1=1;

IT1=1;

a=j+1;

b=j+2;

c=j+3;

while(1)

{

a=j+1;

b=j+2;

c=j+3;

相关文档
最新文档