第1个回答 2010-09-16
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rst=P3^4;
sbit sda=P3^5;
uchar flag;
//sbit key=P2^0;
//sbit l1=P1^2;
//sbit l2 =P1^3;
//sbit fm=P1^7;
sbit j1=P3^2;
sbit j2=P3^3;
uchar flag1,flag2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delayus(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void send_oneline(uchar add)
{
uchar i;
rst=0;
delay(1);
rst=1;
delay(17); /*复位延时 17MS*/
rst=1;
delay(6); /* delay 6ms */
sda=0;
delay(5); /* delay 5ms */
for(i=0;i<8;i++)
{sda=1;
if(add & 1)
{delayus(4); /* 400us */
sda=0;
delayus(2); /* 200us */
}
else {
delayus(2); /* 200us */
sda=0;
delayus(4); /* 400us */
}
add>>=1; }
sda=1;
}
void main()
{
while(1)
{
if(j1==0)
{
flag=1;
while(!j1);
while(flag)
{
if(j2==0)
{
while(!j2);
send_oneline(0);
delay(3000);
flag=0;
}
}
}
if(j2==0)
{
flag=1;
while(!j2);
while(flag)
{
if(j1==0)
{
while(!j1);
send_oneline(1);
delay(3000);
flag=0;
}
}
}
}
}本回答被提问者采纳
第2个回答 2010-09-15
具体要求呢?硬件电路或接口呢?
//程序说明--------------------
//程序一直检测激光模块接口,
//如果先检测到里面的接口,延时一段 时间后,又检测到外面的接口信号,说明有人往外走,启动语音“谢谢光临”
//如果先检测到外面的接口信号,延时一段时间后,检测到里面的接口信号,说明有人走进来,启动语音“欢迎光临”
#include<AT89X52.H>
//端口定义------------------
sbit WELCOME =P3^4;
sbit BYE =P3^5;
sbit INSIDE =P2^4;
sbit OUTSIDE =P2^5;
// 语音(P3.4和P3.5)和激光模块(P2.4和P2.5)
//延时---------------------
void delay()
{
unsigned char i,j,k;
for(i=0;i<200;i++)
for(j=0;j<200;j++)
for(k=0;k<200;k++);
}
//主程序------------------
void main()
{
while(1)
{
if(INSIDE) //出去
{
delay();
if(OUTSIDE)
{
BYE=0;
}
}
if(OUTSIDE) //进来
{
delay();
if(INSIDE)
{
WELCOME=0;
}
}
}
}