首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

超声波测距c语言

2012-12-14 
超声波测距c语言求助。请各位大侠指点,以下的程序出不来结果,看看是不是程序的问题,另外对我的程序书写规范

超声波测距c语言求助。
请各位大侠指点,以下的程序出不来结果,看看是不是程序的问题,另外对我的程序书写规范有建议的,也欢迎指导。
#include<reg52.h>
#define date P0
#define uchar unsigned char
#define uint unsigned int
sbit D=P2^2;   //段码控制位
sbit W=P2^3;   //位码控制位
sbit T=P1^0;   //发射控制位
//sbit S=P2^0;   //蜂鸣器控制位
uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //0-9编码
uchar code wei[]={0xef,0xdf,0xbf,0x7f};   //数码管四个位编码
uchar temp[3];
uint timeh,timel,time;
bit succeed_flag;
void delayus(uchar t) //延时子函数
{
while(t--);  
}
void delayms(uint o) 
{
while(o--)
{
delayus(245);   //大约延时1ms ,12m晶振
delayus(245);
}
}
void desplay(uint num)     //显示距离子函数
{

uint ge,shi,bai,qian,i;
 ge=(num%1000)%100%10;
 shi=(num%1000)%100/10;
 bai=num%1000/100;
 qian=num/1000; 
temp[3]=duan[ge];
temp[2]=duan[shi];
temp[1]=duan[bai];
temp[0]=duan[qian];
for(i=0;i<4;i++)
{
date=wei[i];
W=1;
W=0;
date=temp[i];
D=1;
D=0;
delayus(20);
}
}
void init_timer0()         //定时器初始化
{
 TMOD|=0x01;
 TH0=(65536-5)/256;
    TL0=(65536-5)%256;

}
void main()

while(1)

 uint distance;   
 EA=0;
 T=1;   
 T=0;  
 delayus(7);   //产生一个20us的脉冲
 T=1;
 init_timer0();
 EA=1; IT0=1;ET0=1; TR0=1;EX0=1; 
// while(succeed_flag==0);   
 if(succeed_flag==1)
 {
  distance=time*7;
  desplay(distance);  
  succeed_flag=0;
  time=0;
 }
 else
 {
   
  desplay(125); 
 }
 }

}

void timer0() interrupt 1     //定时器中断
{    
 TH0=(65536-5)/256;
    TL0=(65536-5)%256;
 time++;
}

void ext() interrupt 0     //外部中断0
{
succeed_flag=1;
EX0=0;
TR0=0;  
}   
[解决办法]
有很多开发板有例子找来看看,
[解决办法]
这样贴程序,估计除了能指出语法上有错误之外,功能上的问题应该没人能知道,这个跟硬件关系很大的
[解决办法]
 while(succeed_flag==0);   
这句才对啊,为什么要注释掉呢?
否则初始化大循环
[解决办法]
帖这么多乱七八糟的拼音字母 想干啥呢
[解决办法]
个人觉得楼主应该把你这个程序的具体功能和最核心的计算过程和变量注释清楚一点,好让别人看的明白点
[解决办法]
T=1;   
 delayus(7);    //产生一个20us的脉冲
 T=0;
 init_timer0();
while(succeed_flag==0);
  EA=1; IT0=1;ET0=1; TR0=1;EX0=1;   

热点排行