用51 做了一个倒车雷达的项目。 软件如下,显示距离的时候根本没反应。 不知道哪位高人能帮帮我。。。。
程序: #include "REG51.h" #include "io.h" #include<intrins.h> #define uchar unsigned char //宏定义,为方便编程 #define uint unsigned int uchar t=0; //超接收声波与发送超声波间隔的时间t,单位:毫秒 uchar distance; //车辆距离障碍物的距离 uchar distance_gewei=0; uchar distance_shiwei=0; uchar x,y,z; uint i; unsigned char distance_ge[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xF8,0x00}; //个位数 0 1 2 3 4 5 6 7 8 9 下划线 灭 unsigned char distance_shi[]={0xBF,0x86,0xCB,0xBF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x8E,0x99,0xB7}; //十位数 0 1 2 3 4 5 6 7 8 9 F. H. L. unsigned char zhuzi[]={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F}; //全灭 1根 2根 3根 4根 5根 6根 7根
void delay ( uint z) ; void cs_(); void display();
void main () { EA=1; IT0=1; ET0=1; ET1=1; P1=0x00; P2=0x00; TMOD=0x11; while (1) { TH1=(65535-30000)/256; TL1=(65535-30000)%256; TR1=1; }
delay(1);
}
void cs_r(void) interrupt 0 // 接收程序 外部中断0 { p2_4=0; //关闭光电耦合器 p2_3=1; p2_5=1; p2_6=1; TR0=0; TR1=0; EX0=0; t=(TH0*256+TL0)/1000; //秒 distance=3400*t/2; //分米 distance_shiwei=distance/10; //十位 distance_gewei=distance%10; //个位 display(); delay(20) ; TH1=(65535-30000)/256; TL1=(65535-30000)%256; }
void display() //显示程序 { p1_3=0; p1_0=1; p1_1=0; //个位数 0为打开 1为关闭 共阴极 P0=distance_ge[distance_gewei]; //数码管显示 delay(1); p1_3=0; p1_0=0; //十位数 0为打开 1为关闭 共阴极 p1_1=1; P0=distance_shi[distance_shiwei]; //数码管显示 delay(1); p1_3=1; //柱子共阴极 1打开 0关闭 p1_0=1; p1_1=1; P0=zhuzi[5]; //显示红色柱
}
void cs_() { i=16; while (i--) { p1_4 = 0; _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_(); p1_4 = 1; _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_(); }
p1_4 = 0; p2_4=0; //打开光电耦合器 } void t1() interrupt 3
{ TH1=(65535-30000)/256; TL1=(65535-30000)%256; TH0=0; TH1=0; cs_(); TR0=1; delay(1); EX0=1; TR1=1; }
void t0() interrupt 1 { TH0=0X00; TH1=0X00; } void delay ( uint z) {
for (x=z;x>0;x--) for(y=110;y>0;y--);
}
|