void 函数名() interrupt 中断号
{
中断服务程序的语句
}
#include
#define uchar unsigned char
#define LED P2
void main()
{
EA = 1; //中断允许寄存器IE中的总控制开关,EA=0代表允许产生中断
EX0 = 1; //中断允许寄存器IE中的EX0=1代表允许INT0产生中断
IT0 = 0; //中断控制寄存器TCON 当IT0 =0时,为电平触发方式,
//如果P3.2为低电平,则产生中断请求(我的单片机P3.2连的是按键6,所以当按键6被按下时,产生中断请求)
LED = 0x0f; //使后四个LED灯亮
}
void Change_LED() interrupt 0
{
LED = 0xf0; //使前四个LED灯亮
}
#include
#define uchar unsigned char
#define LED P2
uchar num;
void main()
{
LED = 0xf0;
TMOD = 0x01;//将定时器0设为方式1,即16位定时器
/*TH0中每增加1,就相当于计了256个数,所以TH0装入初值是对256取模,TL0是对256取余*/
TH0 = (65536-45872)/256;//给定时器的高八位赋初值
TL0 = (65536-45872)%256;//给定时器的低八位赋初值
/*过程中不可能让其计65536个数,所以要给他赋初始值,单片机的晶振为11.0582MHz,机器周期为
1.09us(计一个数的时间),若要每50ms产生一个中断,则要计数50000/1.09=45872,所以将其作为初值*/
EA = 1;//开总中断
ET0 = 1;//开定时器0中断
TR0 = 1;//启动定时器T0
while(1)
{
if(num == 20) //num=20代表用了50ms*20 = 1s
{
num = 0;
LED = ~LED;
}
}
}
void T0time() interrupt 1
{
TH0 = (65536-45872)/256;//重装初值
TL0 = (65536-45872)%256;
num++; //每发生一次中断后,num++,num等于几,用的时间就是几个50ms
}
#include
#define uchar unsigned char
#define uint unsigned int
#define LED P2
sbit S = P3^2;
int j;
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void init();
void key();
void delay(uint z);
void LED_display();
void main()
{
init();
while(1)
LED_display();
}
void init()
{
IT0 = 0; //设置低电平触发外部中断
EA = 1; //开总中断
EX0 = 1;//开外部中断
j = 0;
}
void key()
{
if(S == 0)
{
delay(8); //按键消抖
if(S == 0)
{
j++;
if(j==2)
j = 0;
}
}
while(!S);
}
void delay(uint z) //延时函数
{
uint x,y;
for(x = z;x>0;x--)
for(y=110;y>0;y--);
}
void LED_display()
{
uint i;
for(i=0;i<8;i++) //数组控制流水灯
{
LED = table[i];
delay(500);
}
}
void stop() interrupt 0
{
do{
key();
}while(j == 1); //中断函数,当按键按下时中断
}