/************************************************
跳線設置:J7拔掉,J5的23端插上選中喇叭,雙排針除PSEN外全部插上雙排針除PSEN外全部插上
顯示效果:按一下INT0鍵,喇叭就響再按一此不響依此類推
這個程序我把很多中斷設置了進去,給大家留了很多自己修改的空間
************************************************/
#include <reg52.h>
//---------------------------------------------------
//重定義I/0引腳名稱
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit laba=P2^2;
sbit P13=P1^3;
//---------------------------------------------------
//全局變量及位標志定義
bit FINT0;
bit FINT1;
bit FT0;
bit FT1;
bit FT2;
unsigned char T0_10ms;
unsigned char T0_50ms;
unsigned char T0_100ms;
//---------------------------------------------------
//固定函數聲明
void int_0(); //外部中斷0
void int_1(); //外部中斷1
void timer_0(); //定時器中斷1
void timer_1(); //定時器中斷2
void serial_1(); //串行中斷1
void serial_2(); //串行中斷2
//---------------------------------------------------
//用戶函數聲明
void initial(); //初始化
//---------------------------------------------------
void main(){
initial();
while(1){
P13=0; //為了使按'取消'、'確定'鍵能夠產生INT0及INT1中斷
//led4=0; //上一句等價于此句
if(FINT0){ //中斷0來到要做什么事情
FINT0=0;
laba=~laba;
led1=0; //INT0中斷時點亮
led2=0;
led3=0;
led3=0; //可以在此設一個斷點
}
if(FINT1){ //中斷1來到要做什么事情
FINT1=0;
led1=1; //INT1中斷時熄滅
led2=1;
led3=1;
}
if(FT0){
FT0=0;
if(++T0_10ms>30){
T0_10ms=0;
//定時多少做什么事,未初始化里定時器尚未設置
}
}
}
}
//-------------------------------------------------------------------
void initial(){
EA=1; // CPU所有中斷開(IE最高位MSB)
EX0=1; // INT0中斷開
IT0=1; // INT0低電平觸發(為1則為下降沿觸發)
EX1=1; // INT1中斷開
IT1=0; // INT1低電平觸發(為1則為下降沿觸發)
return;
}
//-------------------------------------------------------------------
//INT0中斷 由P3.2引腳產生
void int_0() interrupt 0 using 0
{
FINT0=1;
}
//-------------------------------------------------------------------
//INT1中斷 由P3.3引腳產生
void int_1() interrupt 2 using 1
{
FINT1=1;
}
//-------------------------------------------------------------------
//定時器0中斷
void timer_0() interrupt 1 using 2
{
FT0=1;
}
//-------------------------------------------------------------------
//定時器1中斷
void timer_1() interrupt 3 using 3
{
FT1=1;
}
//-------------------------------------------------------------------
//串行中斷1
void serial_1() interrupt 4
{
}
//-------------------------------------------------------------------
//定時器2中斷
void timer_2() interrupt 5
{
FT2=1;
}
//-------------------------------------------------------------------
雖然有注釋,但還是不太明白。我把程序燒進板子,喇叭直接就間斷地響了,按int0不放,聲音就變成連續。但我看程序看不出有這個效果。連哪里是令喇叭響也找不著。望指導。 怎么這個論壇不是即見即所得的啊?不會編輯了。。。
|