基与89C51单片机外部中断实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;