第1个回答 2020-04-13
#include
sbit
csb_sat=
p1^0;
//定义超声波发生脚
void
delay(void)
//延时25微秒,12t芯片用12m误差
0us
{
unsigned
char
a;
for(a=11;a>0;a--);
}
void
csb_fs(int
dat)
{while(dat--){csb_sat=1;delay();csb_sat=0;delay();}}
//发射
void
main()
{
ea=1;
while(1)
{
csb_fs(10);
delay();delay();delay();delay();delay();delay();delay();delay();delay();
ie=0x83;
//int0允许中断
while(ie);
p1_1=1;delay();p1_1=0;delay();p1_1=1;delay();p1_1=0;delay();p1_1=1;delay();p1_1=0;delay();
}
}
void
int0_chuankou(void)
interrupt
0
using
1
//外部int0中断子程序
{
ie=0;//禁止int0中断
}
第2个回答 2010-04-19
//我用的是AT89S52 ,希望对你有帮助~!!
#include<reg52.h>
unsigned char m;
void main()
{
m=0;
EA=1; //开总中断
ET0=1; //开定时器0中断
TMOD=0x01; //定时器0工作在方式1,
TH0=(65536-50000)/256; //给定时器装初值,初值为:15536,也就是定时器计数50000次,如果你用12M晶振,这里等于50MS
TL0=(65536-50000)%256;
TR0=1; // 打开定时器,开始计时
if(m==20){
//如前面所说,计数器溢出一次为50MS,这里就是50MS*20=1S }
}
void time0() interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
}
第3个回答 2010-04-19
#include<reg52.h>
#define unchar unsigned char
unchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
static unchar num;
sbit port=P3^2;
//////////////////////延时
void delay(unchar z)
{int x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
/////////////////////
void main()
{EA=1;
EX0=1;
IT0=1;
num=0;
while(1);
}
void enter0() interrupt 0 using 2
{if(port==0)
{delay(500);
P0=table[num];
num++;
if(num==8)
num=0;}
else delay(50);
}