#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit d2=P2; //定义P2口LED。 sbit n1=P1^3; //定义P1^3口的LED灯。 void delay(int); uint num; uint table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x98,0x88,0x83, 0xc6,0xa1,0x86,0x8e }; //控制数码管段码从0——F亮。
void main(void) { EA=1; //开总中断开关 EX0=1; //开外部中断0 IT0=0; //设置中断触发方式 while(1) { for(num=0;num<16;num++) {
d2=0; //点亮数码管
P0=table[num]; delay(12450); //延时闪烁。 d2=1; //关闭数码管。 } } } void delay(int z) //延时程序。 { uint i,j; for(i=z;i>0;i--) for(j=2;j>0;j--); } void exter0() interrupt 0 //中断程序。 { n1=0; //打开P1^3口 delay(1); //延时。 }
我用的单片机是没有锁存器的,数码管是共阳极的。与外部中断相关的是P3.2口。
我用线把P3.2接地。按理来说,如果不拔掉这个线,中断就没有停止,也就回不了主程序中去。但是没有,单片机还会回到主程序中去执行数码管的闪烁,一顿饭时间,数码管就从6变为C,只是数码管闪烁得慢了很多,但并没有停止。
我不明白这个程序哪里出错了?
void exter0() interrupt 0 //中断程序。
{
n1=0; //打开P1^3口
delay(1); //延时。
}
你试试 把这个段 改成
void exter0() interrupt 0 //中断程序。
{
while(1)
{
n1=0; //打开P1^3口
delay(1); //延时。
}
}
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |