1、实验内容一
1.1、问题一:
设实验连线如图4-1所示,P1口与J9(发光二极管)相连,将一个独立按键接到外部中断0(或1)。
#include <reg51.h>
#include <absacc.h>
int i = 0;
void delay();
void main()
{
EA = 1;
EX0 = 1;
IT0 = 1;
P1 = 0x55;
while (1)
{
}
}
void int0() interrupt 0
{
P1 = ~P1;
delay();
}
void delay()
{ int x,y;
for(x=100;x>0;x--)
for(y=625;y>0;y--);
}
问题(2)的C语言代码如下:
#include <reg51.h>
#include <absacc.h>
int i = 0;
void delay();
void main()
{
EA = 1;
EX0 = 1;
IT0 = 0;
P1 = 0x55;
while (1)
{
}
}
void int0() interrupt 0
{
P1 = ~P1;
delay();
}
void delay()
{ int x,y;
for(x=100;x>0;x--)
for(y=625;y>0;y--);
}
问题(3)的C语言代码如下:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
int i;
char temp;
void delay();
void main()
{
EA = 1;
EX0 = 1;
IT0 = 0;
P1 = 0;
while (1)
{
}
}
void int0() interrupt 0
{
i = 0;
temp = 0xFE;
while (i < 9)
{
P1 = temp;
delay();
temp = _crol_(temp,1);
i++;
}
}
void delay()
{ int x,y;
for(x=200;x>0;x--)
for(y=625;y>0;y--);
}
1.3、问题一的结果和现象:
问题(1)的结果和现象:
当按下独立按键时,偶数位灯亮转变为奇数灯亮,再按下奇数灯亮变为偶数灯亮,依次循环(在实际操作中因为在低电平时会有震荡,会造成在实际过程中可能会有两次下降沿)。当按住独立按键的时候,每次按住跳变一次,依次循环(在实际操作中可能仍会有下降沿的影响,但是下降沿的时间较短,看不出差异)。
问题(2)的结果和现象:
当按下独立按键时,偶数位灯亮转变为奇数灯亮,再按下奇数灯亮变为偶数灯亮,依次循环(在实际操作中因为在低电平时会有震荡,会造成在实际过程中可能会有多次转变)。当按住独立按键时,大约每经过0.5s进行一次转变一次。
问题(3)的结果和现象:
当不按下独立按键时,8位发光二极管常亮,当按下独立按键时,8位二极管从低至高依次循环点亮一遍后恢复常亮状态。
2、实验内容二
2.1、问题二:
设将P1口与J9(发光二极管)相连,将两个独立按键分别接到外部中断0和1,连线如图4-2所示 。
3、实验内容三
3.1、问题三:
如图4-3-1、图4-3-2和图4-3-3为八段数码管的原理图将P1口连至单个共阳数码管(J6),将两个独立按键分别接到外部中断0和外部中断1。编程实现有外部中断时显示数字加1,有外部中断时显示数字减1。
#include <reg51.h>
#include <absacc.h>
void delay() ;
int i = 0;
int code TAB[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main()
{
EA = 1;
EX0 = 1;
EX1 = 1;
IT0 = 0;
IT1 = 0;
P1 = TAB[i];
while (1)
{
}
}
void init0() interrupt 0
{
if (i == 9)
{
i = 0;
P1 = TAB[i];
}
else
P1 = TAB[++i];
delay();
}
void init1() interrupt 2
{
if (i == 0)
{
i = 9;
P1 = TAB[i];
}
else
P1 = TAB[--i];
delay();
}
void delay()
{
int i,j;
for (i = 200; i > 0;i--)
for(j = 125 ; j > 0;j--)
;
}