打印

在线急等好心人帮忙,谢谢……

[复制链接]
1719|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jd吕凯|  楼主 | 2011-5-25 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个程序是我上午写的一直调到现在都没出结果,目的是绿灯时小车通过两个传感器后测它的速度(小车经过第一个传感器后会进入外部中断0打开定时器0,到 第二个传感器时关闭定时器,再计算时间后计算速度),通过数码管显示出来。红灯时不测速度。
可程序到单片机里数码管一直是0,小车通过两个传感器没有反应。
急切希望有前辈指点一下,实在是想不出怎么回事了!实在不甘心写了这么多却没有预期功能。




#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit red_led=P3^1;
sbit green_led=P3^0;
uint seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint dist=5;
uint speed=0;
uint  d1,d2,d3,d4=0;
uchar flag1=0;
uchar flag2=0;
uchar w=1;
uchar n=0;
uchar th0,tl0;
uchar a=0x7f;
float total_t;
void delay(uint x);

void main()    /*主程序*/
{P1=0x00;
TMOD=0x11;
TH1=(65536-3000)/256;   
TL1=(65536-3000)%256;   
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
ET1=1;
TR1=1;                                                                                                                                                                                                                                                                                             
IT0=1;
IT1=1;   
EX0=1;
while(1)
{EX1=1;
red_led=1;
green_led=0;     /*绿灯亮*/
if(flag2)
{flag2=0;
P1=0x00;
delay(100);
P1=0x40;
delay(100);
P1=0x00;
}
delay(4000);
flag1=1;
EX1=0;
green_led=1;
red_led=0;    /*红灯亮*/
delay(4000);
}  
}

void delay(uint x)
{uint i,j;
for(i=x;i>0;i--)
for(j=112;j>0;j--){;}}

void x_INT0(void) interrupt 0
{EX0=0;
if(flag1)                      /*这一段可不管,是另外一个功能*/
{delay(5);
P1=0x80;
flag1=0;
flag2=1;
}
else
{TR0=1;
}
EX0=1;
}

void x_INT1(void) interrupt 2
{EX1=0;
TR0=0;
th0=TH0;
tl0=TL0;
total_t=(n*65536+th0*256+tl0)/1000000;
speed=(int)(dist/total_t*10);
d1=speed%10;
d2=(speed/10)%10;
d3=(speed/100)%10;
d4=(speed/1000)%10;
TH0=0x00;
TL0=0x00;
EX1=1;
}

void t_INT0(void) interrupt 1  /*小车测速定时器中断*/
{ET0=0;
n=n+1;
TH0=0x00;
TL0=0x00;
ET0=1;
}

void t_INT1(void) interrupt 3  /*小车速度显示*/
{
switch(w)
{case 1:
{P2=a;
P0=~seg[d1];
delay(5);
break;
}
case 2:
{P2=a;
P0=~seg[d2];
delay(5);
break;
}
case 3:
{P2=a;
P0=~seg[d3];
delay(5);
break;
}
case 4:
{P2=a;
P0=~seg[d4];
delay(5);
break;
}
default:break;
}
a=_cror_(a,1);
if(a==0xf7)
{a=0x7f;}
if(w==4)
{w=1;}
else
{w=w+1;}
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
}

相关帖子

沙发
lixiaoxu2meng| | 2011-5-26 10:07 | 只看该作者
你先检查一下 小车通过两个传感器时是否产生了脉冲信号 首先确认硬件没有问题 然后再分析软件

使用特权

评论回复
板凳
hotpower| | 2011-5-26 11:34 | 只看该作者
n被优化掉了

使用特权

评论回复
地板
yewuyi| | 2011-5-26 13:34 | 只看该作者
最怕没头没脑来一把代码的

使用特权

评论回复
5
老鱼探戈| | 2011-5-26 13:38 | 只看该作者
看别人代码没意思,参考别人思路还差不多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

169

帖子

1

粉丝